WdfRequestRetrieveInputWdmMdl 関数 (wdfrequest.h)
[KMDF にのみ適用]
WdfRequestRetrieveInputWdmMdl メソッドは、I/O 要求の入力バッファーを表すメモリ記述子リスト (MDL) を取得します。
構文
NTSTATUS WdfRequestRetrieveInputWdmMdl(
[in] WDFREQUEST Request,
[out] PMDL *Mdl
);
パラメーター
[in] Request
フレームワーク要求オブジェクトへのハンドル。
[out] Mdl
MDL へのポインターを受け取る場所へのポインター。
戻り値
操作が成功した場合、WdfRequestRetrieveInputWdmMdl はSTATUS_SUCCESSを返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。
リターン コード | 説明 |
---|---|
|
入力パラメーターが無効です。 |
|
要求の種類が無効であるか、要求で バッファー処理された I/O もダイレクト I/O も使用されていません。 データ バッファーにアクセスするためにサポートされているメソッドの詳細については、次の「解説」セクションを参照してください。 |
|
要求は既に完了しています。 |
|
入力バッファーの長さは 0 です。 |
|
メモリが不足しています。 |
このメソッドは、他の NTSTATUS 値も返す場合があります。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
注釈
要求の入力バッファーには、要求の発信元によって提供されたディスクに書き込まれるデータなどの情報が含まれます。 ドライバーは WdfRequestRetrieveInputWdmMdl を呼び出して、書き込み要求またはデバイス I/O 制御要求を呼び出すことができますが、読み取り要求には呼び出しません (読み取り要求では入力データが提供されないため)。
WdfRequestRetrieveInputWdmMdl メソッドは、バッファー処理された I/O メソッドまたはデータ バッファーにアクセスするためのダイレクト I/O メソッドを使用する I/O 要求の入力バッファーの MDL を取得します。 要求の I/O 制御コードが IRP_MJ_INTERNAL_DEVICE_CONTROLされている場合、または要求が別のカーネル モード ドライバーから送信された場合、 WdfRequestRetrieveInputWdmMdl では 、バッファーされた I/O も直接 I/O も使用しない I/O 要求もサポートされます。
WdfRequestRetrieveInputWdmMdl がSTATUS_SUCCESSを返す場合、ドライバーは入力バッファーを記述する MDL へのポインターを受け取ります。
ドライバーは、 I/O 要求の完了後に要求の MDL にアクセスすることはできません。
WdfRequestRetrieveInputWdmMdl の詳細については、「Framework-Based ドライバーでのデータ バッファーへのアクセス」を参照してください。
例
次のコード例は、I/O 要求の入力バッファーの MDL を取得する EvtIoWrite コールバック関数の一部です。 WdfRequestRetrieveInputWdmMdl の呼び出しが失敗した場合、ドライバーは WdfRequestRetrieveInputWdmMdl が返すエラー状態で要求を完了します。
VOID
MyDrvEvtIoWrite(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t Length
)
{
NTSTATUS status;
PMDL mdl = NULL;
...
status = WdfRequestRetrieveInputWdmMdl(
Request,
&mdl
);
if (!NT_SUCCESS(status))
{
WdfRequestCompleteWithInformation(
Request,
status,
0
);
}
...
}
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
Header | wdfrequest.h (Wdf.h を含む) |
Library | Wdf01000.sys (「Framework ライブラリのバージョン管理」を参照)。 |
IRQL | <=DISPATCH_LEVEL |
DDI コンプライアンス規則 | DriverCreate(kmdf)、 InputBufferAPI(kmdf)、 InvalidReqAccess(kmdf)、 InvalidReqAccessLocal(kmdf)、 KmdfIrql(kmdf)、 KmdfIrql2(kmdf)、 KmdfIrqlExplicit(kmdf)、 MdlAfterReqCompletedIntIoctl(kmdf)、 MdlAfterReqCompletedIntIoctlA(kmdf)、 MdlAfterReqCompletedIoctl(kmdf)、 MdlAfterReqCompletedIoctlA(kmdf)、 MdlAfterReqReqCompletedRead(kmdf)、 MdlAfterReqCompletedWrite(kmdf)、 MdlAfterReqCompletedWriteA(kmdf) |