SpbRequestCaptureIoOtherTransferList 関数 (spbcx.h)

SpbRequestCaptureIoOtherTransferList メソッドは、カスタム IOCTL 要求の入力バッファー内のSPB_TRANSFER_LIST構造体を取得します。

構文

NTSTATUS SpbRequestCaptureIoOtherTransferList(
  SPBREQUEST Request
);

パラメーター

Request

カスタム IOCTL 要求への SPBREQUEST ハンドル。 SPB コントローラー ドライバーは、登録されている イベント コールバック関数のいずれかを通じて、このハンドルを以前に受け取った。

戻り値

呼び出しが成功した場合、SpbRequestCaptureIoOtherTransferList はSTATUS_SUCCESSを返します。 可能な戻り値には、次のエラー コードが含まれます。

戻り値 説明
STATUS_INVALID_PARAMETER
SPBREQUEST パラメーターが無効であるか、要求のSPB_TRANSFER_LIST構造体の形式が正しくありません。
STATUS_INSUFFICIENT_RESOURCES
この操作に必要なシステム リソースを割り当てることができません。

注釈

このメソッドは、バッファー アドレスが有効なプロセスのコンテキストで呼び出す必要があります。 通常、SPB コントローラー ドライバーは、ドライバーが SpbControllerSetIoOtherCallback メソッドへの入力パラメーターとして提供する EvtIoInCallerContext イベント コールバック関数からこのメソッドを呼び出します。

SPB コントローラー ドライバーがこのメソッドを呼び出すことができる最大 IRQL は、I/O 要求の発信元がユーザー モードで実行されているか、カーネル モードで実行されているかによって異なります。 要求がユーザー モードから送信された場合、ドライバーは、PASSIVE_LEVELでこのメソッドを呼び出す必要があります。 要求がカーネル モードから発生した場合、ドライバーは IRQL <= DISPATCH_LEVELでこのメソッドを呼び出す必要があります。 ドライバーは WdfRequestGetRequestorMode メソッドを呼び出して、発信元のモードを判断できます。 ただし、ドライバーは SPB フレームワーク拡張機能 (SpbCx) に依存して、適切な IRQL でドライバーの EvtIoInCallerContext 関数を呼び出すことができるため、通常、この呼び出しは不要です。

次のコード例は、SPB コントローラー ドライバーの EvtIoInCallerContext イベント コールバック関数が SpbRequestCaptureIoOtherTransferList メソッドを使用して、カスタム IOCTL 要求から I/O バッファーまたはバッファーを取得する方法を示しています。

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);
    }
}

要件

要件
サポートされている最小のクライアント Windows 8 以降で使用できます。
対象プラットフォーム ユニバーサル
Header spbcx.h
Library Spbcxstubs.lib
IRQL 「解説」を参照してください。

こちらもご覧ください

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback

WdfRequestGetRequestorMode