用服务管理器加载NT式驱动的问题!
Windows内核调试
用服务管理器加载NT式驱动的问题!
zyq8709
2011-06-17, 11:45 上午
通过用SCM加载驱动一个NT式驱动(DriverMonitor或是insdrv等工具),都会出现一个问题:第一次加载卸载都正常,再次加载就会失败提示The ImagePath specified in driver's service database entry is incorrect,or the file is missing。就算删除注册表中SCM相关项也不行。只有重启一下方可重新安装启动。上网搜有的说是注册表中ImagePath的问题,但修改后也无用而且注册表中的信息都正确。有一个说法我感觉有点道理但又不很理解。他说是第一次卸载后,DriverObject的PointCount为1,导致此时设备对象和符号链接已经删掉了,但是DriverObject还在,于是就不会调用IopDeleteDriver,所以你的驱动其实还是内存里。
请问那既然驱动对象被删除并调用了UnLoad例程删除设备,为何其PointCount还为1,还有什么在引用它吗?还有就是如果同一个驱动安装多个对应设备,我根据wrk代码来看就是加载驱动->寻找驱动对象——————找到直接调用AddDevice例程
|____找不到就映像驱动PE,执行DriverEntry,并执行AddDevice例程
那么看来就算是驱动对象存在的话也不会失败,无非就是再创建一个设备对象罢了,我不太理解。
当然网上有人说通过改写为inf文件安装就没有问题了,想怎么加载或卸载都可以。
这到底是怎么回事?请帮忙解答一下我的疑问吧,多谢了!