社区
驱动开发/核心开发
帖子详情
关于内核与用户模式间的内存共享……(高手请进)
yx_mmcall
2004-01-16 10:44:25
小弟我需要在内核层和用户层之间共享内存,要求是:
1、用户与内核层都可以对共享的地址进行访问、偏移并且“长期有效”。
2、效率要求高。
有如下问题:
1、如果通过irp传递地址,当irp结束后该地址在内核模式下已不能使用。
2、使用METHOD_IN_DIRECT方式,在内核模式下对输出的Irp->MdlAddress地址不能偏移?
请各位不吝赐教(最好能给出清晰的过程),谢谢!
...全文
154
8
打赏
收藏
关于内核与用户模式间的内存共享……(高手请进)
小弟我需要在内核层和用户层之间共享内存,要求是: 1、用户与内核层都可以对共享的地址进行访问、偏移并且“长期有效”。 2、效率要求高。 有如下问题: 1、如果通过irp传递地址,当irp结束后该地址在内核模式下已不能使用。 2、使用METHOD_IN_DIRECT方式,在内核模式下对输出的Irp->MdlAddress地址不能偏移? 请各位不吝赐教(最好能给出清晰的过程),谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BLUETUNE
2004-01-18
打赏
举报
回复
Mark !
Leo
2004-01-17
打赏
举报
回复
关注
junhli
2004-01-16
打赏
举报
回复
据我所了解的,共享内存是由内核创建以供应用层共同使用的。一旦创建为共享内存,内核将不能访问。
liotion
2004-01-16
打赏
举报
回复
赞同 dzmsoft(天狼) 的方法。
火焰射手
2004-01-16
打赏
举报
回复
http://www.osronline.com/article.cfm?id=39
ilovedrv
2004-01-16
打赏
举报
回复
可以参考NTDDK下有一个mapmem的例子,实现了驱动程序内存到用户空间的映射,不过比较繁琐。
下面这个方法比较简单:
一般的ring0的virtualaddress不能直接使用.如果需要ring0和ring3共享这部分缓冲,可以通过以下的操作完成.
SystemVirtualAddress = MmAllocateContiguousMemory(NumberOfBytes,
HighestAcceptableAddress);
或者:
SystemVirtualAddress = ExAllocatePool(PoolType, NumberOfBytes);
然后
Mdl = IoAllocateMdl(SystemVirtualAddress, NumberOfBytes, FALSE,
FALSE, NULL);
然后:
如果缓冲区是非分页内存
MmBuildMdlForNonPagedPool(Mdl);
如果十分页内存:
MmProbeAndLockPages(Mdl, KernelMode, IoWriteAccess);
ring3可以使用的virtual Address:
UserVirtualAddress = MmMapLockedPages(Mdl, UserMode);
然后应用程序就可以使用这部分的缓冲区了.
xxcat1220
2004-01-16
打赏
举报
回复
创建METHOD_BUFFERED方式的IO控制,这种方式就是直接引用应用程序传递的内寸而不进行复制,IoGetCurrentIrpStackLocation(Irp)->Parameters.DeviceIoControl.Type3InputBuffer所指向的就是你在应用程序中分配的内寸
dzmsoft
2004-01-16
打赏
举报
回复
你可以通过命名的 Section 对象来实现内存的共享,
在用户模式通过 CreateFileMapping 创建 Section 对象,
在内核心模式用 ZwOpenSection 方法来打开此对象.
【笔记】什么是
内核
/
用户
空
间
从CPU如何运行程序讲起
本文从计算机是如何运行程序开始说起,说明什么是
内核
空
间
(kernel space)和
用户
空
间
(user space),以及两者区别;
qt linux
共享
内存
,qt
共享
内存
(QSharedMemory)
——————————————————写入部分——————————————————(本次程序基于控制台程序)首先 使用
共享
内存
得召唤一下:#include 然后 声明QSharedMemory类。并且命名为smemQSharedMemory smem...
两个或多个进程之
间
通过Win32 API实现
内存
共享
的方法(转)
作者: 未知本文讨论Windows 95环境下,两个或多个进程之
间
通过Win32 API实现
内存
共享
的方法。
共享
内存
的方法可以归纳为四种:
内存
映像文件、
共享
内存
页、动态申请和静态申请、定制资源。
内存
映像文件是其它
内存
共享
...
一文看懂Linux
内核
!Linux
内核
架构和工作原理详解
linux
内核
相关视频解析: 5个方面分析linux
内核
架构,让你对
内核
不再陌生 90分钟了解Linux
内存
架构,numa的优势,slab的实现,vmalloc的原理 手把手带你实现一个Linux
内核
文件系统 简介 作用是将应用层序的请求传递...
Linux
内核
调试方法
内核
开发比
用户
空
间
开发更难的一个因素就是
内核
调试艰难。
内核
错误往往会导致系统宕机,很难保留出错时的现场。调试
内核
的关键在于你的对
内核
的深刻理解。 一 调试前的准备 在调试一个bug之前,我们所要做的准备...
驱动开发/核心开发
21,597
社区成员
21,709
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章