Freigeben über


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
STATUS_INVALID_PARAMETER
Der SPBREQUEST Parameter ist ungültig, oder die SPB_TRANSFER_LIST Struktur in der Anforderung ist falsch formatiert.
STATUS_INSUFFICIENT_RESOURCES
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.

Siehe auch

EvtIoInCallerContext

SPBREQUEST-

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback-

WdfRequestGetRequestorMode-