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

来源:互联网 发布:自适应源码 编辑:程序博客网 时间:2024/04/29 15:27

以前配置了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没有再进行其它设置,也可成功生成驱动文件,至于有没有问题,暂时不知道)




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



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 自动伞手动收了怎么办 拓麻歌子4u死了怎么办 拓麻歌子mix死了怎么办 彩虹圈线缠住了怎么办 彩虹圈被打搅了怎么办 吃中药吃大蒜了怎么办 呕吐蛋黄哥干了怎么办 鹦鹉的脚受伤了怎么办 内痔疮疼得厉害怎么办 孕妇用了痔疮膏怎么办 痔疮犯了特别疼怎么办 有痔疮肛门很痛怎么办 这几天痔疮犯了怎么办 孕初期肛裂出血怎么办 胃疼怎么办怎么缓解胃 脚踝崴了肿了怎么办 脚扭了脚背肿了怎么办 儿童脚扭伤肿了怎么办 脚关节扭伤肿了怎么办 小孩脚扭伤肿了怎么办 抱小孩腰扭伤了怎么办 跳舞把腰拉伤了怎么办 脚不小心扭伤了怎么办 娱乐之太帅了怎么办txt 走路走多了脚痛怎么办 胃疼怎么办简单按摩法 经常胃疼的厉害怎么办 半夜胃疼的厉害怎么办 吃消炎药伤胃了怎么办 吃药伤胃了胃疼怎么办 宝宝吃药伤胃了怎么办 胃胀胃痛怎么办快速解决方法 半夜2点3点胃疼怎么办 晚上吃多了胃疼怎么办 骨折打石膏后痒怎么办 脚脖子崴了肿了怎么办 喝酒喝的吐血了怎么办 感冒后咳嗽有痰怎么办 嗓子里老是有痰怎么办 物业把水停了怎么办 机洗衬衫缩水了怎么办