Delphi研究之驱动开发篇

Delphi研究之驱动开发篇

ID:37709794

大小:370.00 KB

页数:43页

时间:2019-05-29

Delphi研究之驱动开发篇_第1页
Delphi研究之驱动开发篇_第2页
Delphi研究之驱动开发篇_第3页
Delphi研究之驱动开发篇_第4页
Delphi研究之驱动开发篇_第5页
资源描述:

《Delphi研究之驱动开发篇》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Delphi研究之驱动开发篇(一)Delphi能不能开发Windows的驱动程序(这里的驱动程序当然不是指VxD了^_^)一直是广大Delphifans关注的问题。姑且先不说能或者不能,我们先来看看用Delphi开发驱动程序需要解决哪些技术上问题。Delphi的链接器是无法生成Windows内核模式程序的,因此用delphi无法直接生成驱动程序。M$的链接器是可以生成Windows内核模式程序的,那么是否可以用Delphi生成目标文件,然后用M$链接呢?要这么做必须要解决以下的问题:Delphi生成的目标文件是OMF格式的,而M$link虽然声称支持OMF格式的目标文件

2、,但基本无用。最好能将OMF格式转换成COFF格式,EliCZ大侠的OMF2D正好可以解决这个问题。解决了目标格式的问题,一切都OK了吗?远没这么简单。继续之前,让我们先来看一下著名的DDDK吧。DDDK(DelphiDriverDevelopmentKit)是TheHackerDefenderProjectteam发布的一个用Delphi开发Windows驱动程序的工具包,目前最新版是0.0.4版。DDDK是将常用的驱动API用Delphi做了层包装放在DDDK单元中,就像下面这样:CopycodeunitDDDK;interfaceconstNtKernel='nt

3、oskrnl.exe';……procedureIoCompleteRequest(Irp:PIrp;PriorityBoost:Integer);stdcall;……implementationprocedurekrnlIoCompleteRequest(Irp:PIrp;PriorityBoost:Integer);stdcall;externalNtKernelname'IoCompleteRequest';procedureIoCompleteRequest(Irp:PIrp;PriorityBoost:Integer);stdcall;beginkrnlIoCo

4、mpleteRequest(Irp,PriorityBoost);end;……然后在每次链接驱动文件之前,用omf2d对dddk.obj中需要引入的驱动API做以下的处理:omf2dincDDDK.obj/U-/CEIoCompleteRequest=_IoCompleteRequest@82>nul将DDDK.obj中的IoCompleteRequest改成_IoCompleteRequest@8,为什么要这样做呢?那是因为诸如ntoskrnl.lib之类的导入库都是coff格式的,coff格式就是这样命名的。完成这步以后就可以调用m$link将目标文件链接成驱动文

5、件了。这样做虽然可以生成正确的驱动文件,但缺点也是明显的。将驱动API用delphi包装,这些用delphi包装的函数不管是否使用都会被链接到最终生成的驱动文件中,这样会增加驱动文件的尺寸,而且通过delphi的封装函数再去调用驱动API效率也会受影响,还有就是每次链接前都要用omf2dincDDDK.obj/U-/CEIoCompleteRequest=_IoCompleteRequest@8去转换delphi的目标文件,既麻烦又容易出错。有没有更好的办法呢?omf2d的工作就是将delphi的命名方法转换成coff的_xxxxxxx@xx格式,默认omf2d会去掉

6、前导下划线和@xx后缀,可以用/U_*开关让omf2d不删除前导下划线,如果我们再有没有@xx后缀的导入库,那问题就简单多了。但m$并没有提供没有@xx后缀的导入库,那就让我们自己做一个吧^_^,其实很简单,比如我们要生成hal.dll的导入库,只需要编辑一个如下内容的hal.def文件:CopycodeLIBRARYHAL.DLLEXPORTSExAcquireFastMutexExReleaseFastMutexExTryToAcquireFastMutexHalAcquireDisplayOwnershipHalAdjustResourceListHalAllPr

7、ocessorsStarted……然后用LINK/LIB/MACHINE:IX86/DEF:hal.def/OUT:hal.lib命令就可以生成我们需要的没有@xx后缀的导入库文件了。有了这个文件,事情就好办多了。下面就让我们开始用delphi来开发一个简单的驱动程序beeper吧。这个驱动程序是从Four-F的KmdKit里的beeper转换过来的,程序的目标就是通过访问端口让PC的扬声器发声,程序通过三种方法让扬声器发声,一种是直接访问端口,一种是调用hal.dll的READ_PORT_UCHAR和WRITE_PORT_UCHAR访问

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。