没有合适的资源?快使用搜索试试~ 我知道了~
首页Delphi内核驱动开发入门指南:NT平台详解
Delphi内核驱动开发入门指南:NT平台详解
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 55 浏览量
更新于2024-07-06
收藏 329KB DOCX 举报
本资源是一份关于Delphi驱动开发的教程文档,主要关注Windows NT系列操作系统(包括NT4.0、2000、XP和2003)上的内核模式驱动(KMD)开发。文档首先介绍了内核模式驱动的基本结构,区分了用户模式和内核模式的地址空间及其权限,强调了内核模式下的关键组件如运行模块(负责内存管理、进程管理等)、内核(处理线程调度和中断处理)以及设备驱动程序(硬件接口的核心部分)。 用户模式进程被分类为系统支持进程(如Winlogon)、服务进程(如Spooler)、用户应用程序和子系统(如Win32、POSIX和OS/2子系统)。在Windows XP及后续版本中,POSIX和OS/2子系统不再存在。开发者需要注意的是,虽然Delphi主要用于高级应用编程,但在Windows NT环境中,学习如何编写内核模式驱动是扩展其功能和与底层硬件交互的关键。 文档深入探讨了Delphi在内核模式驱动开发中的应用,可能会涉及如何使用Delphi的底层API,如Windows NT的内核API,以及如何编写驱动程序的初始化、设备枚举、中断处理和I/O操作等功能。此外,硬件抽象层(HAL)的作用也得到了强调,它作为一个桥梁,使得驱动程序可以适应各种硬件平台,而不必直接依赖于具体硬件细节。 这份教程旨在为Delphi开发者提供一个全面且实用的指南,帮助他们理解和实践在Windows NT平台上创建高性能、稳定的内核级驱动程序。通过学习,开发者将能够更好地理解和控制系统的底层运作,并利用Delphi的强大特性来解决复杂的系统级问题。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/80436787/bgb.jpg)
]驱动程序将接收 30FWF34F4202)32 请求包^
0/7#IE1:34/$B1:<324)F!F6A-F80--<
S73"#P$<ZGB73"#P$C<
S72#/"#P$<ZGB72#/"#P$C<
"./0/#$<CL
GB0/7#E/$#C7B"./0/#$[\C/
9*
]取程序名^
!/#(7&B73"#P$_`<7:#7/<ZGB7:#7/CCL
-7*B($&7/BR#"8-.:7Ra a X
R%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Ra a X
R,,,Ra a X
R5$,,Ra a X
R#$,,Ra a X
R:&:/,,R<
_/$7:/(7&B7:#7/C<73"#P$_`<72#/"#P$_`<
73"#P$_ `<72#/"#P$_ `<
73"#P$_`<72#/"#P$_`<
73"#P$_`<72#/"#P$_``CCL
9*
-7*BR47RR/:/$:/1:RCL
L
]$1$$:130G/.30FWF4)2-^
467B1:CL
9*
-7*BR1:/$/RCL
L
]$1$=7$:#$$1$9:7^
4/$-$1:B-$1:<-034F4202)F-2<FCL
9*
-7*BR47RR//7$/$1$RCL
L
/-$1:B-$1:CL
4-$1:67B-$1:CL
9*
-7*BR47RR/$*/$$1$RCL
L
4-$1:67B-477*$CL
9*
-7*BR47RR/:://-$1:4/$77*$RCL
L
![](https://csdnimg.cn/release/download_crawler_static/80436787/bgc.jpg)
这个代码包括了注册和启动驱动程序,以及作为客户端程序和设备进行通讯的代码。代码将输入的数据发送给
设备,并将设备返回的数据格式化并显示出来。
驱动被装载后,$/. 驱动程序创建了一个名为@1$/.@的设备,内部设备名称无法被 应用程
序使用,因此,如果我们的驱动程序对应的设备对象希望被用户模式的代码打开的话,就必须在 @+UU@目录中创建
一个符号连接,指向@+1:@目录中的设备对象,然后,当调用者需要获取设备句柄时,32 管理器就能够找到它。
$/. 驱动程序在@+UU@目录中创建了指向@1$/.@设备的符号连接@$/.@,真实设备的全名是@+
1:+1$/.@,这样,当 -/7$/-$1: 函数执行后,系统中就多了三个新的对象: @+$1$+$/.@驱
动、@+1:+1$/.@设备和符号连接@+UU+$/.@。
现在来看看控制程序源代码,当驱动被启动后,我们只需要使用 4$7/( 函数来打开驱动,以此获得一个文件
句柄。函数原型如下:
G#:;4$7/(B(7&I47$L
$8::<-7$I20L
-:#$/.8H$9#/I-:#$/.8H$9#/L4$7;;<(7*88H$9#/I20L
&7/(I67CI67L/:7L
这个函数可以创建或者打开一个已存在的对象,而不仅仅是文件。函数的参数描述如下:
(7&%%◎ 指向以 结尾的表示设备名称的字符串,这里要用到指向设备对象的符号连接名
$8::%%◎ 指定访问设备的方式,可以有两个取值:!034F08 表示写操作,允许将数据写到设备中;
!034F03 表示读操作,允许从设备读取数据,这两个值可以合并起来使用
-7$%%◎ 指定设备是否可以被共享, 表示设备不能被共享,这样并发的访问会失败,直到句柄被关闭为
止;要共享设备的话,可以指定下面的两个值:(3)F-680F08 表示可以并发地读取设备,(3)F-680F03 表
示可以并发地写设备
-:#$/.8H$9#/%%◎ 指向 -4=03AF803"=- 结构的指针,在此无用,所以可以指定为 =))
4$7;/$9#;%%◎ 指明当文件存在或不存在时函数采取的动作,对于设备来说,这个参数应该使用
2F3-3!
(7*88H$9#/%%◎ 文件属性,在这里总是使用
&7/(%%◎ 指定文件模板的句柄,在这里总是使用
如 果 4$7/( 函 数 成 功 地 创 建 或 者 打 开 了 指 定 的 设 备 , 那 么 返 回 值 就 是 设 备 句 柄 , 否 则 返 回 值 是
38)3F68)F8)=。我们这样使用 4$7/( 函数:
1:IE4$7/(BR+++$/.R<!034F08X!034F03<<<2F3-3!<<CL
来看看第一个参数,这是指向符号连接名称的字符串指针,名称格式是@+++$/.@,@+++@是 中定义
本地计算机的方法,4$7/( 函数实际上是 /4$7/( 函数的封装(位于+,-./&0/,+-./&+/ 中),
后者将访问定向到系统服务中去(注意不要和 服务进程混淆)。
/4$7/( 将本地计算机的别名@+++@用@+UU@代替(这样+++$/. 就变成了+UU+$/.)并调用内核的
29229Q:/".7& 函数,通过符号连接名称,29229Q:/".7& 函数找到+1:+1$/. 对象并返回
它的指针。/4$7/( 使用这个指针创建新的文件对象并返回句柄。
操作系统把所有的 32 操作请求抽象化成一个虚拟的文件,隐藏了目标设备的 32 操作可能在结构上并不等同于
文件的事实,然后由驱动程序负责将对虚拟文件的请求转换成对具体硬件的请求,这种抽象可以推广到所有用户
进程和设备之间的界面,所有对这种虚拟文件的读写操作都被当作是简单的流操作来处理。
在 4$7/( 返回前,32 管理器创建了 30FWF408 类型的 30 并将其传给驱动处理,驱动中负责响应这个
30 的子程序代码会在发起 32 请求(就是调用 4$7/( 函数的代码)的线程环境中执行,该线程的 30D) 等于
8--3F))。如果驱动的子程序成功返回,那么对象管理器在进程的句柄表中为文件对象创建一个句柄,然后
将其一层层地返回,直到返回到 4$7/( 函数。
现在来总结一下, @+++$/.@会被转换成符号连接 @+UU+$/.@,最终用来 找到需要的 @+1:+
1$/.@设备。然后可以从负责维护该设备的驱动程序中取得设备对象 34F2"W4,接下来 32 管理器将
30FWF408 请求传递给驱动,驱动程序知道如何处理这个请求。如果驱动打算处理该请求,那么它返回成功代
码,这样对象管理器创建对应这个设备的虚拟文件句柄并将它返回给用户模式代码。
句柄和符号连接为间接访问系统资源提供服务,这种@间接@方式将应用程序和系统的数据结构隔离开来。
![](https://csdnimg.cn/release/download_crawler_static/80436787/bgd.jpg)
4$7/( 函数返回有效的设备句柄后,我们将它保存在 1: 变量中,现在可以用 07(、$/( 以及
1:34/$ 函数来和设备通讯了。1:34/$ 函数是用来和设备通讯的通用函数,它的原型如下:
G#:;1:34/$B1:I67L
34/$4I20L
3"#P$I/$L
3"#P$-ZI20L
2#/"#P$I/$L
2#/"#P$-ZI20L
17$"./0/#$I20L
21$7I21$7CI"22)L/:7L
1:34/$ 函数的参数比 4$7/( 多,但用起来都很简单。
1:%%◎ 设备的句柄
34/$4%%◎ 控制代码,指出要进行什么操作,详细内容后面再做解释
3"#P$%%◎ 指向包含操作所需的数据的缓冲区指针,如果控制代码指明的操作并不需要输入数据的话,这里可
以用 =))
3"#P$-Z%%3"#P$◎ 参数指向的缓冲区的大小
2#/"#P$%%◎ 指向用来接收输出数据的缓冲区,如果 34/$4 指明的操作不产生输出数据的话,这里可
以用 =))
2#/"#P$-Z%%2#/"#P$◎ 参数指向的缓冲区的大小
"./0/#$%%◎ 指向一个变量,用来返回放入 2#/"#P$ 缓冲区的数据的数量
21$7%%◎ 指向 20)8 结构,这个参数仅在异步操作的时候才需要。我们的操作是同步的(就是在驱
动的过程返回前 1:34/$ 函数也不返回),所以在这里使用 =))
设备驱动程序可以被 当 作 内 核 模 式 函 数 包 来 看待, 32 控制 代 码 就 是 用 来 指 定 访 问 其 中 的 哪个函数的 。
1:34/$ 函数的 34/$4 参数就是这个代码,它指出了我们需要进行的操作,以及如何进行操作。
控制代码是 位数字型常量,可以 4)F42 函数来生成。控制代码的组成见下图:
控制代码中各数据位字段的含义如下:
1:.%%◎ 设备类型( >9/)指出了设备的类型,微软保留了 -'((( 的取值,剩下的 -(((( 供开发
商定义新的内核模式驱动程序。我们可以在+:#+5+/5: 文件中找到一组 (3)F34F 符号常量,这
些 值 都 是 微 软 保 留 的 值 , 我 们 可 以 使 用 其 中 的 (3)F34F=2 。 当 然 你 也 可 以 定 义 另 外 一 个
(3)F34F 值
8::%%◎ 存取代码(9/)指明应用程序存取设备的方式,由于这个字段只有 位,所以只有 种可能性:
b(3)F8AF844--BC%%最大的存取权限,就是什么操作都可以
b(3)F08F844--B C%%读权限,设备将数据传递到指定的缓冲区
b(3)F03F844--BC%%写权限,可以从内存中向设备传递数据
b(3)F08F844--$(3)F03F844--BC%%读写权限,设备和内存缓冲区之间可以互相传递数据
(#:;%%◎ 功能代码( 9/)用来描述要进行的操作,我们可以用 -((( 来定义自己的 32 控制代码,-
'(( 之间的值是被微软保留的,用来定义公用的 32 控制代码
/%%◎ 缓冲模式(9/)表示 32 管理器如何对输入和输出的数据进行缓冲,这个字段的长度是 位,所以有
种可能性:
b62F"=((0BC%%对 32 进行缓冲
b62F3F304B C%%对输入不进行缓冲
剩余63页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/a7a9f6748ed941a7b7e67cb0d6d5d714_sun13212715744.jpg!1)
猫一样的女子245
- 粉丝: 166
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 计算机人脸表情动画技术发展综述
- 关系数据库的关键字搜索技术综述:模型、架构与未来趋势
- 迭代自适应逆滤波在语音情感识别中的应用
- 概念知识树在旅游领域智能分析中的应用
- 构建is-a层次与OWL本体集成:理论与算法
- 基于语义元的相似度计算方法研究:改进与有效性验证
- 网格梯度多密度聚类算法:去噪与高效聚类
- 网格服务工作流动态调度算法PGSWA研究
- 突发事件连锁反应网络模型与应急预警分析
- BA网络上的病毒营销与网站推广仿真研究
- 离散HSMM故障预测模型:有效提升系统状态预测
- 煤矿安全评价:信息融合与可拓理论的应用
- 多维度Petri网工作流模型MD_WFN:统一建模与应用研究
- 面向过程追踪的知识安全描述方法
- 基于收益的软件过程资源调度优化策略
- 多核环境下基于数据流Java的Web服务器优化实现提升性能
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)