经典驱动程序结构

来源:互联网 发布:sqlserver分页 编辑:程序博客网 时间:2024/05/01 18:08

关于驱动程序的结构:

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的生成和传递。

原创粉丝点击