WdfRequestProbeAndLockUserBufferForWrite 関数 (wdfrequest.h)
[KMDF にのみ適用]
WdfRequestProbeAndLockUserBufferForWrite メソッドは、I/O 要求のユーザー モード バッファーが書き込み可能であることを確認し、ドライバー スタック内のドライバーがバッファーに書き込めるようにバッファーの物理メモリ ページをロックします。
構文
NTSTATUS WdfRequestProbeAndLockUserBufferForWrite(
[in] WDFREQUEST Request,
[in] PVOID Buffer,
[in] size_t Length,
[out] WDFMEMORY *MemoryObject
);
パラメーター
[in] Request
フレームワーク要求オブジェクトへのハンドル。
[in] Buffer
要求の出力バッファーへのポインター。 詳細については、「解説」を参照してください。
[in] Length
要求の出力バッファーの長さ (バイト単位)。
[out] MemoryObject
ユーザー出力バッファーを表すフレームワーク メモリ オブジェクトへのハンドルを受け取る場所へのポインター。
戻り値
WdfRequestProbeAndLockUserBufferForWrite は、操作が成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。
リターン コード | 説明 |
---|---|
|
入力パラメーターが無効です。 |
|
Length パラメーターは 0 です。 |
|
要求が既に完了しているか、それ以外の場合は無効です。 |
|
現在のスレッドは、I/O 要求の作成者ではありません。 |
|
操作を完了するためのメモリが不足しています。 |
このメソッドは、他の NTSTATUS 値も返す場合があります。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
注釈
通常、ユーザー出力バッファーは、ドライバーがデバイスから読み取った情報を受け取ります。
メソッドには I/O 要求を作成したプロセスのプロセス コンテキストが必要であるため、 WdfRequestProbeAndLockUserBufferForWrite メソッドを呼び出すことができるのは最上位ドライバーだけです。
Buffer パラメーターが指定するユーザー モード バッファーは、WdfRequestRetrieveUnsafeUserOutputBuffer が取得するバッファーにすることも、別のユーザー モード出力バッファーにすることもできます。 たとえば、バッファーされたアクセス メソッドを使用する I/O 制御コードは、ユーザー モード バッファーへの埋め込みポインターを含む構造体を渡す場合があります。 このような場合、ドライバーはWdfRequestProbeAndLockUserBufferForWrite を使用してバッファーのメモリ オブジェクトを取得できます。
Length パラメーターが指定するバッファーの長さは、バッファーの実際のサイズより大きくすることはできません。 それ以外の場合、ドライバーはバッファーの外部のメモリにアクセスできます。これはセキュリティ 上のリスクです。
WdfRequestProbeAndLockUserBufferForWrite がSTATUS_SUCCESSを返した場合、ドライバーは、ユーザー モード バッファーを表すフレームワーク メモリ オブジェクトへのハンドルを受け取ります。 バッファーにアクセスするには、ドライバーは WdfMemoryGetBuffer を呼び出す必要があります。
フレームワーク メモリ オブジェクトは、ドライバーが WdfRequestComplete を呼び出すと自動的に解放されます。
WdfRequestProbeAndLockUserBufferForWrite の詳細については、「Framework-Based ドライバーでのデータ バッファーへのアクセス」を参照してください。
例
WdfRequestProbeAndLockUserBufferForWrite を使用するコード例については、「WdfRequestProbeAndLockUserBufferForRead」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
Header | wdfrequest.h (Wdf.h を含む) |
Library | Wdf01000.sys (「Framework ライブラリのバージョン管理」を参照)。 |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | DriverCreate(kmdf)、 InvalidReqAccess(kmdf)、 InvalidReqAccessLocal(kmdf)、 KmdfIrql(kmdf)、 KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf) |