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。 否则,此方法可能会返回以下值之一:
返回代码 | 说明 |
---|---|
|
检测到参数无效。 |
此方法还可能返回其他 NTSTATUS 值。
如果驱动程序提供无效的对象句柄,则会发生 bug 检查。
注解
方法可以将缓冲区分配给 WdfMemoryCreatePreallocated 创建的内存对象,但不能分配给 WdfMemoryCreate 创建的内存对象。
可以从可分页或不可分页内存池分配 Buffer 参数指向的缓冲区。 如果驱动程序从可分页池分配缓冲区,或者缓冲区来自可分页池,因为它来自用户模式应用程序,则驱动程序必须仅在 IRQL < DISPATCH_LEVEL访问缓冲区。 (请注意,驱动程序的 EvtCleanupCallback 和 EvtDestroyCallback 回调函数(如果提供)可以在 IRQL <= DISPATCH_LEVEL.)
有关框架内存对象的详细信息,请参阅 使用内存缓冲区。
示例
下面的代码示例分配缓冲区,然后将缓冲区分配给框架内存对象。
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) |
Library | 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) |