驱动程序开发:卸载Windows驱动程序

时间:2011-09-24 17:55:42

标签: windows driver device-driver hid

我正在攻击虚拟HID驱动程序,出于某种原因,我无法在设备管理器中禁用并无法卸载驱动程序。

devcon.exe remove也会抛出错误。在控制面板的“游戏控制器”对话框中删除设备会让我转到“设备管理器”以删除设备。

知道可能导致这种情况发生的原因吗?什么可能导致Windows认为它无法删除驱动程序?


小更新。

将计算机置于待机状态允许我删除设备。

删除部分HID报告描述符(例如多点触控报告,鼠标报告和键盘报告,我都没用过)也解决了这个问题。

但是,我想了解到底出了什么问题。是什么锁定了驱动程序以便无法卸载?

2 个答案:

答案 0 :(得分:0)

任何可能正在使用该驱动程序的进程都可以将其保持打开状态。一种方法是使用Sysinternals' Process Explorer并使用“Handles”菜单下的“Find”命令搜索与驱动程序相关的任何DLL的名称。

因此,对于许多驱动程序来说,关闭相关进程很容易,但对于与文件系统相关的驱动程序来说,这可能更具挑战性。例如,即使您关闭虚拟设备上的所有映射或安装,任何Windows资源管理器进程(包括登录shell)都可能已加载驱动程序。同样,PROCEXP有助于弄清楚其中的一些......

答案 1 :(得分:0)

它是一个内核模式驱动程序,所以,你不能只是"只是"禁用它。为了成功卸载驱动程序,I / O管理器必须在没有其他句柄等待处理或关闭时发送清理请求。

如果它是PnP驱动程序,PnP管理器必须向I / O管理器发送IRP_MJ_SHUTDOWN请求,以便I / O管理器可以启动卸载回调例程。

强制禁用它的一种方法是,你可以调试机器的内核。通过这样做,您可以看到哪些进程正在向此驱动程序发送请求,然后手动卸载驱动程序(因为它可能会产生严重影响,因为所有打开驱动程序的打开句柄必须由I / O管理器关闭)