#include<wdm.h>
否则的话就看看_WIN32_WINNT在win7下面的定义,在代码上定义下。
进入wdk的环境cmd,有src文件夹吗,有的话,进入找一个目录build一下看看
没用过wdk7,还是使用ddk2600,wdk8.0好像没src目录了。
你的问题比较笼统,不知道是怎样的需求。我把我的经验全都贴出来,楼主挑自己感兴趣的吧。一、源代码编译
在微软官网上下载 WDK 开发包,里面有 WDK 编译器,链接器,配置工具,如NMAKE。然后,用记事本写 C 或 C++ 文件,编译,链接就 OK 了。
WDK 库是一定要的,否则头文件,导入库都没有,就无法编译了。至于编译器和连接器,其实就是普通的 cl.exe 和 link.exe 两个工具,和 VS 中的 VC 编译链接器是同一个。
编译的方法是:
在自己的目录如 c:\wdkdemo 中有个待编译的 wdkdemo.c ,那么需要在这个目录里加入两个文件,一个是 makefile (无后缀名)的固定文件名,内容也是固定的:
INCLUDE $(NTMAKEENV)\makefile.def
另外一个文件是 sources (无后缀名)的固定文件名,内容为:
targettype=driver
targetname=obj
sources=wdkdemo.c
这两个文件都是让nmake 工具配置用的,最终调用合适的编译器和链接器开关来编译出 sys 。
WDK包有个 build 命令行工具,当配置好了以上两个文件后。双击 build 工具,进入到 c:\wdkdemo 目录,输入命令 build 回车,然后只要 wdkdemo.c 源代码正确,就会生成 sys 文件了。
二、sys 文件安装:
在网上下载个免费的驱动安装工具,这个不难吧,一般调试用的驱动,建议在安装的时候,千万记得要选择手动模式,因为自启动模式,如果驱动有BUG ,会导致蓝屏,重启机器后,驱动因自启动又被加载,导致再次蓝屏。
三、调试
在微软官网下个 windbg ,但 windbg 需要调试机和被调试机模式,因此 windbg 最好配合 vmware 来使用。
我感觉,sys 文件编译是很麻烦的。不如编译应用程序,只要一个 VS 可以搞定大部分的事情。驱动开发需要很多关于其他工具的知识。譬如,用记事本或者NOTEPAD++编辑源代码感觉很吃力,因为 VS 没有驱动开发的项目,因此 VS 不直接支持驱动开发,当然,可以进行配置,但 VS 配置驱动是很麻烦的。另外, windbg 有很多的调试命令,当然常规的命令一般4、5个就够用了。VMWARE 的配置也是很麻烦的,当初,我自己研究了很长时间,网上虽然有教程,但都是讲得不全面,譬如要配置10个地方,网上都是只说7、8个,导致 VMWARE 配置不成功。
驱动开发还有 DRIVER STUDIO 这么一个 IDE 可以使用,另外还有 IRPTRACE ,DEVICE TREE , DEBUG VIEWER 等工具。
我开发驱动的工具是 VMWARE + VS2010 + WDK + WINDBG + WINOBJ + IRPTRACE + DEBUG VIEWER 这几个。
追问
我就是想把WDK和visual studio合在一起开发,在记事本上太吃力了,每一个字都需要自己写,这样的话不就退化到好几年之前了嘛--现在做一个小东西也需要几千的代码,这样会累死的,就像这样我的在visual studio 2008里面已经有这样的了,但是编译不出 .sys文件,我自己写的代码也不行,别人写的(网上下的)也编译不出来 你看看是什么情况,图上的是我自己机子上我搞的(原本没有)
追答
原来是这个呀。
首先,新建一个WIN32控制台工程,选择空项目。然后新建一个.cpp文件。接下去所有的项目属性不要修改,需要修改的地方如下,至于有些修改的含义,就不多说了,一说又一大堆。
VS 中配置 WDK 选项:
(假定 WDK 安装目录为 C:\WinDDK\7600.16385.1,这个是我机器上的配置)
一、C/C++
1.常规
*附加包含目录:编辑添加3个路径,分别对应WDK安装目录\INC子目录中的三个目录:crt,api,ddk。最终在附加包含目录的内容为:C:\WinDDK\7600.16385.1\inc\apiC:\WinDDK\7600.16385.1\inc\ddkC:\WinDDK\7600.16385.1\inc\crt
调试信息格式:C7兼容 /Z7
2.预处理器
*WIN32DBG_X86_WINVER=0x0501
3.代码生成
*启用最小重新生成:否
*基本运行时检查:默认值
运行库:多线程调试(/MTd)
*缓冲区安全检查:否(/GS-)
4.高级
调用约定:__stdcall (/Gz)
二、链接器
1.常规
输出文件:$(OutDir)\$(ProjectName).sys
*启用增量链接:否(/INCREMENTAL:NO)
附加库目录:编辑添加1个路径,对应WDK安装目录\LIB\WXP\I386,最终的附加库目录的内容为:C:\WinDDK\7600.16385.1\lib\wxp\i386。注意,如果是WIN7系统,子目录把 WXP 改成WIN7
2.输入
*附加依赖项:ntoskrnl.lib
*忽略所有默认库:是(/NODEFAULTLIB)
3.清单文件
清单文件:否
4.系统
子系统:本机(/SUBSYSTEM:NATIVE)
*驱动程序:驱动程序(/DRIVER)。注意,如果是WDM类型驱动,改成 WDM (/DRIVER:WDM)。
5.高级
入口点:DriverEntry
随机地址:默认值
数据执行保护(DEP):默认值
以上带 * 的意识为,内容可以根据项目的具体分化,可以有所变动。当然啦,变动,肯定是基于你对该选项的理解基础上进行变更的。譬如附加依赖项一般需要ntoskrnl.lib ,如果使用了第三方库里的函数,那需要再添加其他的 lib 库。譬如想启用缓冲区安全检查,那除了开关设置意外,必须
在附加依赖项开关加上 bufferoverflowU.lib 这个库,因为安全检查函数由 bufferoverflowU.lib 导出。
更正下我第一次的回答:
sources (无后缀名)的固定文件名,内容为:
targettype=driver
targetname=obj
sources=wdkdemo.cpp
更正为:
targettype=driver
targetname=wdkdemo
targetpath=obj
sources=wdkdemo.cpp
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)