WDK(7600.16385.1) + VC6 驱动开发环境配置

来源:互联网 发布:倩女幽魂手游mac上玩 编辑:程序博客网 时间:2024/06/02 20:20

 

VC6.0 +WDK(7600.16385.1) 开发驱动的环境配置

 

 

 

 

参考:http://blog.csdn.net/wzsy/archive/2009/04/07/4053632.aspx,

 

并做了些改动,绿色的是自己做的改动。 使用的例子是usbsamle下的驱动

 

 

(1)第一步:

          打开VC建立一个Win32 Application工程,然后选择An empty Project。

(2)第二步:

           随便找一个驱动程序,主要是.C,.h及rc资源文件,加入第一步建立的工程

(3)第三步:

          设置VC编译驱动的环境,这才是重点。

          打开VC的Tool->Options->Directories里设置Include,Lib,及ExectuableFile。

 

         设置Include路径:

           C:/WINDDK/7600.16385.1/INC

           C:/WinDDK/7600.16385.1/INC/wdf

           C:/WinDDK/7600.16385.1/INC/wdf/kmdf/1.9

           C:/WINDDK/7600.16385.1/INC/CRT

          C:/WINDDK/7600.16385.1/INC/DDK

          C:/WINDDK/7600.16385.1/INC/API  (这里可能有些不需要,也可能少了,根据自己的情况在INC目录下继续添加就OK了)

 

          设置LIB路径:

            C:/WINDDK/7600.16385.1/LIB

            C:/WINDDK/7600.16385.1/LIB/WDF/KMDF/I386/1.9

            C:/WINDDK/7600.16385.1/LIB/CRT/I386

            C:/WINDDK/7600.16385.1//LIB/WNET/I386

           设置Executable Files:

            C:/WINDDK/7600.16385.1/BIN/X86/X86

          (这里要注意,一定要在bin/x86目录下,确切的找到Cl.exe文件,然后添加它所在的目录,DDK与WDK这个文件所在的路径并不是一样的,上面的是我所安装的WDK中cl.exe所在的路径,这里要根据不同情况选择正确的路径)

(4)第四步:

          这里要设置工程的属性:

           打开VC->Project菜单,找到C/C++选项卡,在Preprocesser definitions里输入如下字符串:

          Release下输入:

          _X86_=1,i386=1,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,NDEBUG

          Debug下输入:

         _X86_=1,i386=1,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,_DEBUG

         在Code Generation里的Calling convention用_STDCALL

        Debug版有个特殊编译选项 /GZ (注意是大写的,小写的不要删!)删掉,否则有链接错误,chkesp链接不上什么的。

(5)第五步:

        设置link选项卡,将输出文件名改为sys扩展名,

         在General的Objcet/Library modules,填写驱动调用的几个lib:

           Kernel32.lib ntoskrnl.lib hal.lib usbd.lib wmilib.lib wdfdriverentry.lib  wdfldr.lib

         然后进入Output在Entry-point symbol:填DriverEntry

         下面就是往Project Options手动增加一些链接选项,复制如下进去:

          /machine:IX86 /driver /subsystem:native /SECTION:INIT,d/IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221

         删除如下选项:

        /subsystem:windows

        /machine代表目标机器类型,/driver代表驱动,/subsystem:native 也是代表驱动。

(这里,我在配置的时候,只是将/subsystem:windows改为:/subsystem:native没有再进行其它设置,也可成功生成驱动文件,至于有没有问题,暂时不知道)

 

http://hi.baidu.com/hell74111/blog/item/847374a9648fd8b8cb130c0a.html

 

源文档 <http://liong.blog.51cto.com/374966/265242>

那么如果我们要编译64位驱动呢?这里大家注意一下,64位有两种,一个是AMD64,一个是IA64,要选定你的目标平台,目前AMD64平台最为流行.

其实编译成64位也很简单,只要把32位的配置稍微改一下就行了,我们以编译AMD64位驱动为例(你会复制VC的工程Configurations吧,把32位的Relase,Debug各复制一份改名为ReleaseAMD64和DebugAMD64,然后在复制品的基础上修改):

1.要修改两个lib路径:

C:/2003DDK/LIB/CRT/I386改为:C:/2003DDK/LIB/CRT/amd64

C:/2003DDK/LIB/WNET/I386改为:C:/2003DDK/lib/wnet/amd64

2.修改编译器路径:

C:/2003DDK/BIN/X86

改为:

C:/2003DDK/bin/win64/x86/amd64

C:/2003DDK/BIN/X86//这句也要存在

3.修改C/C++里的Preprocesserdefinitions为:

ReleaseAMD64下输入:

_AMD64_,AMD64,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,NDEBUG

DebugAMD64下输入:

_AMD64_,AMD64,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,_DEBUG

4.需要修改link页里的ProjectOptions,手动改一下:将/machine:IX86改为:/machine:amd64

5.理论上到这里设置就OK了,不过还是有一个链接错误unresolvedexternal symbol __security_cookie ,只要在链接的lib里加入bufferoverflowK.lib(为什么是bufferoverflowK.lib?看这里:http://support.microsoft.com/kb/894573)就可以了。我修改的工程范例下载:下载地址。

以上的设置大部分都可以保存在VC工程文件(*.dsp)里,除了设置的include路径,lib路径和编译器路径,这些路径是全局的,在打开另一些工程也会留下了,就会给编译应用程序带来麻烦,还需要一个一个改回去,而目录切换器就是为了快速切换这些路径而开发的。

 

 

 

=====

PS:你在建好一个工程文是, 目录已经保存下来了, 再创建一个新工程时,就不用再设置目录了, 但工程的属性,还需要设置, 这个时候可以用比较工具,把.dsp文件和以前创建工程的.dsp文件比较,把改动之间复制过去即可, 不用再一项一项重新设置了。