Freigeben über


SpbRequestGetTransferParameters-Funktion (spbcx.h)

Die SpbRequestGetTransferParameters Methode ruft die Übertragungsparameter für eine einzelne Übertragung in einer E/A-Übertragungssequenzab.

Syntax

VOID SpbRequestGetTransferParameters(
  [in]            SPBREQUEST              SpbRequest,
  [in]            ULONG                   Index,
  [out, optional] SPB_TRANSFER_DESCRIPTOR *TransferDescriptor,
  [out, optional] PMDL                    *TransferBuffer
);

Parameter

[in] SpbRequest

Eine SPBREQUEST der E/A-Anforderung, aus der die Übertragungsparameter abgerufen werden sollen. Dieser Parameter muss ein Handle für eine IOCTL_SPB_EXECUTE_SEQUENCE Anforderung sein.

[in] Index

Der Index einer Übertragung in der E/A-Übertragungssequenz. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[out, optional] TransferDescriptor

Ein Zeiger auf eine vom Aufrufer zugewiesene SPB_TRANSFER_DESCRIPTOR Struktur, in die die Methode die Übertragungsparameter schreibt. Der TransferDescriptor Parameter ist optional und kann als NULL angegeben werden, wenn der Aufrufer die Übertragungsparameter nicht erfordert. Weitere Informationen finden Sie im Abschnitt Anmerkungen.

[out, optional] TransferBuffer

Ein Zeiger auf eine Position, in die die Methode einen Zeiger auf eine MDL (oder eine MDL-Kette) schreibt, die den physischen Speicher im Übertragungspuffer beschreibt. Der Aufrufer darf den Inhalt dieser MDL nicht ändern. Dieser Parameter ist optional und kann auf NULL festgelegt werden, wenn die MDL nicht benötigt wird. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Rückgabewert

Nichts

Bemerkungen

Um eine E/A-Übertragungssequenz anzufordern, sendet ein Client (Peripherietreiber) des SPB-Controllertreibers eine IOCTL_SPB_EXECUTE_SEQUENCE Anforderung, die eine Liste der Übertragungen in der Sequenz enthält. Ihr Controllertreiber kann SpbRequestGetTransferParameters- aufrufen, um Informationen zu einer bestimmten Übertragung in der Sequenz abzurufen.

Der Index Parameter ist ein Index, der eine bestimmte Übertragung in der Sequenz identifiziert. Wenn N die Anzahl der Übertragungen in der Sequenz ist, reichen gültige Indizes von 0 bis N-1. Um die Anzahl der Übertragungen in der Sequenz zu ermitteln, rufen Sie die SpbRequestGetParameters-Methode auf. Diese Methode ruft eine SPB_TRANSFER_DESCRIPTOR Struktur ab, die die Anforderungsparameter enthält. Das TransferCount Member dieser Struktur gibt die Anzahl der Übertragungen in der Sequenz an.

Wenn TransferDescriptor- ungleich NULL ist, muss der Aufrufer die SPB_TRANSFER_DESCRIPTOR_INIT-Funktion aufrufen, um die Struktur zu initialisieren, bevor SpbRequestGetTransferParametersaufgerufen wird. Nachdem die Struktur initialisiert wurde, kann sie beliebig oft wiederverwendet werden, ohne erneut initialisiert zu werden.

TransferBuffer- ist ein optionaler Zeiger, in den SpbRequestGetTransferParameters einen Zeiger auf eine MDL schreibt, die das physische Seitenlayout für den Übertragungspuffer beschreibt. Der Übertragungspuffer kann durch eine einzelne MDL oder eine MDL-Kette beschrieben werden. Ein einfacher Puffer, der aus einem zusammenhängenden Block des virtuellen Speichers besteht, wird durch eine einzelne MDL beschrieben. Wenn ein Übertragungspuffer als Punktsammlungsliste formatiert ist, wird jeder zusammenhängende Block des virtuellen Speichers im Puffer von einer MDL in einer MDL-Kette beschrieben. Weitere Informationen zu MDLs finden Sie unter Verwenden von MDLs.

Beispiele

//
// Note that this snippet shows a transfer completing synchronously. This
// is a horrible thing for a driver to do, but demonstrates the DDI nicely.
//

WDF_REQUEST_PARAMETERS parameters;
WDF_TRANSFER_DESCRIPTOR transfer;

WDF_REQUEST_PARAMETERS_INIT(&parameters);
WDF_TRANSFER_DESCRIPTOR_INIT(&transfer);

SpbRequestGetParameters(request, &parameters);

for (ULONG i = 0; i < parameters.SequenceCount; i += 1)
{
    WDFMEMORY buffer;

    SpbRequestGetTransferParameters(request, i, &transfer, &buffer);

    MyDriverPerformTransfer(deviceContext, 
                            request,
                            transfer,
                            buffer);
}

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar ab Windows 8.
Zielplattform- Universal
Header- spbcx.h
Library Spbcxstubs.lib
IRQL- <= DISPATCH_LEVEL

Siehe auch