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) |
图书馆 | 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) |