欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VS2012 开发驱动 博客分类: C/C++OS window驱动win7helloworld 

程序员文章站 2024-03-18 15:16:52
...

VS12下开发wdk驱动,比较繁琐,要设置很多选项。本文在 win8 + visual studio2012 + wdk7600 下测试通过。 

 

一. 项目属性配置

常规  

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

 

VC++目录

  包含目录    C:\WinDDK\7600.16385.1\inc\wdf\kmdf\1.9  inc\ddk inc\crt inc\api

  库目录      C:\WinDDK\7600.16385.1\lib\win7\i386     C:\WinDDK\7600.16385.1\lib\wdf\kmdf\i386\1.9

 

C/C++  

  优化

    优化(禁用/Od)                             // 可选 

    

  预处理器        

    WIN32=100;_X86_=1;DBG=1     // 必选 

  

  代码生成 

      运行时库:多线程调试(/MTd)  或  多线程(/MT)                   // 建议选 

      缓冲区安全检查:否                                            //可选 (可避免出现 error LNK2001:  无法解析外部符号  __security_cookie) 

  

  高级 

      调用约定  __stdcall(/Gz)                                       //必选 

  

链接器 

  常规 

     启用增量链接:否(/INCREMENTAL:NO)                           //建议

  

  输入 

      ntoskrnl.lib        // NT式驱动

      Hal.lib             // HalXXX 函数

      wdm.lib             // WDM式驱动

      wdmsec.lib  

      wmilib.lib          // WmiXXX 函数

      ndis.lib            // NdisXXX函数

 

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

 

  清单文件:

      生成清单文件              否  // 必选,注vs12下必选该选项才能编译成功

      启用用户账户控制(UAC)   否  // 必选 

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

  

  

  系统 

     子系统:  控制台(/SUBSYSTEM:NAIVE)                                //必选 

     堆栈保留大小:4194304                                             //可选 

     堆栈提交大小:  4096                                               //可选 

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

 

  高级

    入口点:         DriverEntry                                         //必选 

    目标计算机:     MachineX86 (/MACHINE:X86)                           //可选

    随机基址:清空                                                         // 必选,否则会出现 fatal error LNK1295: “/DYNAMICBASE”与“/DRIVER”规范不兼容;链接时不使用“/DYNAMICBASE”

 

 

    数据执行保护(DEP):  清空                                             //必选,否则会出现 fatal error LNK1295:“/NXCOMPAT:NO”与“/DRIVER”规范不兼容;链接时不使用“/NXCOMPAT:NO”   

 

二. 编码

#include <ntddk.h> 

VOID HelloDDKUnload(IN PDRIVER_OBJECT pDriverObject) 
{ 
	KdPrint(("Enter DriverUnload\n")); 
	KdPrint(("Leave DriverUnload\n")); 
} 

NTSTATUS DriverEntry ( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath	) 
{ 
	NTSTATUS status; 
	status = STATUS_SUCCESS; 
	
	KdPrint(("Enter DriverEntry\n")); 
	pDriverObject->DriverUnload = HelloDDKUnload; 
	KdPrint(("DriverEntry end\n")); 
	
	return status; 
}

 

 三. 命令行编译

VS编译环境设置比较繁琐,可以直接编写makefile通过命令行编译。

在当前目录下准备 makefile 和 sources 两个文件。

#可直接从wdk安装目录拷贝,不要修改
!INCLUDE $(NTMAKEENV)\makefile.def

!if $(FREEBUILD)
MSC_WARNING_LEVEL=/W1
!else
MSC_WARNING_LEVEL=/W3
!endif

 

TARGETNAME = hello
TARGETTYPE = DRIVER
TARGETPATH = x32
INCLUDES = .\

TARGETLIBS = $(DDK_LIB_PATH)\tdi.lib

SOURCES = 	hello.c

 

从开始菜单调出编译命令行,%StartMenu%\Windows Driver Kits\WDK 7600.16385.1\Build Environments\Windows 7

VS2012 开发驱动
            
    
    博客分类: C/C++OS window驱动win7helloworld 

 

WDK提供了intel,AMD等芯片的支持,可编译32位或64位驱动。checked为debug版本编译环境,free为release版本编译环境。

启动32位编译环境,运行 build -Cz  或 bld 命令,即可在x32 目录下生成 hello.sys。

 

 

  • VS2012 开发驱动
            
    
    博客分类: C/C++OS window驱动win7helloworld 
  • 大小: 5.8 KB