penylee
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2006-08-14
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:2109回复:11

求助!内存地址的问题

楼主#
更多 发布于:2002-03-21 16:48
在使用DDK开发WIN2000下的WDM驱动时,
1. 我想分配设备可以访问的一段地址,用什么函数?
2. 如何这段分配的地址返回的是虚拟地址,我如何将其映射为物理地址?
MSN/Mail:penyleecn@hotmail.com
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-03-21 17:48
用户被禁言,该主题自动屏蔽!
penylee
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2006-08-14
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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.
MSN/Mail:penyleecn@hotmail.com
wangmqi
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2008-12-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-03-23 22:30
好像是Mmallocecontinuouaddress,具体记不住!你查一查!得到的是虚拟地址然后通过函数映射成物理地址!你是不是要dma?函数记不住了!就是这个机制!
lilo
驱动牛犊
驱动牛犊
  • 注册日期2001-05-24
  • 最后登录2008-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-03-25 08:57
用HalAllocateCommonBuffer。
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-03-25 11:45
分配可以用ExAllocatePool
用MmGetPhysicalAddress(BASEADDRESS)函数。
To wangmqi:
顺便提一下:Mmallocecontinuouaddress(..)分配在物理上连续的内存,但是它返回的依然是虚拟内存。
Tom_lyd
penylee
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2006-08-14
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-03-25 12:30
首先感谢大家的帮助!
但是在WIN2000的WDM模式中,不支持MmGetPhysicalAddress,它是定义在ntddk.h中,不是在wdm.h.所以我不知道怎么使用它.我将ntddk.h包含后,编译时就会出现几百个重定义!
MSN/Mail:penyleecn@hotmail.com
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-03-25 13:08
2000不支持MmGetPhysicalAddress?不可能吧
你只要包含ntddk.h就可以了,不要包含wdm.h
Tom_lyd
penylee
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2006-08-14
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
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了,真不知微软那些工程师们怎么想的.
MSN/Mail:penyleecn@hotmail.com
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-03-25 15:41
这是你没连接相应的库,典型的有int64.lib ntoskrnl.lib hal.lib 。
Tom_lyd
penylee
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2006-08-14
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-03-25 15:49
谢谢Tom_lyd,但在2000DDK环境中,怎么连接int64.lib ntoskrnl.lib hal.lib等库?它没有象VC++之类的界面呀。
很菜的问题,不要见笑。
MSN/Mail:penyleecn@hotmail.com
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
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
Tom_lyd
游客

返回顶部