对Windows 内核有严重好奇心,开始学习驱动编程.
首先建立编译环境,下载最新版WDK7600.16385.1.选择全部安装.安装完成后,有两种选择可以编写驱动程序,一个是记事本,一个VS.参考网上一篇文章.
配置VS2010+WDK
一.随便建立一个空工程.配置工程属性.新加一个.Driver
二.添加一个文件.cpp|.c 选择配置Driver.
三.右键文件属性.
1
.
"常规"-目标文件扩展名:.sys
2."VC++目录"-
可执行文件目录:
$WinDDK$\bin\x86
包含目录 :
$WinDDK$\inc; $WinDDK$\inc\api;$WinDDK$\inc\ddk
库目录 :
$WinDDK$\lib\win7\i386
$WinDDK$
为安装路径如C:\WinDDK\7600.16385.1\;
3.
“C/C++”
-
预处理器
-
"
预处理器定义
"
添加定义
WIN32=100;_X86_=1;WINVER=0x501;DBG=1
如果是 Release.
WIN32=100;_X86_=1;WINVER=0x501;
-
高级-"调用约定" 修改为
__stdcall(/Gz)
-
常归-"警告等级" 设置为
/W4
将警告视为错误选为
是/WX
-优化-优化选项可以选择为 已禁用/Od 可选
-
代码生成:缓冲区安全检查 否 可选
4."
链接器"
-
输入:"附加选项输入"
ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB
“忽略所有默认库” 选择为 是 (/NODEFAULTLIB)
-清单文件: 启用用户账户控制(UAC) 否 否则会出现 “/MANIFESTUAC”与“/DRIVER”规范不兼容
-系统: “子系统” 选择为 控制台(/SUBSYSTEM:CONSOLE)
“驱动程序” 选择为 驱动程序(/DRIVER)
-高级: “入口点” 输入为 DriverEntry
“基址” 输入为 0x10000
“随机基址” 中原来的 是 (/DYNAMICBASE) 内容删掉,只留下空的文本框,
因为 “/DYNAMICBASE”与“/DRIVER”规范不兼容
“数据执行保护(DEP)” 中原来的 是 (/NXCOMPAT:NO) 内容删除,只留下空的文本框,
因为 “/NXCOMPAT:NO”与“/DRIVER”规范不兼容
-调试: 根据当前是 Driver Debug 还是 Driver Release 选择是否生成调试信息 是(/DEBUG)
-命令行: 添加一段 /SECTION:INIT,D /IGNORE:4078
这样可以防止出现 4078的警告 【找到多个“INIT”节,它们具有不同的属性(E2000020)】
-常规: “启用增量链接” 可以设置为 否(/INCREMENTAL:NO) 可选 建议选上
还需要拷贝VS2010目录下
\VC\include\sal.h
覆盖掉
$WinDDK$\inc\api\sal.h
还需要拷贝VS2010目录下\VC\include]CodeAnalysis, 拷贝到 $WinDDK$\inc\api
如果使用记事本编写驱动程序.建立.c文件.写入代码.
建立makefile文件.
建立sources文件内容如下
TARGETNAME:生成的文件名
TARGETTYPE:DRIVER
SOURCES:xxx.c
多个文件用空格隔开
进入开始-Windows Driver Kit 中 Build中找到XP目录的build cmd
然后进入目录 build
但是我build时候出错了
1>errors in directory e:\(niko)\_myproject\_sys\helloworld\helloworld
1>e:\wintools-x86\winddk\7600.16385.1\bin\makefile.new(449) : error U1023: syntax error in expression
1>nmake.exe /nologo BUILDMSG=Stop. -i BUILD_PASS=PASS2 LINKONLY=1 NOPASS0=1 MAKEDIR_RELATIVE_TO_BASEDIR= failed - rc = 2
终于找到错误原因是 文件目录包含__
开始驱动编程