共用方式為


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 參數為零。
STATUS_INVALID_DEVICE_REQUEST
要求已經完成或無效。
STATUS_ACCESS_VIOLATION
目前的線程不是 I/O 要求的建立者。
STATUS_INSUFFICIENT_RESOURCES
記憶體不足,無法完成作業。
 

此方法也可能 傳回其他NTSTATUS 值。

如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。

言論

用戶輸出緩衝區通常會接收驅動程式從裝置讀取的資訊。

只有最上層驅動程式可以呼叫 WdfRequestProbeAndLockUserBufferForWrite 方法,因為 方法需要建立 I/O 要求之進程的進程內容。

Buffer 參數指定的使用者模式緩衝區可以是 WdfRequestRetrieveUnsafeUserOutputBuffer 擷取的緩衝區,也可以是不同的使用者模式輸出緩衝區。 例如,使用緩衝存取方法的 I/O 控制項程式代碼可能會傳遞結構,其中包含使用者模式緩衝區的內嵌指標。 在這種情況下,驅動程式可以使用WdfRequestProbeAndLockUserBufferForWrite 來取得緩衝區的記憶體物件。

Length 參數指定的緩衝區長度不得大於緩衝區的實際大小。 否則,驅動程式可以在緩衝區外部存取記憶體,這是安全性風險。

如果 WdfRequestProbeAndLockUserBufferForWrite 傳回STATUS_SUCCESS,驅動程式會接收代表使用者模式緩衝區的架構記憶體物件的句柄。 若要存取緩衝區,驅動程式必須呼叫 WdfMemoryGetBuffer

驅動程式呼叫 WdfRequestComplete時,會自動釋放架構記憶體物件。

如需 WdfRequestProbeAndLockUserBufferForWrite的詳細資訊,請參閱 Framework-Based Drivers 中存取數據緩衝區

例子

如需使用 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