阅读:2109回复:11
求助!内存地址的问题
在使用DDK开发WIN2000下的WDM驱动时,
1. 我想分配设备可以访问的一段地址,用什么函数? 2. 如何这段分配的地址返回的是虚拟地址,我如何将其映射为物理地址? |
|
|
沙发#
发布于:2002-03-21 17:48
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2002-03-22 08:15
Thanks Tom.Cat!
Using ExAllocatePool can allocate Non-Paged memory. it\'s return value is Virtual Address. I need a Physical Address,so I want to change the Virtual Address to Physical Address. How can I do ? I find a function \"MmGetPhysicalAddress\" from MSDN. But it isn\'t able to use in WIN2000DDK. |
|
|
地板#
发布于:2002-03-23 22:30
好像是Mmallocecontinuouaddress,具体记不住!你查一查!得到的是虚拟地址然后通过函数映射成物理地址!你是不是要dma?函数记不住了!就是这个机制!
|
|
地下室#
发布于:2002-03-25 08:57
用HalAllocateCommonBuffer。
|
|
5楼#
发布于:2002-03-25 11:45
分配可以用ExAllocatePool
用MmGetPhysicalAddress(BASEADDRESS)函数。 To wangmqi: 顺便提一下:Mmallocecontinuouaddress(..)分配在物理上连续的内存,但是它返回的依然是虚拟内存。 |
|
|
6楼#
发布于:2002-03-25 12:30
首先感谢大家的帮助!
但是在WIN2000的WDM模式中,不支持MmGetPhysicalAddress,它是定义在ntddk.h中,不是在wdm.h.所以我不知道怎么使用它.我将ntddk.h包含后,编译时就会出现几百个重定义! |
|
|
7楼#
发布于:2002-03-25 13:08
2000不支持MmGetPhysicalAddress?不可能吧
你只要包含ntddk.h就可以了,不要包含wdm.h |
|
|
8楼#
发布于:2002-03-25 14:59
我将ntddk.h的绝对路径包含才能找到,如:
#include \"e:\\ntddk\\inc\\ddk\\ntddk.h\" 但在编译过程中有如下错误: error LNK2001: unresolved external symbol __imp__MmGetPhysicalAddress@4 我个人认为,2000下已经不支持MmGetPhysicalAddress了,真不知微软那些工程师们怎么想的. |
|
|
9楼#
发布于:2002-03-25 15:41
这是你没连接相应的库,典型的有int64.lib ntoskrnl.lib hal.lib 。
|
|
|
10楼#
发布于:2002-03-25 15:49
谢谢Tom_lyd,但在2000DDK环境中,怎么连接int64.lib ntoskrnl.lib hal.lib等库?它没有象VC++之类的界面呀。
很菜的问题,不要见笑。 |
|
|
11楼#
发布于:2002-03-25 16:11
你是用命令行编译还是用VC6.0 IDE编译啊?
建议你用VC6.0 IDE编译,不过你要进行一些设置。请到本站\"相关下载\\开发工具\"栏中下载WDM&VC6.0文件并复制到你的\"\\Microsoft\\visual studio\\common\\msdev98\\template\"目录下,然后,你只要在Project\\settings\\link\\ 选catagory\\input object\\library models 中输入需要包含的库文件即可。 如果是用命令行编译,你需要在SOURCES文件中加入以下语句: TARGETLIBS=$(BASEDIR)\\lib\\*.lib |
|
|