SpbRequestGetTransferParameters-Funktion (spbcx.h)
Die SpbRequestGetTransferParameters-Methode ruft die Übertragungsparameter für eine einzelne Übertragung in einer E/A-Übertragungssequenz ab.
Syntax
void SpbRequestGetTransferParameters(
[in] SPBREQUEST SpbRequest,
[in] ULONG Index,
[out, optional] SPB_TRANSFER_DESCRIPTOR *TransferDescriptor,
[out, optional] PMDL *TransferBuffer
);
Parameter
[in] SpbRequest
Ein SPBREQUEST-Handle für die 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 Parameter TransferDescriptor ist optional und kann als NULL angegeben werden, wenn der Aufrufer die Übertragungsparameter nicht benötigt. Weitere Informationen finden Sie im Abschnitt Hinweise.
[out, optional] TransferBuffer
Ein Zeiger auf eine Position, an der die Methode einen Zeiger auf eine MDL (oder eine MDL-Kette) schreibt, die den physischen Arbeitsspeicher 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
Keine
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 die gültigen Indizes von 0 bis N–1. Um die Anzahl der Übertragungen in der Sequenz zu bestimmen, rufen Sie die SpbRequestGetParameters-Methode auf. Diese Methode ruft eine SPB_TRANSFER_DESCRIPTOR-Struktur ab, die die Anforderungsparameter enthält. Das TransferCount-Element dieser Struktur gibt die Anzahl der Übertragungen in der Sequenz an.
Wenn TransferDescriptor nicht NULL ist, muss der Aufrufer die SPB_TRANSFER_DESCRIPTOR_INIT-Funktion aufrufen, um die Struktur zu initialisieren, bevor SpbRequestGetTransferParameters aufgerufen wird. Nachdem die Struktur initialisiert wurde, kann sie so oft wie nötig wiederverwendet werden, ohne erneut initialisiert zu werden.
TransferBuffer ist ein optionaler Zeiger, in den SpbRequestGetTransferParameters einen Zeiger auf eine MDL schreibt, die das layout der physischen Seite 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 Arbeitsspeichers besteht, wird durch eine einzelne MDL beschrieben. Wenn ein Übertragungspuffer als Punktsammlungsliste formatiert ist, wird jeder zusammenhängende Block des virtuellen Arbeitsspeichers im Puffer durch eine 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(¶meters);
WDF_TRANSFER_DESCRIPTOR_INIT(&transfer);
SpbRequestGetParameters(request, ¶meters);
for (ULONG i = 0; i < parameters.SequenceCount; i += 1)
{
WDFMEMORY buffer;
SpbRequestGetTransferParameters(request, i, &transfer, &buffer);
MyDriverPerformTransfer(deviceContext,
request,
transfer,
buffer);
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows 8. |
Zielplattform | Universell |
Header | spbcx.h |
Bibliothek | Spbcxstubs.lib |
IRQL | <= DISPATCH_LEVEL |