flashstar
驱动牛犊
驱动牛犊
  • 注册日期2007-06-26
  • 最后登录2008-02-25
  • 粉丝0
  • 关注0
  • 积分270分
  • 威望28点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
阅读:5283回复:3

求助:MmGetSystemAddressForMdlSafe与MmGetMdlVirtualAddress的区别?

楼主#
更多 发布于:2007-07-24 15:46
各位大侠,小弟刚学NDIS不久,很多东西感觉不是太清楚,
我看了PACKET的代码,
发现MmGetSystemAddressForMdlSafe和MmGetMdlVirtualAddress两个函数的功能都一样,都是返回MDL的虚地址,但是就不明白它们两之间有什么差别,什么情况下用第一个,什么情况下用第二个,请各位帮帮忙!多谢!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-07-25 15:32
1.如果要支持98,只能用MmGetMdlVirtualAddress. 如果是2000以上的系统,用MmGetSystemAddressForMdlSafe
2.二者的区别是失败的时候,MmGetSystemAddressForMdlSafe返回NULL,MmGetMdlVirtualAddress会bugcheck.
ddk里都有详细的说明,提问之前,认真看看ddk
flashstar
驱动牛犊
驱动牛犊
  • 注册日期2007-06-26
  • 最后登录2008-02-25
  • 粉丝0
  • 关注0
  • 积分270分
  • 威望28点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-26 10:37
多谢大侠指点,我看DDK上是这样说的,
Windows 98 does not support MmGetSystemAddressForMdlSafe. Use MmGetSystemAddressForMdl instead.
关于MmGetSystemAddressForMdlSafe与MmGetMdlVirtualAddress的区别DDK上没有明显比较两者的差别。所以来这里求助了!
flashstar
驱动牛犊
驱动牛犊
  • 注册日期2007-06-26
  • 最后登录2008-02-25
  • 粉丝0
  • 关注0
  • 积分270分
  • 威望28点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-08-07 11:26
创建MDL如下:
if (NDIS_STATUS_SUCCESS == NdisAllocateMemoryWithTag(&Pmemory,1514,'BHH'))
    {
        if (PBuffer=IoAllocateMdl(Pmemory,1514,FALSE,FALSE,NULL))
        {
            DebugPrint (("NdisAllocateMemory:IoAllocateMdl:success\n"));
        }
    }
后来的代码要使用PBuffer来保存数据,比如调用NdisMoveMappedMemory,
那是应该NdisMoveMappedMemory(
MmGetSystemAddressForMdlSafe(PBuffer,NormalPagePriority),
pSource,len)
还是这样调用NdisMoveMappedMemory(
MmGetMdlVirtualAddress(PBuffer),
pSource,len)???
请指点!!!
游客

返回顶部