Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: zyq8709   发起时间: 2011-08-11 15:56 下午   回复: 8

Print Search
帖子排序:    
   2011-08-11, 15:56 下午
zyq8709 离线,最后访问时间: 2019/8/6 21:05:02 zyq8709

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

IP 地址: 已记录   报告
   2011-08-14, 21:59 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 卸载即插即用设备的系统调用?
Reply Quote

托盘处的动作是弹出(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>


IP 地址: 已记录   报告
   2011-08-15, 13:54 下午
zyq8709 离线,最后访问时间: 2019/8/6 21:05:02 zyq8709

发帖数前10位
注册: 2011-04-19
发 贴: 74
Re: 卸载即插即用设备的系统调用?
Reply Quote
多谢张老师的解答,十分感谢!
不知我这样理解是否正确:弹出设备只是删除了设备对象,从而导致驱动对象和映像文件从内存中卸载,而设备树和注册表中相关信息并未受影响,再次插入设备只需根据这些信息载入映像文件即可。而用SetupAPI则是连驱动的安装都一并回滚了,一切有关信息均被删除,插入设备则需先安装驱动后才可加载映像文件。请张老师指导,多谢您了!
IP 地址: 已记录   报告
   2011-08-15, 13:57 下午
zyq8709 离线,最后访问时间: 2019/8/6 21:05:02 zyq8709

发帖数前10位
注册: 2011-04-19
发 贴: 74
Re: 卸载即插即用设备的系统调用?
Reply Quote
我插入的esata设备系统不出现弹出托盘,被esata的驱动屏蔽了,如果我想编程自己实现,该如何做呢?
IP 地址: 已记录   报告
   2011-08-15, 14:05 下午
zyq8709 离线,最后访问时间: 2019/8/6 21:05:02 zyq8709

发帖数前10位
注册: 2011-04-19
发 贴: 74
Re: 卸载即插即用设备的系统调用?
Reply Quote
我装的是win7、office 2007,在发帖和回帖时,编辑页面的word控件不能正常工作,导致无法提交,换了IE和Firefox两种浏览器均不可以。我误认为是网站的问题,冒昧给张老师发邮件反映了一下,请您谅解。最后换了一台XP SP2的裸机没了问题,能正常发帖了。
IP 地址: 已记录   报告
   2011-08-15, 20:11 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 卸载即插即用设备的系统调用?
Reply Quote
记得改一下注册表表键就可以了,防止出现在托盘区的一种常用做法也就是删除注册表中的表键
IP 地址: 已记录   报告
   2011-08-17, 09:18 上午
zyq8709 离线,最后访问时间: 2019/8/6 21:05:02 zyq8709

发帖数前10位
注册: 2011-04-19
发 贴: 74
Re: 卸载即插即用设备的系统调用?
Reply Quote
还想麻烦一下张老师,能不能具体说一下是哪项注册表键?另外我如果直接调用HotPlugEjectVetoedW函数可不可以?
还有就是张老师能不能教一下一个调试技巧,就是在未知的情况下如何找到一项操作的响应函数并下断?比如就在此例中如何找到点击弹出设备菜单项后调用的是HotPlugEjectVetoedW?
麻烦您了张老师,十分感谢!
IP 地址: 已记录   报告
   2011-08-19, 22:45 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 卸载即插即用设备的系统调用?
Reply Quote

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

不必客气


IP 地址: 已记录   报告
   2011-08-28, 11:11 上午
zyq8709 离线,最后访问时间: 2019/8/6 21:05:02 zyq8709

发帖数前10位
注册: 2011-04-19
发 贴: 74
Re: 卸载即插即用设备的系统调用?
Reply Quote
多谢张老师的耐心解答!
IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » 卸载即插即用设备的系统调用?

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.