驱动程序是一个软件组件,可以让操作系统和设备之间实现通信。一般操作系统可以分为两个主要组成部分,即User Mode和Kernel Mode。用户的APP运行在系统的User Mode下,而驱动程序则运行在系统的Kernel Mode下。由于Windows在User Mode下做了许多限制,使得在用户模式下的APP有很多资源不能访问到,这时候就可以通过驱动来实现对Kernel Mode下的资源进行访问,如图5.1所示。
图 5.1
NT驱动程序一般是由3部分组成,即DriverEntry、DispatchRoutine和DriveUnload。其中DriverEntry主要进行驱动程序的初始化,即:创建设备和DispatchRoutine的注册工作。当Driver被加载时,DriverEntry会被系统进程调用;DriverUnLoad在驱动被卸载时被调用,做回收资源操作,如删除创建的设备与设备符号连接、删除程序中定义的句柄等;DispatchRoutine是由一系列回调函数组成,系统在对设备进行操作或者响应设备中断时会调用这些回调函数。与此对应的,需要在User Mode中的APP编写驱动的加载函数LoadDriver,驱动的卸载函数UnLoadDriver以及APP给Driver的派遣函数IRP。APP指令与NT Driver指令的对应关系如图5.2所示。
图 5.2
其中APP与NT Driver之间的通信流程如下图5.3所示。

本文介绍了如何通过编写NT驱动程序,使应用程序能够在Windows系统中读取PCI设备的配置信息。驱动程序运行在Kernel Mode,包含DriverEntry、DispatchRoutine和DriveUnload三个关键部分。在用户模式的APP中,需要配合驱动进行加载、卸载和调度函数的编写,以实现与NT驱动的通信,从而访问受限制的系统资源。
最低0.47元/天 解锁文章
1569

被折叠的 条评论
为什么被折叠?



