zoukankan      html  css  js  c++  java
  • VS2008编译驱动文件设置_不用DDKWizard

    准备工作:安装DDK 7600

    1、新建一empty Wine2工程

    然后可用vs自带的Debug/Release 配置去修改,也可以新建一新的配置:

    Build->Configuration Manager 下新建一编译配置,如命名:Driver

    新添加一个cpp文件,任意命名如:test.cpp, 不然工程->属性中不会出现C/C++标签页

    2Tools-Options-VC++ Directories 下的设置

     包含文件(也可以此处不设,在后面的 工程属性-C/C++-Additional Include Directories中设置)

      C:\WinDDK\7600.16385.1\inc\ddk

      C:\WinDDK\7600.16385.1\inc\crt

      C:\WinDDK\7600.16385.1\inc\api

      将这几项置顶

     库文件路径

      C:\WinDDK\7600.16385.1\lib

      C:\WinDDK\7600.16385.1\lib\wxp\i386

    3、工程属性-C/C++ 目录下的设置

    General 选项

    Additional Include Directories : 

    C:\WinDDK\inc\api;C:\WinDDK\inc\crt;C:\WinDDK\inc\ddk;$(NOINHERIT)

    Debug Information Format: C7 Compatible(Z7)

    Treat Warnings As Errors:  No

     

    Optimization:

    Inline Function Expansion: Any Suitable(/0b2)(选此项,则上面必须选C7 Compatible)

    Enable Intrinsic Functions: Yes(/oi)

     

    Preprocessor:

      _X86_

    Code Generation:

        Enable String Pooling: No

          Enable Minimal Rebuild:No

      Enable C++ Exceptions:No

      Smaller Type Check: No

      Basic Runtime Check: Default

      Run Time Library: /MTD
      Struct Member Alignment: Default

      Buffer Security Check: No

      Enable Function-Level Linking:No

    Precompiled Headers:

      不使用预编译头

    Advanced:

      调用约定:__stdcall (/Gz)

      编译为  若选编译为C++代码,则在cpp文件中 需要在某些地方如 DriverEntry 前加 extern "C"

    4、工程属性-Linker目录下的设置

    General

      输出文件(自己定义)如:..\Output\test.sys

    Input

    附加依赖项 ntoskrnl.lib hal.lib

      //NT式驱动  ntoskrnl.lib    WDM式驱动    wdm.lib
        ( HalXXX 函数在Hal.lib, WmiXXX 函数在  wmilib.lib  , NdisXXX函数在  ndis.lib )

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

    Manifest File:

      启用用户账户控制(UAC)   否 

      不然会出现  >LINK : fatal error LNK1295: “/MANIFESTUAC”与“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC”

    Debugging:
      如需调试则选

    System:

      子系统:   本机(/SUBSYSTEM:NATIVE) 或 控制台(/SUBSYSTEM:CONSOLE)  

      驱动程序:    驱动程序(/DRIVER)    //必选 

    Optimization:

      References: /OPT:REF

      Enable COMPAT Folding: /OPT:ICF

    Advanced: 
          入口点 DriverEntry                                        //必选
        基址  0x10000                                           //建议选上 

      随机基址:清空 (默认值)             //必选 
         不然会出现  e:\xxx.sys : fatal error LNK1295:
        “/DYNAMICBASE”与“/DRIVER”规范不兼容;链接时不使用“/DYNAMICBASE”

      数据执行保护(DEP): 清空 (默认值)         //必选 
         不然会出现  e:\xxx.sys : fatal error LNK1295:       
        “/NXCOMPAT:NO”与“/DRIVER”规范不兼容;链接时不使用“/NXCOMPAT:NO”   

     

    5上述设置全部结束后,可新建源文件,写入代码


    #include<ntddk.h>

    VOID DriverUnload(PDRIVER_OBJECT driver)
    {
    DbgPrint("HelloEping\r\n");
    }

    NTSTATUS DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING reg_path)
    {
    DbgPrint("Hello,Eping!");
    driver->DriverUnload=DriverUnload;
    return STATUS_SUCCESS;
    }


     

    编译成功,运行正常,大功告成!

  • 相关阅读:
    JS中的事件&对象
    WSL使用小结:从ArchLinux到Manjaro
    WSL学习:安装ArchLinux和Root/Cling以及注意事项
    Qt5网络请求使用及WebRequest函数
    有道词典中的OCR功能:第三方库的变化
    C++学习(二):学会使用stringstream
    C语言集锦(三)Direct3D和GDI+的例子
    网络那些事:浏览器、网络协议以及常见软件
    C++学习(一):现代C++尝试
    PostScript学习:另一种缩写为PS的技术
  • 原文地址:https://www.cnblogs.com/luleigreat/p/2216707.html
Copyright © 2011-2022 走看看