阅读:2317回复:8
为什么单单不能使用MmGetPhysicalAddress?
我在win2k下用DriverWorks 开发一个小驱动程序,其中我调用了2000ddk中的库函数MmGetPhysicalAddress( ),编译时却发现MmGetPhysicalAddress是一个"undeclared identifier"!
我在“SetDDKGo"中已经设置好编译环境了,而且在VC下编译成功DS的库函数,我把我整个开发环境建立过程说说,请大虾看看有没有漏洞: 1. 安装VC6.0 2. 安装Win2K DDK,安装完后运行Checked Build Enviroment。 3. 安装DriverStudio3.1。安装完后,运行DDK Setting Buildings(SetDDKGo),设置 BASEDIR(其它设置采用默认设置)。 4. 编译DriverWorks库函数。在VC6 IDE中打开vdwlibs.dsw,然后运行batch building。编译成功。 5.新建一个DriverWorks Project,写好驱动后,编译。驱动中要用的DDK中的函数,但编译时却出错。 以上设置中没说明的都没做。是不是哪有漏的? 我又发现更奇怪的,好像DDK中其他的函数都能使用,但就是不能使用MmGetPhysicalAddress,而其它如MmGetMdlByteCount等都能用! 有热心大虾指点,说要加 #include "ntddk.h " #pragma comment(lib,"ntoskrnl.lib") 我把它们加在“XxxDevice.cpp”文件起始部分,但现在还是那样! 就这么个小问题,困惑我好几天了,现在还没搞定,真是愁死人!所以冒昧再来发帖,希望大虾理解。恳请哪位遇到过类似的问题得大虾救我于水火之中!多少分都给! |
|
沙发#
发布于:2004-08-05 12:24
在ntddk.h的,添加#include <ntddk.h>就可以用
而且同时inlcude ntddk.h和wdm.h应该冲突才对 可能是哪没有设置好,没有找到ntddk.h 索性在哪个地方自己声明算了 NTKERNELAPI PHYSICAL_ADDRESS MmGetPhysicalAddress ( IN PVOID BaseAddress ); |
|
板凳#
发布于:2004-08-05 12:55
代码能不能传上来看一看
|
|
|
地板#
发布于:2004-08-05 14:12
参考我以前的帖子,自己来实现OS的查表转换。
|
|
|
地下室#
发布于:2004-08-05 18:16
我在用DriverWorks向导生成驱动时,若选用NT4.0 Style,经过以上同样的过程,却没有任何问题,而选WDM模式时,就出现这个问题。
也就是编译环境中WDM模式 NTVERSION='WDM',而NT4.0 Style NTVERSION=400(这个在project/settings/c++/preprocessor/predefined macros 中可以看到,但若我将WDM模式下的NTVERSION改为400,编译结果却出现更多错,主要是WDM中的类(如KPnpDevice)和函数不识别。 为什么会是这样呢?如何解决这中冲突?各位大虾有没有遇到过这种头痛的问题? |
|
5楼#
发布于:2004-08-05 19:02
给你发各邮件收一收
|
|
|
6楼#
发布于:2004-08-05 19:28
非常感谢snowstarth大虾和其他大虾的帮助!
在snowstarth大虾的指点下,终于成功解决了这个问题。 前车之鉴,我将他的方法帖出来以供后来者解决类似问题。 自己新建一个头文件mydef.h,在该文件中将MmGetPhysicalAddress的定义帖进去: NTKERNELAPI PHYSICAL_ADDRESS MmGetPhysicalAddress ( IN PVOID BaseAddress ); 然后: 1、在调用MmGetPhysicalAddress函数的文件(如.XxxDevice.cpp)中包含mydef.h 2、在setting->link里加入ntoskrnl.lib 3、把ntoskrnl.lib拷贝到驱动的sys目录 呵呵,真是太高兴了,这个小问题愁了我两三天,现在终于搞定!再次感谢! 呵呵,snowstarth大虾,要多少分,你说吧(呵呵,我只有400分),目前只能给20分(也不知怎么搞得,最多只能给20),你要是要,我再随便发帖,你回复,我就给! |
|
7楼#
发布于:2004-08-05 20:33
哥们,那我就不客气了,哈哈 |
|
|
8楼#
发布于:2004-08-06 08:52
就NTDDK。H和WDM。H冲突的问题有什么更好的解决方案????
|
|
|