4215|9

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

DDK编译问题 [复制链接]

最近学习驱动程序,有一个进程/线程监视器的代码,我编译通过了,连接的时候出现下面的错误提示:
Linking Executable - objfre\i386\pmonitor.sys for i386
drivers.obj() : error LNK2019: unresolved external symbol _PsGetCurrentProcessId@0 referenced in function _ThreadCreateMon@12
drivers.obj() : error LNK2019: unresolved external symbol _PsLookupProcessByProcessId@8 referenced in function _ThreadCreateMon@12
drivers.obj() : error LNK2019: unresolved external symbol _PsGetCurrentThreadId@0 referenced in function _ProcessCreateMon@12
drivers.obj() : error LNK2019: unresolved external symbol _PsSetCreateProcessNotifyRoutine@8 referenced in function _OnUnload@4
drivers.obj() : error LNK2019: unresolved external symbol _PsSetCreateThreadNotifyRoutine@4 referenced in function _DriverEntry@8
drivers.obj() : error LNK2019: unresolved external symbol _PsGetVersion@16 referenced in function _DriverEntry@8
objfre\i386\pmonitor.sys() : error LNK1120: 6 unresolved externals
BUILD: Done
这是为什么呢?是需要包含一个LIB 文件吗?我是用DDK的BUILD 编译的

最新回复

LS解释得很详细,赞一个~~~ 顺便MARK一下、、、  详情 回复 发表于 2007-2-7 17:29
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
把.cpp文件改成.c文件看看
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

如果你还不能编译的话,把代码发到yisea123@eyou.com

我来帮你看一下
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
同意,,
有问题找楼上
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 
函数重复定义嘛,把下划线取了,搜索整个工程。。。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

6
 
不好意思,前几天出差才回来。谢谢大家的帮助,
1、文件名就是C
2、那个下划线是编译器加的
我用的编译器是XP DDK自带的,那几个函数在DDK的头文件里都有定义,
不知道为什么连接的时候就不行了,我也想过也许要包含LIB文件,
不过DDK里面400多个LIB,我实在没头绪了。


 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
yisea123(yisea123)

我把程序发到你的邮箱了,有空帮我看看,谢谢
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

8
 
我看了你的程序了,解决办法(在windows xp sp2+ddk xp上编译通过)如下:

在sources文件中
        *去掉 DRIVERTYPE=WDM 这一行
        **另外把 TARGETLIBS 要设置对.我把它改成了使用环境变量的,这样比较灵活。

最终的sources文件如下

TARGETNAME=pmonitor
TARGETTYPE=DRIVER

TARGETPATH=OBJ
TARGETLIBS=$(DDK_LIB_PATH)\psxrtl.lib

INCLUDES=$(BASEDIR)\inc;$(DDK_INC_PATH)

SOURCES=        Drivers.c WdmDyno.rc

NTTARGETFILES=PostBuildSteps

 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
至于为什么要去掉 DRIVERTYPE=WDM 的原因是:

  DRIVERTYPE=WDM 要求在INCLUDES条目中用WDM_INC_PATH来代替DDK_INC_PATH
  也就是在Driver.c中的头文件就应该是wdm.h,而不是ntddk.h

  而在程序中使用到的某些函数原型却只有在ntddk.h中有,在wdm.h中没有.比如

typedef
VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE)(
    IN HANDLE ParentId,
    IN HANDLE ProcessId,
    IN BOOLEAN Create
    );

NTSTATUS
PsSetCreateProcessNotifyRoutine(
    IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
    IN BOOLEAN Remove
    );

 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

10
 
LS解释得很详细,赞一个~~~
顺便MARK一下、、、
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表