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。 否則,此方法可能會傳回下列其中一個值:

傳回碼 說明
STATUS_INVALID_PARAMETER
偵測到無效的參數。
 

這個方法也可能傳回其他 NTSTATUS 值

如果驅動程式提供不正確物件控制碼,就會發生錯誤檢查。

備註

方法可以將緩衝區指派給 WdfMemoryCreatePreallocated 建立的記憶體物件,但不能指派給 WdfMemoryCreate 建立的 記憶體物件。

Buffer參數指向的緩衝區可從可分頁或不可分頁的記憶體集區配置。 如果驅動程式從可分頁集區配置緩衝區,或緩衝區來自可分頁集區,因為它來自使用者模式應用程式,則驅動程式必須只在 IRQL < DISPATCH_LEVEL存取緩衝區。 (請注意,如果提供,可以在 IRQL < = DISPATCH_LEVEL.) 呼叫驅動程式的EvtCleanupCallbackEvtDestroyCallback 回呼函式

如需架構記憶體物件的詳細資訊,請參閱 使用記憶體緩衝區

範例

下列程式碼範例會配置緩衝區,然後將緩衝區指派給架構記憶體物件。

PVOID  pNewBuffer = NULL;

pNewBuffer = ExAllocatePoolWithTag(
                                   NonPagedPool,
                                   NEW_BUFFER_SIZE,
                                   MY_DRIVER_TAG
                                   );
if (pNewBuffer == NULL){
    goto Error;
}

status = WdfMemoryAssignBuffer(
                               memHandle,
                               pNewBuffer,
                               NEW_BUFFER_SIZE
                               );

規格需求

   
目標平臺 環球
最小 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)

另請參閱

ExAllocatePoolWithTag

WdfMemoryCreatePreallocated