stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1136回复:5

能不能在user的外部进程中创建一个buffer使kernal mode里的driver可以访问到

楼主#
更多 发布于:2005-01-13 16:21
因为我听说kernal mode下的地址和user mode下的地址是不一样的,
怎么样才能让他们共享一块内存呢。
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-14 10:55
kernal mode下的地址在线性地址高端
user mode下的地址在线性地址低端
看http://www.driverdevelop.com/forum/html_85053.html?1105671287
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-14 15:40
必须先在核心驱动中创建再锁住,才能在用户模式中用。由于驱动运行在非确定进程上下文,用户进程的地址当前可能在物理内存中,但没有映射,所以访问不到
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-14 16:02
必须先在核心驱动中创建再锁住,才能在用户模式中用。由于驱动运行在非确定进程上下文,用户进程的地址当前可能在物理内存中,但没有映射,所以访问不到


那么在driver里建立了这个kernal mode的buffer后怎么才能在user mode下调用它呢?

我的意思是比如在内核模式里用KeInitializeSynchronizationEvent建立了一个event以后,在win32程序里可以通过OpenEvent接口来打开这个event并可以通过SetEvent或ResetEvent来设置它的signaled状态。

那么相应的在win32里面有这样的接口来打开在kernal里建立的buffer吗?
Odyssey
驱动小牛
驱动小牛
  • 注册日期2004-12-15
  • 最后登录2008-03-29
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望115点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-15 08:17
是可以的。

采用METHOD_NEITHER I/O 模式的IRP,
但是使用之前先用ProbeForRead()验证一下。
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-15 10:46
[quote]必须先在核心驱动中创建再锁住,才能在用户模式中用。由于驱动运行在非确定进程上下文,用户进程的地址当前可能在物理内存中,但没有映射,所以访问不到


那么在driver里建立了这个kernal mode的buffer后怎么才能在user mode下调用它呢?

我的意思是比如在内核模式里用KeInitializeSynchronizationEvent建立了一个event以后,在win32程序里可以通过OpenEvent接口来打开这个event并可以通过SetEvent或ResetEvent来设置它的signaled状态。

那么相应的在win32里面有这样的接口来打开在kernal里建立的buffer吗?
 [/quote]

最简单的方法,再次通过IOCTL让核心驱动代理,微软的NT4以前版本就是这样处理图形的,但效率上有问题,所以干脆在以后版本移到核心中了
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
游客

返回顶部