1.安装VS2010,WDK7.10
2.新建VC控制台项目(选择为空项目)
3.新建项目配置”Check”
4.设置VC++路径
a.配置可执行路径 WDKPATH\bin\x86
b.配置包含目录 WDKPATH\inc\ddk;WDKPATH\inc\;WDKPATH\inc\api
c.配置库路径 WDKPATH\lib\wxp\i386
5.新建一个C/C++文件,否则没有C/C++设置选项
6.设置C/C++选项
常规选项卡
a.调试信息格式 C7兼容(/Z7) //可选
b.警告等级 2级(/W2) //可选
c.将警告视为错误 是(/wx) //可选
优化选项卡
a.优化 禁用(/Od) //可选
预处理器
a.预处理器定义 WIN32=100;_X86_=1;WINVER=0x501;DBG=1 //必选
代码生成
a.启用最小重新生成 否 //可选
b.基本运行时检查 默认值 //可选
c.运行时库 多线程调试(/MTd) 或 多线程(/MT) //建议选
d.缓冲区安全检查 否 //可选
(可避免出现LINK : error LNK2001:无法解析外部符号__security_cookie)
高级
a.调用约定 __stdcall(/Gz) //必选
7.链接器设置
常规
a.启用增量链接 否(/INCREMENTAL:NO) //建议选
b.忽略导入库 是 //可选
(设置为此值时,必须在附加库目录中加 D:\WINDDK\3790.1830\lib\wxp\i386 这样项目就不会依赖IDE环境的设置)
输入
a.附加依赖项
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字段会列出该项目需要的库)
b.忽略所有默认库 是(/NODEFAULTLIB) //必选
清单文件
a.启用用户账户控制(UAC) 否 //必选
否则会出现 fatal error LNK1295
“/MANIFESTUAC”与“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC”
调试
a.生成调试信息 是(/DEBUG) //可选
b.生成映像文件 是(/MAP) //可选
c.映像文件名 $(TargetDir)$(TargetName).map //可选
系统(System)
a.子系统 控制台(/SUBSYSTEM:CONSOLE) //必选
b.堆栈保留大小 4194304 //可选
c.堆栈提交大小 4096 //可选
d.驱动程序 驱动程序(/DRIVER) //必选
高级
a.入口点 DriverEntry //必选
b.随机基址 清空 //必选
否则会出现fatal error LNK1295
“/DYNAMICBASE”与“/DRIVER”规范不兼容;链接时不使用“/DYNAMICBASE”
c.数据执行保护(DEP) 清空 //必选
否则会出现fatal error LNK1295
“/NXCOMPAT:NO”与“/DRIVER”规范不兼容;链接时不使用“/NXCOMPAT:NO”
d.设置效应和 是(/RELEASE) //可选
e.基址 0x10000 //建议选
f.命令行 /SECTION:INIT,D /IGNORE:4078 //可选
8.常规
a.目标文件扩展名 .sys //必选
完成
测试代码
#include <ntddk.h>
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
return STATUS_UNSUCCESSFUL;
}
可用