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を使用していません。 データ バッファーにアクセスするためにサポートされているメソッドの詳細については、次の「解説」セクションを参照してください。 |
|
要求は既に完了しています。 |
|
入力バッファーの長さは 0 です。 |
|
メモリが不足しています。 |
このメソッドは、他の NTSTATUS 値返す場合もあります。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
備考
要求の入力バッファーには、要求の発信元によって提供されたディスクに書き込まれるデータなどの情報が含まれます。 ドライバーは、書き込み要求またはデバイス I/O 制御要求 WdfRequestRetrieveInputWdmMdl を呼び出すことができますが、読み取り要求には呼び出しません (読み取り要求では入力データが提供されないため)。
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 |
ヘッダー | wdfrequest.h (Wdf.h を含む) |
ライブラリ | Wdf01000.sys (フレームワーク ライブラリのバージョン管理を参照)。 |
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), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedWrite(kmdf), MdlAfterReqCompletedWriteA(kmdf) |