arounddavid
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2004-08-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1341回复:3

内存指针的问题?

楼主#
更多 发布于:2004-06-24 10:49
想要进行用户态和内核态数据的交互。

在passthru.c 内核态中用NdisAllocateMemory分配了内存
 
status = NdisAllocateMemory(ManagerHandle,
                                sizeof(StructureContext),
                                0,
                                HighestAcceptableAddress
                                );

在Application 中使用什么方法才能得到所分配内存的指针呢?(即:上述ManagerHandle指针)

我曾经使用了DeviceIoControl 来进行查询,但没有成功。
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-24 16:50
内核使用的内存地址空间不同于应用层使用的内存地址空间,所以应用层无法直接访问内核使用的内存。如果你确实想在内核和应用层共享内存,则应该是由应用层申请内存,然后通过DeviceIoControl传递到Driver中,并且要调用mmLockXXX驱动才可以安全的使用该内存
IoriKingdom
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2010-04-26
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望23点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-30 13:46
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;chs191840
有两种方法,其中有一种是
1.分配内存
ExAllocatePool
2.分配MDL
IoAllocateMdl
3.创建MDL内存描述页
MmBuildMdlForNonPagedPool
然后在IRP请求例程里面用
MmMapLockedPages/MmMapLockedPagesSpecifyCache
映射给Application,以后用IRP请求就可以得到内核态的内存地址了
天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-30 20:03
看msdn中的HOWTO: Share Memory Between User Mode and Kernel Mode
QID 是 Q191840
里面还有例子

1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部