次の方法で共有


SpbRequestGetTransferParameters 関数 (spbcx.h)

SpbRequestGetTransferParameters メソッドは、I/O 転送シーケンス内の個々の転送の転送パラメーターを取得します。

構文

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

パラメーター

[in] SpbRequest

SPBREQUEST、転送パラメーターの取得元の I/O 要求に対するハンドルです。 このパラメーターは、IOCTL_SPB_EXECUTE_SEQUENCE 要求のハンドルである必要があります。

[in] Index

I/O 転送シーケンス内の転送のインデックス。 詳細については、次の「解説」セクションを参照してください。

[out, optional] TransferDescriptor

メソッドが転送パラメーターを書き込む呼び出し元によって割り当てられた SPB_TRANSFER_DESCRIPTOR 構造体へのポインター。 TransferDescriptor パラメーターは省略可能であり、呼び出し元が転送パラメーターを必要としない場合は NULL として指定できます。 詳細については、「解説」セクションを参照してください。

[out, optional] TransferBuffer

メソッドが転送バッファー内の物理メモリを記述する MDL (または MDL チェーン) へのポインターを書き込む場所へのポインター。 呼び出し元は、この MDL の内容を変更しないでください。 このパラメーターは省略可能であり、MDL が必要ない場合は NULL に設定できます。 詳細については、次の「解説」セクションを参照してください。

戻り値

何一つ

備考

I/O 転送シーケンスを要求するには、SPB コント ローラー ドライバーのクライアント (周辺機器ドライバー) は、シーケンス内の転送の一覧を含む IOCTL_SPB_EXECUTE_SEQUENCE 要求を送信します。 コントローラー ドライバー SpbRequestGetTransferParameters を呼び出して、シーケンス内の特定の転送に関する情報を取得できます。

Index パラメーターは、シーケンス内の特定の転送を識別するインデックスです。 N がシーケンス内の転送の数の場合、有効なインデックスの範囲は 0 から N ~ 1 です。 シーケンス内の転送の数を確認するには、SpbRequestGetParameters メソッドを呼び出します。 このメソッドは、要求パラメーターを含む SPB_TRANSFER_DESCRIPTOR 構造体を取得します。 この構造体の TransferCount メンバーは、シーケンス内の転送の数を指定します。

TransferDescriptor が NULL 以外の場合、呼び出し元は、spbRequestGetTransferParameters を呼び出す前に、SPB_TRANSFER_DESCRIPTOR_INIT 関数を呼び出して構造体初期化する必要があります。 構造体を初期化した後は、再初期化せずに必要な回数再利用できます。

TransferBuffer は省略可能なポインターであり、spbRequestGetTransferParameters 転送バッファーの物理ページ レイアウトを記述する MDL へのポインターを書き込みます。 転送バッファーは、1 つの MDL または MDL チェーンによって記述できます。 仮想メモリの連続したブロックで構成される単純なバッファーは、1 つの MDL によって記述されます。 転送バッファーが分散収集リストとしてフォーマットされている場合、バッファー内の仮想メモリの連続した各ブロックは、MDL チェーン内の MDL によって記述されます。 MDL の詳細については、「MDLの使用」を参照してください。

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

必要条件

要件 価値
サポートされる最小クライアント Windows 8 以降で使用できます。
ターゲット プラットフォーム 万国
ヘッダー spbcx.h
ライブラリ Spbcxstubs.lib
IRQL <= DISPATCH_LEVEL

関連項目