我现在在写一个驱动程序,要用到内核模式和用户模式共享内存,现在通过
pShareMM_SYS=ExAllocatePool(NonPagedPool,1024); //获得内核模式虚拟地址
pShareMM_MDL=IoAllocateMdl(pShareMM_SYS,1024,FALSE,FALSE,NULL);//得到MDL
MmBuildMdlForNonPagedPool(pShareMM_MDL);
pShareMM_User=MmMapLockedPagesSpecifyCache(pShareMM_MDL,UserMode,MmCached,NULL,FALSE,NormalPagePriority);//得到用户模式下的虚拟地址。
可以得到内核模式虚拟地址和用户模式下的虚拟地址,在内核模式中用memcpy将数据复制到内核内存地址中,那么在用户模式中该怎么将内存中的数据读出来呢?
我在用户模式下使用memcpy(buffer,(PUCHAR)pShareMM_User,10)就报错,不知道该怎么写了。
------解决思路----------------------
你是什么类型的驱动程序?
一般情况下,应用程序分配内存。然后发IOCTL给驱动程序去获取相关的数据。
应用层和驱动层很少用共享内存来Share数据。