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(¶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 以降で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | spbcx.h |
ライブラリ | Spbcxstubs.lib |
IRQL | <= DISPATCH_LEVEL |
関連項目
- IOCTL_SPB_EXECUTE_SEQUENCE
- SPBREQUEST を する
- SPB_TRANSFER_DESCRIPTOR
- SPB_TRANSFER_DESCRIPTOR_INIT
- SpbRequestGetParameters の