jronald
驱动牛犊
驱动牛犊
  • 注册日期2009-06-21
  • 最后登录2010-09-01
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1394回复:0

[已解决]MDL包含进程号吗?

楼主#
更多 发布于:2010-08-25 20:39
因为MmGetMdlVirtualAddress得到的是用户地址空间的地址,而在驱动派遣函数中调用这个这个函数时,可以能已经以别的进程了,那么MmGetSystemAddressForMdlSafe一定要知道MmGetMdlVirtualAddress得到的地址属于哪个进程,这样它才能找到被映射的物理内存,并在内核空间中重新映射。
感觉有点复杂,不知道是不是这样的?

唉,查了一下MDL 结构
typedef __struct_bcount(Size) struct _MDL {
    struct _MDL *Next;
    CSHORT Size;
    CSHORT MdlFlags;
    struct _EPROCESS *Process;
    PVOID MappedSystemVa;
    PVOID StartVa;
    ULONG ByteCount;
    ULONG ByteOffset;
} MDL, *PMDL;
果然有所属进程,感觉MDL直接存物理地址更好。
游客

返回顶部