icessl
驱动牛犊
驱动牛犊
  • 注册日期2002-08-12
  • 最后登录2002-08-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1313回复:8

在 DriverWorks 的 WDM 里,如何申请一片连续的实存

楼主#
更多 发布于:2002-08-14 16:55
在 DriverWorks 的 WDM 里,如何申请一片连续的实存,
即如何实现 NTDDK 里的这个函数:
PVOID
  MmAllocateContiguousMemory(
    IN ULONG  NumberOfBytes,
    IN PHYSICAL_ADDRESS  HighestAcceptableAddress
    );

救命啊!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-08-14 17:37
实在不行直接调这个函数不行吗?
icessl
驱动牛犊
驱动牛犊
  • 注册日期2002-08-12
  • 最后登录2002-08-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-14 17:41
若直接调,编译时出错:MmAllocateContiguousMemory没有定义;
如果我在 .cpp 头上加 #include <ntddk.h>,
编译还出错,一大堆重复定义.

我该怎么办?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-08-14 17:42
这个,呵呵,我不用driverwork,就不乱说了。
leerom
驱动小牛
驱动小牛
  • 注册日期2001-06-08
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-14 17:52
自己在头文件里声明一个:
extern \"C\" PVOID MmAllocateContiguousMemory(ULONG, PHYSICAL_ADDRESS);
再把相应的lib文件加入工程。
leerom
icessl
驱动牛犊
驱动牛犊
  • 注册日期2002-08-12
  • 最后登录2002-08-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-14 18:14
老大,不行啊,我把NTDDK 目录下所有 .lib 文件都试了一遍,
LINK 还是报错:
error LNK2001: unresolved external symbol _MmAllocateContiguousMemory@12

到底用哪个NTDDK 的库?
或者用哪个 DriverWorks 的类?
rifter
论坛版主
论坛版主
  • 注册日期2002-03-20
  • 最后登录2006-02-28
  • 粉丝1
  • 关注0
  • 积分65分
  • 威望8点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-14 23:06
在 DriverWorks 的 WDM 里,如何申请一片连续的实存,
即如何实现 NTDDK 里的这个函数:
PVOID
  MmAllocateContiguousMemory(
    IN ULONG  NumberOfBytes,
    IN PHYSICAL_ADDRESS  HighestAcceptableAddress
    );

救命啊!  


new (NonPagedPool) ulSize;是不是就OK啦 ???
分数 你想要吗?
leerom
驱动小牛
驱动小牛
  • 注册日期2001-06-08
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-15 09:12
我试了一下,加入ntoskrnl.lib库文件即可。记得给分:-)
leerom
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-15 09:50
在 DriverWorks 的 WDM 里,如何申请一片连续的实存,
即如何实现 NTDDK 里的这个函数:
PVOID
  MmAllocateContiguousMemory(
    IN ULONG  NumberOfBytes,
    IN PHYSICAL_ADDRESS  HighestAcceptableAddress
    );

救命啊!  


用KCommonDmaBuffer不行吗?

The system provides a special buffer object for DMA, and DriverWorks encapsulates this object in class KCommonDmaBuffer. A common buffer object is accessible both by the processor(s) and a specified DMA adapter, and is guaranteed to be physically contiguous for the adapter.

--from driverworks help
游客

返回顶部