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
転送パラメーターを取得する I/O 要求に対する SPBREQUEST ハンドル。 このパラメーターは、 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(¶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);
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | spbcx.h |
Library | Spbcxstubs.lib |
IRQL | <= DISPATCH_LEVEL |