txftxf
驱动牛犊
驱动牛犊
  • 注册日期2001-07-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2144回复:1

请问驱动程序如何与应用程序共享内存?

楼主#
更多 发布于:2001-07-19 09:39
我想利用虚拟磁盘技术,写一个pdr驱动,但是文件数据是从应用程序提供的一块共享内存中取回.问题是,我如何与APPLICATION共享内存,
WINDOWS的IPC提供共享内存机制吗?对编写*.PDR的语言有要求吗?
谢谢
softice
驱动牛犊
驱动牛犊
  • 注册日期2001-05-09
  • 最后登录2009-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-07-20 09:45
SysBuffer = ExAllocatePoolWithTag (NonPagedPool,MAXMODNUM*sizeof(*SysBuffer),0x206B6444);
if(!SysBuffer)
KdPrint( ("HookTdi: Allocate SysBuffer fail!\n") );
else
{
//Map into Userspace
pMDL = ExAllocatePoolWithTag(NonPagedPool,
MmSizeOfMdl(SysBuffer,MAXMODNUM*sizeof(*SysBuffer)),
0x206B6444);
if(!pMDL)
KdPrint( ("HookTdi: No enough Mem for MDL!\n") );
else
{
pMDL = MmCreateMdl (pMDL,SysBuffer,MAXMODNUM*sizeof(*SysBuffer));
MmBuildMdlForNonPagedPool(pMDL);
UserBuffer = MmMapLockedPages(pMDL,1);
}

}
地方太窄了,贴不下代码!各位凑活看吧。将SysBuffer映射到用户空间(SysBuffer&UserBuffer系指向同一物理页面,但访问权限不同),前者在2G以上且仅对系统可见,后者则对用户可读写。
游客

返回顶部