WDK框架驱动和应用程序的交互通信实现(附加代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WDK框架驱动和应用程序的交互通信实现(附加代码)
学习各种高级外挂制作技术,马上去百度搜索"魔鬼作坊",点击第一个站进入,快速成为做挂达人。
在学习wdk驱动的时候,关于通讯这块介绍真的很少,加上《天书夜读》没有公开代码,所以实现起来真的很困难,所以在学习的过程中做了些小结,附上源码,希望对初学者有一些帮助。目录如下,如果有用过虚拟机,第三章可以忽略。时间比较宝贵的直接看第五章。word文档里面有超链接,阅读也方便一点。
从某种程度上说,这个算是自己第一次发帖,所以大家多多指教。
附件如下:
《天书夜读》Windows驱动编程基础教程.rar
Comm.rar
dioc.rar
fhlj1.rar
irpcl.rar
List.rar
总.rar
总的word文件:WDK下驱动和应用层序通信.rar
第一章VC6.0+WDK(7600.16385.1)开发驱动的环境配置1
第二章设备和符号链接生成以及删除2
第三章虚拟机运行3
第四章应用程序向驱动程序发送消息7
第五章驱动程序主动发消息给应用程序10
第一章VC6.0+WDK(7600.16385.1)开发驱动的环境配置
(1)第一步:打开VC建立一个Win32Application工程,然后选择An empty Project。
(2)第二步:随便找一个驱动程序,主要是.C,.h及rc资源文件,加入第一步建立的工程
(3)第三步:设置VC编译驱动的环境,这才是重点。打开VC的Tool->Options->Directories里设置Include,Lib,及Exectuable File。
设置Include路径:
C:/WINDDK/7600.16385.1/INC
C:/WinDDK/7600.16385.1/INC/wdf
C:/WinDDK/7600.16385.1/INC/wdf/kmdf/1.9
C:/WINDDK/7600.16385.1/INC/CRT
C:/WINDDK/7600.16385.1/INC/DDK
C:/WINDDK/7600.16385.1/INC/API(这里可能有些不需要,也可能少了,根据自己的情况在INC目录下继续添加就OK了)
设置LIB路径:
C:/WINDDK/7600.16385.1/LIB
C:/WINDDK/7600.16385.1/LIB/WDF/KMDF/I386/1.9
C:/WINDDK/7600.16385.1/LIB/CRT/I386
C:/WINDDK/7600.16385.1//LIB/WNET/I386
设置Executable Files:
C:/WINDDK/7600.16385.1/BIN/X86/X86
(这里要注意,一定要在bin/x86目录下,确切的找到Cl.exe文件,然后添加它所在的目录,DDK与WDK这个文件所在的路径并不是一样的,上面的是我所安装的WDK中cl.exe所在的路径,这里要根据不同情况选择正确的路径)
(4)第四步:
这里要设置工程的属性:
打开VC->Project菜单,找到C/C++选项卡,在Preprocesser definitions里输入如下字符串:Release下输入:
_X86_=1,i386=1,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,NDEBUG
Debug下输入:
_X86_=1,i386=1,STD_CALL,WIN32=100,_WIN32_WINNT=0x0501,WINVER=0x0501,_DEBUG
在Code Generation里的Calling convention用_STDCALL
Debug版有个特殊编译选项/GZ(注意是大写的,小写的不要删!)删掉,否则有链接错误,chkesp链接不上什么的。
(5)第五步:
设置link选项卡,将输出文件名改为sys扩展名,
在General的Objcet/Library modules,填写驱动调用的几个lib:
Kernel32.lib ntoskrnl.lib hal.lib usbd.lib wmilib.lib wdfdriverentry.lib wdfldr.lib
然后进入Output在Entry-point symbol:填DriverEntry
下面就是往Project Options手动增加一些链接选项,复制如下进去:
/machine:IX86/driver/subsystem:native/SECTION:INIT,d/IGNORE:4198,4010,4037,4039,4065,407 0,4078,4087,4089,4221
删除如下选项:
/subsystem:windows
/machine代表目标机器类型,/driver代表驱动,/subsystem:native也是代表驱动。
(这里,我在配置的时候,只是将/subsystem:windows改为:/subsystem:native没有再进行其它设置,也可成功生成驱动文件,至于有没有问题,暂时不知道)
/hell74111/blog/item/847374a9648fd8b8cb130c0a.html
源文档374966/265242>
那么如果我们要编译64位驱动呢?这里大家注意一下,64位有两种,一个是AMD64,一个是IA64,要选定你的目标平台,目前AMD64平台最为流行.
其实编译成64位也很简单,只要把32位的配置稍微改一下就行了,我们以编译AMD64位驱动为例(你会复制VC的工程Configurations吧,把32位的Relase,Debug各复制一份改名为ReleaseAMD64和DebugAMD64,然后在复制品的基础上修改):
1.要修改两个lib路径:
C:/2003DDK/LIB/CRT/I386改为:C:/2003DDK/LIB/CRT/amd64
C:/2003DDK/LIB/WNET/I386改为:C:/2003DDK/lib/wnet/amd64
2.修改编译器路径:
C:/2003DDK/BIN/X86
改为:
C:/2003DDK/bin/win64/x86/amd64