大侠们看看我理解的关于驱动程序的一系列顺序步骤对不对?
刚自学驱动开发,看的是张帆的 windows驱动开发技术详解,自学中,才看了前几章,很多地方觉得有些迷糊,今天梳理了一下,写出来,请大侠们看看我理解的对不对?主要驱动对象和设备对象的一些通俗的理解,和操作系统的实现步骤。
举例来说一下吧。比如:
1、我要访问磁盘
2、调用了win32的API
3、这个API通知操作系统我要访问磁盘
4、通过Native API传递给内核里的系统服务函数
5、操作系统在系统服务描述表SSDT里找啊找,找到了相关的服务后
6、操作系统的对象管理器创建驱动对象(起个名字叫AAA)
7、操作系统的配置管理器搜索注册表中的服务键(起个名字叫BBB)
8、然后,进入驱动程序,入口是DriverEntry(),参数是AAA和BBB
9、函数内部设置好IRP的派遣函数
10、用IoCreateDevice创建设备对象,并通过第一个参数pDriverObject使设备对象和驱动对象建立联系
11、执行各种想要的操作,不提
12、执行完毕后,通过DriverUnload卸载驱动对象
13、函数中写入删除设备对象的代码
14、一个完整的过程就此完毕。
我的理解就是这样的,请问大侠们,有什么不对的地方吗?或者理解有偏差的地方?请指正!
[最优解释]
驱动加载: 系统在枚举到设备之后,如果系统里面安装过该设备的驱动,系统就会调用该设备驱动的DriverEntry完成加载。
设备对象创建: 应用程序需要使用某个设备,会调用类似CreateFile的Windows API,驱动程序会收到IRP_MJ_CREATE,驱动需要为这个IRP创建Object,并把句柄传回给应用程序的CreateFile.后续的IOCTL就有句柄可以使用了。
[其他解释]