次の方法で共有


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を返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。

リターン コード 形容
STATUS_INVALID_PARAMETER
入力パラメーターが無効です。
STATUS_INVALID_USER_BUFFER
Length パラメーターは 0 です。
STATUS_INVALID_DEVICE_REQUEST
要求は既に完了しているか、無効です。
STATUS_ACCESS_VIOLATION
現在のスレッドは、I/O 要求の作成者ではありません。
STATUS_INSUFFICIENT_RESOURCES
操作を完了するためのメモリが不足しています。
 

このメソッドは、他の NTSTATUS 値返す場合もあります。

ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。

備考

通常、ユーザー出力バッファーは、ドライバーがデバイスから読み取った情報を受け取ります。

メソッドには I/O 要求を作成したプロセスのプロセス コンテキストが必要であるため、WdfRequestProbeAndLockUserBufferForWrite メソッドを呼び出すことができるのは最上位ドライバーだけです。

Buffer パラメーターで指定されるユーザー モード バッファーは、WdfRequestRetrieveUnsafeUserOutputBuffer 取得 バッファーにすることも、別のユーザー モード出力バッファーにすることもできます。 たとえば、バッファー内のアクセス メソッドを使用する I/O 制御コードは、ユーザー モード バッファーへの埋め込みポインターを含む構造体を渡す場合があります。 このような場合、ドライバーはWdfRequestProbeAndLockUserBufferForWrite を使用してバッファーのメモリ オブジェクトを取得できます。

Length パラメーターが指定するバッファーの長さは、バッファーの実際のサイズより大きくすることはできません。 それ以外の場合、ドライバーはバッファーの外部のメモリにアクセスできます。これはセキュリティ 上のリスクです。

WdfRequestProbeAndLockUserBufferForWrite がSTATUS_SUCCESSを返す場合、ドライバーは、ユーザー モード バッファーを表すフレームワーク メモリ オブジェクトへのハンドルを受け取ります。 バッファーにアクセスするには、ドライバーは WdfMemoryGetBuffer 呼び出す必要があります。

フレームワーク メモリ オブジェクトは、ドライバーが WdfRequestComplete呼び出すと自動的に解放されます。

WdfRequestProbeAndLockUserBufferForWrite の詳細については、「Framework-Based ドライバー でのデータ バッファーへのアクセス」を参照してください。

WdfRequestProbeAndLockUserBufferForWriteを使用するコード例については、「WdfRequestProbeAndLockUserBufferForReadを参照してください。

必要条件

要件 価値
ターゲット プラットフォーム 万国
最小 KMDF バージョン 1.0
ヘッダー wdfrequest.h (Wdf.h を含む)
ライブラリ Wdf01000.sys (フレームワーク ライブラリのバージョン管理を参照)。
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 する DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

関連項目

WdfMemoryGetBuffer

WdfRequestProbeAndLockUserBufferForRead

WdfRequestRetrieveUnsafeUserOutputBuffer