Vs2012 + WDK7600 配置过程 和 Vc6.0 +DDK

以前配置了N遍,但是很容易忘记,只能通过这种方式来加强记忆了。

       

1. 新建C++Win32控制台空项目


       

2. 新建项目Driver”配置,点击下拉按钮-点击(配置管理器)



3.  输入名称(Driver),其他的不需要任何修改!




4.打开属性管理器,右击弹出Driver的属性 (Solution Explorer 的右边第二个,Propertion  Manager )




右击打开Driver属性分别配置相关属性就OK了。( 发现其实这个地方就不需要配置。) 


5.最后就一步步配置相关属性


<我把wdk安装在D盘下>

Project ---> Property ---> VC++ Directories    --- > Executable Directories 和 include Directores 和 Library Directories

a.  配置可执行文件目录:D:\WinDDK\7600.16385.1\bin\x86\x86; 
b.  配置包含目录:D:\WinDDK\7600.16385.1\inc\ddk  
                        D:\WinDDK\7600.16385.1\inc\crt 
                        
D:\WinDDK\7600.16385.1\inc\api   
c. 
配置库目录:    D:\WinDDK\7600.16385.1\lib\win7\i3865



 

新建C/C++文件不然无C/C++设置选项

<刚开始我们创建了一个空的项目所以项目里没有c++文件,现在要做的就是在空的项目-源文件-添加一个新建项c++文件>

常规  
目标文件扩展名:.sys          //必选


设置C/C++选项 
常规选项卡 
1
调试信息格式(C7兼容(/Z7)       //可选 
2
警告等级    2(/W2)          //可选 
3
将警告视为错误  ((/wx)        //可选 
优化选项卡 
优化(禁用/Od)                         //可选 
预处理器 
预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1         //必选 


代码生成 
      
启用最小重新生成:否                                       //可选    

      基本运行时检查:默认值                                    //可选 
      
运行时库:多线程调试(/MTd)  多线程(/MT)                //建议选 <本人选择的是多线程调试(/MTd)> 
      
缓冲区安全检查:否                                           //可选 

TAG:

(可避免出现 LINK : error LNK2001:无法解析外部符号 __security_cookie)高级调用约定 __stdcall(/Gz) //必选.链接器设置常规启用增量链接:否(/INCREMENTAL:NO)


  (可避免出现  LINK : error LNK2001:  无法解析外部符号  __security_cookie) 
高级 
     调用约定  __stdcall(/Gz)                                       //必选


三. 链接器设置 
常规 
     启用增量链接:否(/INCREMENTAL:NO)                           //建议 选上 
     忽略导入库:是                                                  // 可选  
     ( 设置为此值时,必须在附加库目录中加: E:\WinDDK\7600.16385.1\lib\win7\i3865  这样项目就不会依赖 IDE 环境的设 置) 

     如果否  (  设置为此值时,将依赖  IDE  的环境的相关设置  ) 
输入 
附加依赖项 
ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB       //必选  
 


//NT式驱动  ntoskrnl.lib    WDM式驱动    wdm.lib 
( HalXXX 函数在Hal.lib, WmiXXX 函数在  wmilib.lib  , NdisXXX函数在  ndis.lib ) 
(  必要时需要增加微软的标准库  MSVCRT.LIB MSVCRTD.LIB(调试库) LIBCMT.LIBIBCMTD.LIB(调试库) ) 
  (  如果源码中有  source  文件,那么该文件的  TARGETLIBS  字段会列出该项 目需要的库  )

忽略所有默认库:    是 (/NODEFAULTLIB)                 //必选  


清单文件: 
  启用用户账户控制(UAC)   否  //必选 


不然会出现  >LINK : fatal error LNK1295: “/MANIFESTUAC”与“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC”   
调试: 
生成调试信息  是(/DEBUG)                                              //可选 
生成映像文件:是(/MAP)                                               //可选 
映像文件名:$(TargetDir)$(TargetName).map                     //可选 
系统(System) 
     子系统:  控制台(/SUBSYSTEM:CONSOLE)                                //必选 


     堆栈保留大小:4194304                                              //可选 
     堆栈提交大小:  4096                                                //可选 
     驱动程序:    驱动程序(/DRIVER)                                        //必选


TAG:



高级: 
    入口点:DriverEntry                                                    //必选 
    随机基址:清空           //把框里的数据删掉。(yes也不是no也不是就是要一个干干净净的文本框)   //必选 
    不然会出现  e:\xxx.sys : fatal error LNK1295: 
“/DYNAMICBASE”与“/DRIVER”规范不兼容;链接时不使用“/DYNAMICBASE”

    数据执行保护(DEP):  清空 //把框里的数据删掉。(yes也不是no也不是就是要一个干干净净的文本框) //必选   
     不然会出现  e:\xxx.sys : fatal error LNK1295:        
“/NXCOMPAT:NO”与“/DRIVER”规范不兼容;链接时不使用“/NXCOMPAT:NO”   

设置效应和:是(/RELEASE)                              //可选

基址:0x10000                                           //建议选上 






我的配置出现这个错误

LINK : fatal error LNK1117: syntax error in option'manifest:embed'

解决:(好吧关闭它)【Properties->ConfigurationProperties->Manifest Tool->Input and Output->Embed Manifest-> Yes No 】。




最后用一个简单代码测试一下我们配置的是否成功??

#include "ntddk.h"
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath) 
{ 
return STATUS_UNSUCCESSFUL; 
}


Vc6.0 开发驱动配置

(1)第一步:

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

2)第二步:

            随便找一个驱动程序,主要是.C,.hrc资源文件,加入第一步建立的工程  (可以不用)

(3)第三步:

 

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

 

          打开VC的Tool->Options->Directories里设置Include,Lib,及ExectuableFile。这里说明下为什么要设置这三个东西:Include目录中,主要是供我们开发使用的头文件.h文件;Lib目录,为我们驱动所要调用的一些链接库文件;Exectuable File,这个很重要,它里面包含了我们编译驱动所使用的Cl.exe及连接link.exe文件,VC正是通过这两个文件来生成最后的驱动.sys文件(如果编译出现cl.exe错误,说明是这里的路径设置的不正确,我先前在这里走了弯路了,所以提醒下)。

 

         设置Include路径:

 

        

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

 

          设置LIB路径:


         设置Executable

D:\WinDDK\7600.16385.1\bin\x86

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

 

(4)第四步:

 

          这里要设置工程的属性:

 

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

          Release下输入:( WIN32,_DEBUG,_WINDOWS,_MBCS)

      _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:

 

          ntoskrnl.lib hal.lib usbd.lib wmilib.lib。(最好在Debug和Release 模式下都添加上)

 

 

         然后进入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 也是代表驱动。

最后就是这些:

kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ntoskrnl.lib hal.lib usbd.lib wmilib.lib /nologo /entry:"DriverEntry"  /incremental:yes /pdb:"Debug/HelloWDM.pdb" /debug /machine:IX86 /out:"Debug/HelloWDM.sys" /pdbtype:sept /driver /subsystem:native /SECTION:INIT,d/IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 

 

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




最后需要声明的是,这个配置过程其实是分为两部分,第一部分是对开环环境的配置,即库目录、包含文件和可执行目录的配置。而第二部分是针对具体的项目进行配置。所以当配置好驱动开发的环境之后,其他的如控制台应用程序便不能开发,这个时候需要调整配置,即将库目录和可执行目录所包含的文件路径下移至最后,便可以进行开发。这实际上是针对第一部分所做的修改。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值