首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在WinCe7用户态应用程序中访问内核态内存

如何在WinCe7用户态应用程序中访问内核态内存
EN

Stack Overflow用户
提问于 2013-07-29 19:47:57
回答 1查看 3.1K关注 0票数 1

我已经为Win CE 7编写了一个直接显示过滤器和一个视频解码器驱动程序。过滤器在用户模式下加载,解码器驱动程序在内核模式下加载。过滤器需要内存来接收输入缓冲区,并通过调用视频解码器驱动程序函数来分配该内存。解码器驱动程序分配内存并从内核空间(>2 2GB)返回其虚拟地址,因为它是在内核模式下加载的。但是过滤器不能访问该存储器,因为它是在用户模式下加载的。

考虑到上述场景,如何使视频解码器驱动程序分配的内存可供过滤器访问?

EN

回答 1

Stack Overflow用户

发布于 2013-08-21 21:00:37

考虑到您使用的是Win CE 7,我不确定这是否会有所帮助,但在Windows 7中,我有一个驱动程序,它可以在将生成的用户模式地址返回给我的应用程序之前,将内核模式地址映射到用户模式地址。

代码语言:javascript
复制
void *userSpaceAddr;

// Allocate the MDL describing our kernel memory
pmdl = IoAllocateMdl((PVOID)&my_heap_var,
                     (ULONG)size_of_my_heap_var,
                     FALSE,
                     FALSE,
                     NULL);
if(!pmdl) {
    DbgPrintEx(DPFLTR_IHVVIDEO_ID, DPFLTR_INFO_LEVEL, "Error on IoAllocateMdl. Returning from driver early.\n");
    return STATUS_INSUFFICIENT_RESOURCES;
}

MmBuildMdlForNonPagedPool(pmdl);

userSpaceAddr = (void *)MmMapLockedPagesSpecifyCache(pmdl, UserMode, MmWriteCombined, NULL, FALSE, LowPagePriority);

userSpaceAddr被映射到调用驱动程序的进程上下文中的用户空间虚拟地址。然后您可以将userSpaceAddr返回到您的应用程序。

这取决于MmMapLockedPagesSpecifyCache函数。MSDN文档:http://msdn.microsoft.com/en-us/library/windows/hardware/ff554629(v=vs.85).aspx

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

https://stackoverflow.com/questions/17923203

复制
相关文章

相似问题

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