经典驱动程序结构

本文介绍了驱动程序的经典结构,包括应用层如何通过交互层与驱动层进行通信。应用层通过注册服务程序并调用交互层函数操作驱动。交互层封装DeviceIoControl函数,驱动层在Dispatch例程中处理IRP,解析控制码并处理缓冲区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于驱动程序的结构:

1.       应用层:通过调用交互层的函数得到驱动程序对应的文件路径,名称和DOS名称,并将这个驱动程序注册为服务程序,然后在交互层用函数CreateFile并传入驱程的DOS名称打开驱程,现在就可以调用交互层的WriteIo(自定义)函数对驱动程序发出指令。

2.     交互层:它的WriteIo函数其实只是对系统函数DeviceIoControl的封装。并且它通过该函数实现对驱程的控制。驱程在派遣函数里面通过:

IoGetCurrentIrpStackLocation(Irp) ->Parameters.DeviceIoControl.IoControlCode可以得到

上层传过来的控制码信息,通过分析这个信息,从Irp->AssociatedIrp.SystemBuffer

取得缓冲区指针,从irpStack->Parameters.DeviceIoControl.InputBufferLength

irpStack->Parameters.DeviceIoControl.outputBufferLength中取得缓冲区大小来进行处理。

3.       驱动层:按照经典WDM模型,DriveEntry是它的入口,dispatch是它的派遣例程,

相当于一个窗口的消息循环,注意中间重要的是IRP的生成和传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值