1、设定环境目录
选择“工具->选项->项目和解决方案->VC++目录”在右侧平台选择“win32”。
1)、“包含文件”中添加:
C:/WINDDK/7600.16385.0/inc/wdf/kmdf/1.9
C:/WINDDK/7600.16385.0/inc/api(注:此头文件要位于$(VCInstallDir)PlatformSDK/include(vs2008为$(WindowsSdkDir)/include)前面,否则编译会出错)
C:/WINDDK/7600.16385.0/inc/crt
C:/WINDDK/7600.16385.0/inc/ddk
2)、库文件”中添加
C:/WINDDK/7600.16385.0/lib/wdf/kmdf/i386/1.9
C:/WINDDK/7600.16385.0/lib/wxp/i386
2、创建项目
选择“新建项目”中的“win32项目”,输入项目名称后点击“确定”,进入“win32应用程序向导”,选择“空项目”点击“完成”。
3、添加配置属性
点击“项目->属性”(或者按ALT+F7)进入项目属性页,点击“配置属性”,点击右上角的“配置管理器”,在“活动解决配置方案”中选择“新建”,弹出的窗口中输入自己解决配置方案名,我填的是“checked”,“从此处复制设置”中选“空白”,下面的钩打上,点击“确定”。
1)、选择“C/C++”:(注:要出现此项,需要现在工程中添加文件)
“常规”项:
“调试信息格式”:“C7 兼容(/Z7)”;
“警告等级”:“3级(/w3)”;
“将警告视为错误”:“是(/WX)”。
“优化”项:
“优化”:“禁用(/0d)”
“预处理器”项:
“预处理器定义”:WIN32=100;_X86_=1;DBG=1
“高级”项:
“调用约定”:__stdcall (/Gz)
2)、“连接器”项:
“常规”项:
“输出文件”:扩展名改为sys;
“启用增量连接”:“否(/INCREMENTAL:NO)”;
“附加库目录”:“C:/WINDDK/7600.16385.0/lib/wxp/i386”。
“输入”项:
“附加依赖项”:输入“ntoskrnl.lib $(NOINHERIT)”;
“忽略所有默认库”选“是(/NODEFAULTLIB)”;
“清单文件”项:
“生成清单”:“否”。
“调试”项:
“生成调试信息”:“是”。
“系统”项:
“子系统”:“本机(/SUBSYSTEM:NATIVE)”;
“堆栈保留大小”:“40000”;
“堆栈提交大小”:“1000”;
“驱动程序”:“驱动程序(/DRIVER)”。
“高级”项:
“入口点”:“DriverEntry”;
“目标计算机”:“MachineX86 (/MACHINE:X86)”
“随机基址”:“默认值”(vs2008特有)
“数据执行保护”:“默认值”(vs2008特有)
“命令行”项:
“附加选项”:添加开关:/SECTION:INIT,D /IGNORE:4078 /safeseh:no
进行程序测试,写一段小的测试程序
//testDriver.h
#ifndef _TESTDRIVER_H
#define _TESTDRIVER_H
#ifdef __cplusplus
extern "C"
{
#endif
#include <ntddk.h>
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING pRegistryPath);
VOID testDriverUnload(IN PDRIVER_OBJECT pDriverObject);
#ifdef __cplusplus
};
#endif
#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, testDriverUnload)
#endif
#endif //_TESTDRIVER_H
-----------------------------------------------------------------------------------------------------------
//testDriver.cpp
#include "testDriver.h"
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING pRegistryPath)
{
KdPrint(("[TAR]: testDriver Entry!/r/n"));
NTSTATUS status;
pDriverObject->DriverUnload = testDriverUnload;
status = STATUS_SUCCESS;
return status;
}
VOID testDriverUnload(IN PDRIVER_OBJECT pDriverObject)
{
KdPrint(("[TAR]: tsetDriver Unloading...../r/n"));
}
---------------------------------------------------------------------------------------------------------------
如果编译成功证明你的环境配置没有问题。