• 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;
    }


     

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

  • 相关阅读:
    WIN8 下 Hyper-V和Vmware Workstation
    小技巧总结
    工具软件
    php开发入门
    docker的用法总结
    [工具] 同步本地文件夹与VPS中的文件夹
    读书笔记之《The Art of Readable Code》Part 3
    读书笔记之《The Art of Readable Code》Part 2
    正则表达式小试牛刀
    读书笔记之《The Art of Readable Code》part 1
  • 原文地址:https://www.cnblogs.com/luleigreat/p/2216707.html
Copyright © 2020-2023  润新知