Re: 卸载即插即用设备的系统调用?

Windows内核调试

卸载即插即用设备的系统调用?


zyq8709 2011-08-11, 15:56 下午
请问一下各位老师,卸载设备调用的是什么系统调用?比如就是像windows托盘处卸载usb设备时的系统调用。
用SetupDixxx API的结果是将驱动包一块卸掉了,重新插入设备时不仅重新加载驱动,还需重新安装驱动,和设备管理其中的卸载驱动效果一样。
而托盘处的卸载应只是卸载了驱动的加载,并未影响驱动在系统中的注册,重新插入设备只是加载一下就完成了,请问windows是如何做到的?

Re: 卸载即插即用设备的系统调用?


格蠹老雷 2011-08-14, 21:59 下午

托盘处的动作是弹出(Eject),与卸载驱动(Uninstall)有根本不同。选择Eject动作后,通常后启动一个rundll32进程,执行hotplug.dll中的函数...

000007fe`fa8c5f20 hotplug!HotPlugEjectDevice = <no type information>
000007fe`fa8c1270 hotplug!_imp_CM_Request_Device_Eject_ExW = <no type information>
000007fe`fa8c40ac hotplug!HotPlugWarmEjectVetoedW = <no type information>
000007fe`fa8c5f30 hotplug!HotPlugEjectDeviceEx = <no type information>
000007fe`fa8c31d8 hotplug!AddEjectToRemoval = <no type information>
000007fe`fa8c5db8 hotplug!HotPlugEjectDeviceStub = <no type information>
000007fe`fa8c5df4 hotplug!HotPlugEjectDeviceAsync = <no type information>
000007fe`fa8c5c68 hotplug!HotPlugEjectDeviceBase = <no type information>
000007fe`fa8c4034 hotplug!HotPlugEjectVetoedW = <no type information>

Re: 卸载即插即用设备的系统调用?


zyq8709 2011-08-15, 13:54 下午
多谢张老师的解答,十分感谢!
不知我这样理解是否正确:弹出设备只是删除了设备对象,从而导致驱动对象和映像文件从内存中卸载,而设备树和注册表中相关信息并未受影响,再次插入设备只需根据这些信息载入映像文件即可。而用SetupAPI则是连驱动的安装都一并回滚了,一切有关信息均被删除,插入设备则需先安装驱动后才可加载映像文件。请张老师指导,多谢您了!

Re: 卸载即插即用设备的系统调用?


zyq8709 2011-08-15, 13:57 下午
我插入的esata设备系统不出现弹出托盘,被esata的驱动屏蔽了,如果我想编程自己实现,该如何做呢?

Re: 卸载即插即用设备的系统调用?


zyq8709 2011-08-15, 14:05 下午
我装的是win7、office 2007,在发帖和回帖时,编辑页面的word控件不能正常工作,导致无法提交,换了IE和Firefox两种浏览器均不可以。我误认为是网站的问题,冒昧给张老师发邮件反映了一下,请您谅解。最后换了一台XP SP2的裸机没了问题,能正常发帖了。

Re: 卸载即插即用设备的系统调用?


格蠹老雷 2011-08-15, 20:11 下午
记得改一下注册表表键就可以了,防止出现在托盘区的一种常用做法也就是删除注册表中的表键

Re: 卸载即插即用设备的系统调用?


zyq8709 2011-08-17, 09:18 上午
还想麻烦一下张老师,能不能具体说一下是哪项注册表键?另外我如果直接调用HotPlugEjectVetoedW函数可不可以?
还有就是张老师能不能教一下一个调试技巧,就是在未知的情况下如何找到一项操作的响应函数并下断?比如就在此例中如何找到点击弹出设备菜单项后调用的是HotPlugEjectVetoedW?
麻烦您了张老师,十分感谢!

Re: 卸载即插即用设备的系统调用?


格蠹老雷 2011-08-19, 22:45 下午

多年前的事了,有点不记得了,找个注册表监视工具,然后插个U盘到系统...
这就说来话长了,要慢慢积累经验

不必客气

Re: 卸载即插即用设备的系统调用?


zyq8709 2011-08-28, 11:11 上午
多谢张老师的耐心解答!

Powered by Community Server Powered by CnForums.Net