首页
社区
课程
招聘
[专题五]Delphi驱动开发研究(工具更新至0.03版)
发表于: 2008-3-21 19:39 90352

[专题五]Delphi驱动开发研究(工具更新至0.03版)

2008-3-21 19:39
90352
Delphi能不能开发Windows的驱动程序(这里的驱动程序当然不是指VxD了^_^)一直是广大Delphi fans关注的问题。由于Delphi编译器无法生成Native格式的PE文件,因此是无法使用Delphi直接生成驱动程序的(个人见解,欢迎斧正),必须配合ms link才能生成最终的驱动程序。本人经过总结网上一些前辈高人的方法并结合自己的研究成果,摸索出了一种较为方便的使用Delphi开发驱动程序的方法,不敢独亨,希望能同论坛里的高手们一起打造出一个实用的驱动开发工具。^_^

2010.03.04 -- KmdKit4D更新到0.20版:
本次更新是KmdKit4D自发布以来最重大的一次,KmdKit4D升级到0.2版,rmcoff同步升级到2.4.1.239。KmdKit4D会更加灵活方便和易于使用。主要更新的内容如下:
1.rmcoff增加新的选项/cfg,此选项允许你通过定义配置文件为KmdKit4D增加类似VC #pragma alloc_text编译指令的功能,你可以把不同的代码放入不同的section,目前支持Page和Init两个选项,具体用法如下:
(1)编辑一个文本文件,如果你要将DriverEntry函数放入Init Section中,就输入:Init=DriverEntry,如果有多个函数,函数名用“,”号分隔,就像这样:Init=Func1,Func2,......。
(2)运行rmcoff时加上/cfg:[配置文件名参数],如:rmcoff test.obj /cfg:test.cfg。
(3)要放入Init和Page Section的函数必须在Delphi单元文件的interface部分进行声明。
2.经rmcoff转换后的目标文件的符号名按微软的符号名格式命名,这样做的好处就是KmdKit4D可以直接链接微软的静态库和用VC和MASM生成的obj文件并调用其提供的函数,同样,用VC或者MASM生成的obj文件也可以调用经KmdKit4D转换后的目标文件里的函数。这样你不但可以用Delphi给KmdKit4D编写函数库,也可以用VC和MASM为KmdKit4D编写函数库。需要注意的就是函数库里的函数必须是stdcall或者C调用约定的。
3.修改了经rmcoff转换后的obj文件格式,使其支持ms link的smart link功能,只有用到的代码和数据才会被链接进最终的驱动文件中,这样KmdKit4D生成的驱动文件将会更加小巧。
4.由于符号命名格式发生变化,定义DriverEntry函数时不再需要前面的下划线,这点一定要注意。
5.由于符号命名格式发生变化,在Delphi中对导入库的声明也要做相应的调整,比如你要导入ntoskrnl.exe文件导出的RtlInitUnicodeString函数,0.2前的版本是这样声明的:
procedure RtlInitUnicodeString; external NtKernel name '_RtlInitUnicodeString';
从0.2版开始要改成:
procedure RtlInitUnicodeString; external NtKernel name '_RtlInitUnicodeString@8';
这个是stdcall的,对fastcall的则要改成下面的形式:
function krnlIofCallDriver; external NtKernel name '@IofCallDriver@8';

Delphi驱动开发专题主要包括以下几方面的内容:
一、实现原理----用Delphi开发驱动程序需要解决的主要技术问题
http://bbs.pediy.com/showthread.php?t=57762
二、工具及环境搭建----KmdKit4D的组成及环境搭建方法
http://bbs.pediy.com/showthread.php?t=58070
三、一个用Delphi开发的简单但功能完备的驱动程序示例
http://bbs.pediy.com/showthread.php?t=58301
四、内存管理之系统内存堆
http://bbs.pediy.com/showthread.php?t=58608
五、内存管理之后备列表
http://bbs.pediy.com/showthread.php?t=59265
六、内核模式与用户模式通讯之共享Section
http://bbs.pediy.com/showthread.php?t=66291
七、内核模式与用户模式通讯之共享内存
http://bbs.pediy.com/showthread.php?t=66661
八、注册表
http://bbs.pediy.com/showthread.php?t=71350
九、目录与文件
http://bbs.pediy.com/showthread.php?t=102690
十、同步----计时器和线程
http://bbs.pediy.com/showthread.php?t=102892
十一、同步----互斥
http://bbs.pediy.com/showthread.php?t=105373
十二、Shared Event
http://bbs.pediy.com/showthread.php?p=761262
十三、IRP的生命循环
十四、过滤驱动

PS:开发工具发布及更新贴 http://www.kmdkit4d.net/dispbbs.do?boardId=8&ID=17&star=1

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (95)
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
2
哈哈,沙发我占了。期待mickeylan后面的精彩文章
2008-3-21 20:31
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
不会用Delphi , 楼主全部写完,希望整理为电子书,让更多人学习
2008-3-21 21:39
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
4
期待mickeylan更多的精彩文章!
2008-3-22 11:39
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
5
当前编程版块所进行的所有专题最后都会整理成电子书。
2008-3-22 11:41
0
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
支持一下`~~
2008-3-22 11:59
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好文章,值得学习!!!!!!
2008-3-28 23:49
0
雪    币: 225
活跃值: (233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
严重期待大牛
2008-4-3 16:49
0
雪    币: 334
活跃值: (22)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
期待ing......
2008-4-4 20:26
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
严重期待ing......
2008-4-10 22:53
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
加载成功后,Delphi如何调用驱动?
2008-4-16 12:43
0
雪    币: 1004
活跃值: (75)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
12
驱动是要用softice或者windbg这些支持内核级调试的调试器来调试的。
2008-4-16 14:58
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不是调试,是调用,我用Delphi写的程序去加载恢复SSDT的驱动,没有任何效果...估计应该还需要调用过程吧..
2008-4-18 00:38
0
雪    币: 372
活跃值: (31)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
14
学 习...
2008-5-3 17:46
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
最近一直再用delphi,虽然不用他做驱动,但还是关注一下。
2008-5-18 10:12
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习+等待ING!
2008-5-30 08:33
0
雪    币: 111
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jjh
17
好东西啊顶___
2008-7-21 16:30
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
绝对支持,等 作者发布IFS的东西
还有底动驱动调用ring3的DLL进行数据通讯处理的方法
2008-8-8 18:54
0
雪    币: 1004
活跃值: (75)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
19
谢谢捧场,目前正在开发一个支持OMF和COFF目标文件格式的汇编器,相信完成后用delphi开发驱动程序会更方便.
2008-8-9 17:00
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
to mickeylan:

大侠,我现在需要写一个虚拟磁盘,类似HttpDisk,或是FileDisk
只不是调入ISO,而是自定义数据(比如另外一个DLL从远程网络读入HTTP,FTP目录,或是这个DLL生成的虚拟目录..)

类似WinMount的一个东西,但是要想支持Mail,FTP...等网络数据的读写

希望大侠能介绍一下这些东西
2008-8-14 23:02
0
雪    币: 39
活跃值: (2906)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
我用SC命令不能启动驱动:
sc create sharemem binPath= "c:\windows\system32\sharingmemory.sys"
type= kernel  start= system
2008-8-16 17:18
0
雪    币: 196
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
路过,支持一下楼主
做为Delphi用户,真的太感谢了
2008-8-18 11:05
0
雪    币: 168
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
好事者做个chm包
上传的附件:
2008-8-22 22:08
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
还可以吗,公开这样的程序让我们能够学习,支持一下
2008-9-17 16:20
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
精彩,期待接下来的教程
2008-10-14 23:00
0
游客
登录 | 注册 方可回帖
返回
//