cloud_1013
驱动牛犊
驱动牛犊
  • 注册日期2003-11-04
  • 最后登录2004-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:906回复:1

WDM问题

楼主#
更多 发布于:2003-12-18 16:34
各位大虾:
为什么通过databuffer=ExAllocatePoolWithTag()分配的内存,我将databuffer上传给应用程序,但这个地址(databuffer)应用程序却不能访问?有什么办法分配一块内存,然后通过RtlCopyMemory考入数据,并将地址传给应用程序,应用程序能够访问?
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-18 21:40
先用IoAllocateMdl()分配一个MDL并用它描述你的缓冲区,再用MmBuildMdlForNonPagedPool()设置相关内容,接下来用:MmMapLockedPagesSpecifyCache() (for Win2K) or MmMapLockedPages() (for NT V4). 将这个缓冲区映射到用户地址空间。

注意的是:如果应用A需要在kernel分配的缓冲区,刚才所说的动作就必须在A的上下文里面做(注意参数选UserMode),这个可以得到保证,你可以让A发一个IOCTL下来,在这个IOCTL的处理函数里面做刚才的动作,然后把转换好的可以在A的用户态使用的那个地址指针返回给A。
根据地的兄弟们,团结就是力量
游客

返回顶部