NewFreedom
驱动小牛
驱动小牛
  • 注册日期2003-02-14
  • 最后登录2010-09-28
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1350回复:9

我的编译WDM驱动程序的方法有问题吗?

楼主#
更多 发布于:2003-02-19 14:12
Hi ~~~
  麻烦大家可否帮我想想问题出在哪
首先我是照着WDM驱动程序入门(1)(2)(3)来作
1.先在VC6.0中建个HelloWDM.CPP的源码(选择NEW\\W32 Console    
  Application)
2.再建个HelloW.h(先复制例子的*.h再改成自己要用的)
3.copy个makefile(not edit)
4.我的Source如下:
      TARGETNAME=HelloWDM
      TARGETTYPE=DRIVER
      DRIVERTYPE=WDM
      TARGETPATH=OBJ

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

      TARGETLIBS=$(BASEDIR)\\lib\\*\\free\\usbd.lib\\
          
      SOURCES=HelloWDM.cpp \\
5.我以上的档案都放在HelloWDM的目录下
6.之后开始编译   “开始”->“程序”->“Development Kits”->“Windows 2000 DDK”->“Checked Build Environment”

D:\\NTDDK>cd\\HelloWDM (回车)
D:\\HelloWDM>build (回车)
却产生以下的错误?

-out:objchk\\i386\\HelloWDM.sys
objchk\\i386\\hellowdm.obj
d:\\NTDDK\\libchk\\i386\\wdm.lib
d:\\NTDDK\\lib\\i386\\free\\usbd.lib

hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) struct _DEVICE_OBJECT * __stdcall IoAttachDeviceToDeviceStack(struct _DEVICE_OBJECT *,struct _DEVICE_OBJECT *)\" (__imp_?IoAttachDeviceToDeviceStack@@YGPAU_DEVICE_OBJECT@@PAU1@0@Z)

hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) long __stdcall IoCreateDevice(struct _DRIVER_OBJECT *,unsigned long,struct _UNICODE_STRING *,unsigned long,unsigned long,unsigned char,struct _DEVICE_OBJECT * *)\" (__imp_?IoCreateDevice@@YGJPAU_DRIVER_OBJECT@@KPAU_UNICODE_STRING@@KKEPAPAU_DEVICE_OBJECT@@@Z)

hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) void __stdcall IoDeleteDevice(struct _DEVICE_OBJECT *)\" (__imp_?IoDeleteDevice@@YGXPAU_DEVICE_OBJECT@@@Z)

hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) void __stdcall IoDetachDevice(struct _DEVICE_OBJECT *)\" (__imp_?IoDetachDevice@@YGXPAU_DEVICE_OBJECT@@@Z)

hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) void __stdcall RtlFreeUnicodeString(struct _UNICODE_STRING *)\" (__imp_?RtlFreeUnicodeString@@YGXPAU_UNICODE_STRING@@@Z)

hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) long __stdcall IoSetDeviceInterfaceState(struct _UNICODE_STRING *,unsigned char)\" (__imp_?IoSetDeviceInterfaceState@@YGJPAU_UNICODE_STRING@@E@Z)

hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) long __fastcall IofCallDriver(struct _DEVICE_OBJECT *,struct _IRP *)\" (__imp_?IofCallDriver@@YIJPAU_DEVICE_OBJECT@@PAU_IRP@@@Z)
objchk\\i386\\HelloWDM.sys : fatal error LNK1120: 7 unresolved externals

Stop.

可否告诉我…我是错在哪……………谢谢

tjm
tjm
驱动小牛
驱动小牛
  • 注册日期2002-05-18
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-19 18:28
用C++时在包含头文件时
extern \"c\"
{
#include .....
.....
}
试试
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-02-19 19:28
怎么在最后还加个\"\\\"?
Claye
驱动牛犊
驱动牛犊
  • 注册日期2002-11-24
  • 最后登录2007-10-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-30 22:29
好象要放一个MakeDrvr.bat,然后修改一下路径。我以前直接在vc下编译时也出现这种提示,后来加上这个,同时注册一个环境变量,也就是文件所在的位置,问题解决了
因为有了你的驱动,我们才能进步! 愿中国强大!!!!
xyyln
驱动老牛
驱动老牛
  • 注册日期2003-01-02
  • 最后登录2009-12-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-31 09:14
MakeDrvr.bat也就那么几行,去看看。
[img]http://www.jt99.com/zjbbs/UploadFile/2003113018513643830.gif[/img]
NewFreedom
驱动小牛
驱动小牛
  • 注册日期2003-02-14
  • 最后登录2010-09-28
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-31 18:56
那些我有试过了 , 不过还是不行哩 ! 就是无法在VC下编译
但可以用DDK来编译
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2003-04-03 17:00
extern \"c\"
{
#include \"wdm.h`
}
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-04 08:58
那些我有试过了 , 不过还是不行哩 ! 就是无法在VC下编译
但可以用DDK来编译
 


一定要在vc下编译的话,用src2dsp转一下就可以了
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
xyyln
驱动老牛
驱动老牛
  • 注册日期2003-01-02
  • 最后登录2009-12-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-04 09:15
h13的办法不可行,srctodsp只是愚蠢地做了转化,并没有对编译环境进行正确的设置,给你两个参考办法:
1、参考Driver Studio中Driver works的ddk build setting;
2、关于_stdcall的问题,多半是你在include wdm.h,ntddk.h等头文件的时候没有加上ifdef cplusplus的判断,正如前面tjm和wowocock所说。
[img]http://www.jt99.com/zjbbs/UploadFile/2003113018513643830.gif[/img]
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-04-04 10:20
h13的办法不可行,srctodsp只是愚蠢地做了转化,并没有对编译环境进行正确的设置


安装了ds之后,编译环境都自动设好了,唯一要做的就是如果直接启动vc的话,编译前会弹出选择ddk路径的框,确定一下就ok了。我把以前ddk下编译的都转过来了,没问题。而且还可以随时在工程里添加任意目录的cpp文件,好处多多。 :D
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
游客

返回顶部