准备工作:安装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;
}


 

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