WdfMemoryAssignBuffer 函式 (wdfmemory.h)
[適用於 KMDF 和 UMDF]
WdfMemoryAssignBuffer 方法會將指定的緩衝區指派給驅動程式藉由呼叫 WdfMemoryCreatePreallocated 所建立的記憶體物件。
語法
NTSTATUS WdfMemoryAssignBuffer(
[in] WDFMEMORY Memory,
[in] PVOID Buffer,
[in] size_t BufferSize
);
參數
[in] Memory
呼叫 WdfMemoryCreatePreallocated 取得的架構記憶體物件的句柄。
[in] Buffer
驅動程式提供的緩衝區指標。
[in] BufferSize
Buffer 指向之緩衝區的非零大小,以位元組為單位。
傳回值
如果作業成功,WdfMemoryAssignBuffer 會傳回STATUS_SUCCESS。 否則,此方法可能會傳回下列其中一個值:
傳回碼 | Description |
---|---|
|
偵測到無效的參數。 |
這個方法也可能傳回其他 NTSTATUS值。
如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。
備註
方法可以將緩衝區指派給 WdfMemoryCreatePreallocated 建立的記憶體物件,但不能指派給 WdfMemoryCreate 建立的 記憶體物件。
Buffer 參數指向的緩衝區可從可分頁或不可分頁的記憶體集區配置。 如果驅動程式從可分頁集區配置緩衝區,或緩衝區來自可分頁集區,因為它來自使用者模式應用程式,則驅動程式必須只在 IRQL < DISPATCH_LEVEL存取緩衝區。 (請注意,如果提供,可以在 IRQL <= DISPATCH_LEVEL.) 呼叫驅動程式的 EvtCleanupCallback 和 EvtDestroyCallback 回呼函式
如需架構記憶體物件的詳細資訊,請參閱 使用記憶體緩衝區。
範例
下列程式代碼範例會配置緩衝區,然後將緩衝區指派給架構記憶體物件。
PVOID pNewBuffer = NULL;
pNewBuffer = ExAllocatePoolWithTag(
NonPagedPool,
NEW_BUFFER_SIZE,
MY_DRIVER_TAG
);
if (pNewBuffer == NULL){
goto Error;
}
status = WdfMemoryAssignBuffer(
memHandle,
pNewBuffer,
NEW_BUFFER_SIZE
);
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最小 KMDF 版本 | 1.0 |
最低UMDF版本 | 2.0 |
標頭 | wdfmemory.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF) |
IRQL | 任何層級 |
DDI 合規性規則 | BufAfterReqCompletedIntIoctlA (kmdf) 、 BufAfterReqCompletedIoctlA (kmdf ) 、 BufAfterReqCompletedReadA (kmdf) 、 BufAfterReqCompletedWriteA (kmdf) 、 DriverCreate (kmdf) 、 MemAfterReqCompletedIntIoctlA (kmdf) 、 MemAfterReqCompletedIoctlA (kmdf) 、 MemAfterReqCompletedReadA (kmdf) 、 MemAfterReqCompletedWriteA (kmdf) |