阅读:905回复:1
WDM问题
各位大虾:
为什么通过databuffer=ExAllocatePoolWithTag()分配的内存,我将databuffer上传给应用程序,但这个地址(databuffer)应用程序却不能访问?有什么办法分配一块内存,然后通过RtlCopyMemory考入数据,并将地址传给应用程序,应用程序能够访问? |
|
论坛版主
![]() |
沙发#
发布于: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。 |
|