在非WDM驱动中,nBuffer = MmAllocateContiguousMemory( 4567, nPhysicalAddress ); 
改成WDM驱动后就出错了:unresolved external symbol _imp_MmAllocateContiguousMemory@12
这种问题要怎么解决?MmAllocateContiguousMemory和ExAllocatePool有什么区别?
MmAllocateContiguousMemory( 4567, nPhysicalAddress ); 转成ExAllocatePool要怎么用?

解决方案 »

  1.   

    你看看试着加上ntoskrnl.lib或wdmsec.lib行不行,这两个库中都有MmAllocateContiguousMemoryMmAllocateContiguousMemory分配的是非页面内存,且保证在物理内存中是连续的(分配的内存多于一个页面时)。而且它还可以指定分配的内存的位置范围ExAllocatePool可以分配页面内存也可以分配非页内存,但它不保证分配的内存在物理上是连续的。
      

  2.   

    噢,原来是这样,不过要怎么将MmAllocateContiguousMemory转成ExAllocatePool呢?
      

  3.   

    MmAllocateContiguousMemory( 4567, nPhysicalAddress ); 
    对应的换成 
    ExAllocatePool (NonPagedPool, 4567);
      

  4.   

    明白,我也是这样做的,不过自己以前没做过不能确定,谢谢!我原想加上ntoskrnl.lib或wdmsec.lib,好像会出问题,也就是在设备管理器中会出现惊叹号,这是什么原因?
      

  5.   

    恩,好象是不过象对于我这种驱动菜鸟,DDK文档基本足够了。