- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi研究之驱动开发篇
Delphi研究之驱动开发篇()
Delphi能不能开发Windows的驱动程序(这里的驱动程序当然不是指VxD了^_^)一直是广大Delphi fans关注的问题。姑且先不说能或者不能,我们先来看看用Delphi开发驱动程序需要解决哪些技术上问题。 Delphi的链接器是无法生成Windows内核模式程序的,因此用delphi无法直接生成驱动程序。M$的链接器是可以生成Windows内核模式程序的,那么是否可以用Delphi生成目标文件,然后用M$链接呢?要这么做必须要解决以下的问题: Delphi生成的目标文件是OMF格式的,而M$ link虽然声称支持OMF格式的目标文件,但基本无用。最好能将OMF格式转换成COFF格式,EliCZ大侠的OMF2D正好可以解决这个问题。解决 了目标格式的问题,一切都OK了吗?远没这么简单。继续之前,让我们先来看一下著名的DDDK吧。 DDDK(Delphi Driver Development Kit)是The Hacker Defender Project team发布的一个用Delphi开发Windows驱动程序的工具包,目前最新版是0.0.4版。DDDK是将常用的驱动API用Delphi做了层包 装放在DDDK单元中,就像下面这样:
Copy code
unit DDDK; interface const NtKernel=ntoskrnl.exe; …… procedure IoCompleteRequest(Irp:PIrp;PriorityBoost:Integer); stdcall; …… implementation procedure krnlIoCompleteRequest(Irp:PIrp;PriorityBoost:Integer); stdcall; external NtKernel name IoCompleteRequest; procedure IoCompleteRequest(Irp:PIrp;PriorityBoost:Integer); stdcall; begin krnlIoCompleteRequest(Irp,PriorityBoost); end; ……
然后在每次链接驱动文件之前,用omf2d对dddk.obj中需要引入的驱动API做以下的处理: omf2d inc\DDDK.obj /U- /CEIoCompleteRequest=_IoCompleteRequest@8 2nul将DDDK.obj中的IoCompleteRequest改成_IoCompleteRequest@8,为什么要这样做呢?那是因为 诸如ntoskrnl.lib之类的导入库都是coff格式的,coff格式就是这样命名的。完成这步以后就可以调用m$ link将目标文件链接成驱动文件了。 这样做虽然可以生成正确的驱动文件,但缺点也是明显的。将驱动API用delphi包装,这些用delphi包装的函数不管是否使用都会被链接到最终生成 的驱动文件中,这样会增加驱动文件的尺寸,而且通过delphi的封装函数再去调用驱动API效率也会受影响,还有就是每次链接前都要用omf2d inc\DDDK.obj /U- /CEIoCompleteRequest=_IoCompleteRequest@8去转换delphi的目标文件,既麻烦又容易出错。有没有更好的办 法呢? omf2d的工作就是将delphi的命名方法转换成coff的_xxxxxxx@xx格式,默认omf2d会去掉前导下划线和@xx后缀,可以用 /U_*开关让omf2d不删除前导下划线,如果我们再有没有@xx后缀的导入库,那问题就简单多了。但m$并没有提供没有@xx后缀的导入库,那就让我 们自己做一个吧^_^,其实很简单,比如我们要生成hal.dll的导入库,只需要编辑一个如下内容的hal.def文件:
Copy code
LIBRARY HAL.DLL EXPORTS ExAcquireFastMutex ExReleaseFastMutex ExTryToAcquireFastMutex HalAcquireDisplayOwnership HalAdjustResourceList HalAllProcessorsStarted ……
然 后用LINK /LIB /MACHINE:IX86 /DEF:hal.def /OUT:hal.lib命令就可以生成我们需要的没有@xx后缀的导入库文件了。有了这个文件,事情就好办多了。下面就让我们开始用delphi来开发 一个简单的驱动程序beeper吧。 这个驱动程序是从Four-
您可能关注的文档
- SIP网络概述.doc
- 新都市主义宪章.docx
- cdlinux下inflator的使用.doc
- 新加坡社会发展及体育部译名.docx
- 部分承认ITP的美国学校.doc
- 最新版本:香港《遗嘱认证及遗产管理条例》.doc
- 中央大街 英文介绍.doc
- 企业名称变更预先核准申请书Application for Name Registration-上海-双语.doc
- 最常用英语词语辨析.doc
- 外贸函电-报盘.doc
- Unit_8_How_do_you_make_a_banana_milk_shake教案 2.doc
- 商务英语职位头衔.doc
- 八年级上册Unit 8 How do you make a banana milk shake.Section A 知识讲解doc.doc
- 如何获取美国执业医师资格考试详解!Happy Nurses Recognition Week!.docx
- Voipswitch中文操作手册(图文).doc
- RFC1814中英文版.doc
- BCB讲座第十八讲注册表和动态连接库.doc
- CppUnit测试框架入门.docx
- 词汇教学教案设计.doc
- 2016年中考英语复习模拟冲刺卷.doc
最近下载
- 电视艺术欣赏(北京师范)中国大学MOOC慕课 章节测验答案.docx VIP
- 南京大学《认识地球》章节测验题目.doc VIP
- (高清版)-B-T 2423.18-2021 环境试验 第2部分:试验方法 试验Kb:盐雾,交变(氯化钠溶液).pdf VIP
- Unit 1 This is me! Welcome to the unit 教案-牛津译林版(2024)七上.docx VIP
- 急性ST段抬高型心肌梗死诊断和治疗指南.ppt VIP
- 25-羟基维生素D的临床检测.pptx VIP
- 中国精密半导体真空阀门行业市场规模及投资前景预测分析.pptx VIP
- 手术室护理文书书写.pptx VIP
- 治具设计注意事项-.pptx VIP
- 技术状态管理程序.docx VIP
文档评论(0)