阅读:1341回复:3
内存指针的问题?
想要进行用户态和内核态数据的交互。
在passthru.c 内核态中用NdisAllocateMemory分配了内存 status = NdisAllocateMemory(ManagerHandle, sizeof(StructureContext), 0, HighestAcceptableAddress ); 在Application 中使用什么方法才能得到所分配内存的指针呢?(即:上述ManagerHandle指针) 我曾经使用了DeviceIoControl 来进行查询,但没有成功。 |
|
沙发#
发布于:2004-06-24 16:50
内核使用的内存地址空间不同于应用层使用的内存地址空间,所以应用层无法直接访问内核使用的内存。如果你确实想在内核和应用层共享内存,则应该是由应用层申请内存,然后通过DeviceIoControl传递到Driver中,并且要调用mmLockXXX驱动才可以安全的使用该内存
|
|
板凳#
发布于: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请求就可以得到内核态的内存地址了 |
|
|
地板#
发布于:2004-06-30 20:03
看msdn中的HOWTO: Share Memory Between User Mode and Kernel Mode
QID 是 Q191840 里面还有例子 |
|
|