SpbRequestCaptureIoOtherTransferList-Funktion (spbcx.h)
Die SpbRequestCaptureIoOtherTransferList Methode ruft die SPB_TRANSFER_LIST Struktur im Eingabepuffer der benutzerdefinierten IOCTL-Anforderung ab.
Syntax
NTSTATUS SpbRequestCaptureIoOtherTransferList(
SPBREQUEST Request
);
Parameter
Request
Eine SPBREQUEST- Handle für die benutzerdefinierte IOCTL-Anforderung. Der SPB-Controllertreiber hat dieses Handle zuvor über eine seiner registrierten Ereignisrückruffunktionenerhalten.
Rückgabewert
SpbRequestCaptureIoOtherTransferList gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Mögliche Rückgabewerte sind die folgenden Fehlercodes.
Rückgabewert | Beschreibung |
---|---|
|
Der SPBREQUEST Parameter ist ungültig, oder die SPB_TRANSFER_LIST Struktur in der Anforderung ist falsch formatiert. |
|
Die für diesen Vorgang erforderlichen Systemressourcen können nicht zugeordnet werden. |
Bemerkungen
Diese Methode muss im Kontext des Prozesses aufgerufen werden, in dem die Pufferadressen gültig sind. In der Regel ruft der SPB-Controllertreiber diese Methode aus der EvtIoInCallerContext Ereignisrückruffunktion auf, die der Treiber als Eingabeparameter für die SpbControllerSetIoOtherCallback Methode bereitstellt.
Die maximale IRQL, bei der der SPB-Controllertreiber diese Methode aufrufen kann, hängt davon ab, ob der Absender der E/A-Anforderung im Benutzermodus oder im Kernelmodus ausgeführt wird. Wenn die Anforderung vom Benutzermodus stammt, muss der Treiber diese Methode bei PASSIVE_LEVEL aufrufen. Wenn die Anforderung vom Kernelmodus stammt, muss der Treiber diese Methode bei IRQL <= DISPATCH_LEVEL aufrufen. Der Treiber kann die WdfRequestGetRequestorMode Methode aufrufen, um den Modus des Absenders zu bestimmen. Dieser Aufruf ist jedoch in der Regel unnötig, da sich der Treiber auf die SPB Framework-Erweiterung (SpbCx) verlassen kann, um die EvtIoInCallerContext--Funktion des Treibers an der entsprechenden IRQL aufzurufen.
Beispiele
Das folgende Codebeispiel zeigt, wie ein SPB-Controllertreiber EvtIoInCallerContext Ereignisrückruffunktion die SpbRequestCaptureIoOtherTransferList Methode verwenden kann, um den E/A-Puffer oder Puffer aus einer benutzerdefinierten IOCTL-Anforderung abzurufen.
VOID
EvtIoInCallerContext(
_In_ WDFDEVICE SpbController,
_In_ WDFREQUEST FxRequest
)
{
NTSTATUS status;
//
// NOTE: The driver should check for custom IOCTLs that this
// driver handles. If an IOCTL is not recognized, mark the
// request as STATUS_NOT_SUPPORTED, and complete the request.
//
status = SpbRequestCaptureIoOtherTransferList((SPBREQUEST)FxRequest);
//
// If the preceding call fails, the driver must complete the
// request instead of queueing the request.
//
if (!NT_SUCCESS(status))
{
goto exit;
}
status = WdfDeviceEnqueueRequest(SpbController, FxRequest);
if (!NT_SUCCESS(status))
{
goto exit;
}
exit:
if (!NT_SUCCESS(status))
{
WdfRequestComplete(FxRequest, status);
}
}
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar ab Windows 8. |
Zielplattform- | Universal |
Header- | spbcx.h |
Library | Spbcxstubs.lib |
IRQL- | Siehe Anmerkungen. |