首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谁拥有WDFREQUEST中的WDFMEMORY?

谁拥有WDFREQUEST中的WDFMEMORY?
EN

Stack Overflow用户
提问于 2018-10-08 02:32:22
回答 1查看 332关注 0票数 0

我正在写一个Windows内核驱动程序。我需要创建一个新的I/O请求,并为输入缓冲区分配我自己的内存。

代码语言:javascript
运行
复制
// Create request
WDFREQUEST request;
status = WdfRequestCreate(WDF_NO_OBJECT_ATTRIBUTES, target, &request);
if (!NT_SUCCESS(status)) {
    goto exit;
}

// Allocate buffer for request
WDFMEMORY inputMemory;
status = WdfMemoryCreate(WDF_NO_OBJECT_ATTRIBUTES, PagedPool, 0, 1024, &inputMemory, NULL);
if (!NT_SUCCESS(status)) {
    goto exit;
}

// Assign input buffer to request
status = WdfIoTargetFormatRequestForIoctl(target, request, IOCTL_FOO, inputMemory, NULL, NULL, NULL);
if (!NT_SUCCESS(status)) {
    goto exit;
}

// Asynchronously send the ioctl request
WdfRequestSetCompletionRoutine(request, MyCompletionRoutine, NULL);
if (!WdfRequestSend(request, target, NULL)) {
    status = WdfRequestGetStatus(request);
    goto exit;
}

我的问题是,如果WdfIoTargetFormatRequestForIoctl成功完成,我是否也应该在清理过程中执行WdfObjectDelete(inputMemory),或者WdfObjectDelete(request)是否会同时销毁内存和请求?另外,对于函数内的错误清除和完成例程中的错误清除,答案是否相同?

EN

回答 1

Stack Overflow用户

发布于 2019-01-15 04:24:21

根据this的说法,驱动程序对象拥有内存,只有在卸载驱动程序时才会清除内存。

如果可以使用内存,则应该调用WdfObjectDelete()以避免保留未使用的内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52691628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档