windows设备停用启动杂记

本文探讨了Windows 10系统中设备停用启用机制,特别是针对升级到Win10 RS2 RTM后出现的部分驱动问题。文中详细分析了哪些设备支持停用启用操作,以及系统如何判断设备停用启用时是否需要重启。

    公司(OEM厂商)的电脑升级到win10 RS2 RTM后,发现有部分MS inbox驱动在电源事件后会出现黄标的现象(ErrorCode=43--QueryRemove失败)甚至driver lost。MS虽然承认是他们的issue,但是至少要到6月底才修复。于是,部门决定让我做个work around:出现黄标时Reset设备(其实就是停用-启用设备),并额外要求由于这个WA需要给产线使用,所以Reset设备时,最好不能重启电脑。其实代码实现可以参考MS ddk中devcon提供的源码,只是在测试过程中我想到这么个事:

1.并非所有的设备在停用启用过程中需要重启电脑生效,windows如何判断设备需要重启?

2.也并非所有设备都支持停用启用的操作,右键这部分设备,会发现并没有停用/启用的功能,比如一些关在Root下的虚拟驱动:即插即用设备枚举器(驱动文件:swenum.sys,设备HWID:ROOT\SWENUM);卷管理器(驱动文件:volmgr.sys,设备HWID:ROOT\VOLMGR),再比如一些ACPI设备:ACPI Lid(驱动文件:无,设备HWID:ACPI\PNP0C0D)。Windows又是通过什么决定设备是否支持停用启动功能?


对于问题1。我首先觉得可能停用启用设备时,需要重新加载设备栈的设备可能会要求重启。求教公司的大神,大神觉得有2种可能:

a.设备对应的service在注册表中的StartType项如果等于0,停用启动过程中可能会被要求重启电脑。比如给HDD设备通过SetupDi API簇安装过滤驱动,会被要求重启电脑生效。这时就需要把Setup API做的步骤分解,用非标准的手段(不调用SetupDI API来修改注册表/拷贝文件等)规避重启的过程。

b.停用设备时,设备上可能有句柄打开。(对于这个我想到用windbg扩展命令!devhandles检查打开设备的句柄,然而这个命令除了卡,根本达不到预期效果。看来有空我要试试用windbg脚本实现这个功能)


对于问题2。我观察设备管理器中各个设备的devnode的属性,发现这么个现象:

a.USB Root Hub可支持停用启用操作。它的设备属性中有个标志位:


b.对于一些不支持停用启用的设备,其设备属性的状态中并没有这样的标志位,如PCI Standard ISA bridge设备:


大概这就是区别吧,望高手指正,谢谢

### Windows 系统中无法停用设备的解决方案及错误原因 在Windows系统中,当用户尝试停用某个卷设备时,可能会遇到权限不足、文件系统锁定或相关驱动程序问题等情况。以下是关于该问题的具体分析和解决方案。 #### 1. 错误原因分析 无法停用设备的主要原因可能包括以下几种: - **卷正在被使用**:某些应用程序或系统进程可能正在访问该卷上的文件或数据[^1]。 - **权限不足**:当前用户账户可能没有足够的权限来执行停用操作[^2]。 - **驱动程序冲突**:与磁盘管理相关的驱动程序可能存在兼容性问题或未正确安装[^3]。 - **系统保护机制**:Windows系统可能将某些卷视为关键卷(如系统分区),并限制其停用操作[^4]。 #### 2. 解决方案 以下是解决“Windows无法停用设备”问题的具体方法: ##### 方法一:关闭占用卷的应用程序 如果卷设备正被某个应用程序或进程占用,则需要先确定并关闭这些程序。可以通过以下步骤完成: 1. 按下 `Ctrl + Shift + Esc` 打开任务管理器。 2. 转到“性能”选项卡,点击“打开资源监视器”。 3. 在资源监视器中,转到“磁盘”选项卡,查找与目标卷相关的活动进程。 4. 右键单击这些进程并选择“结束任务”。 ##### 方法二:以管理员身份运行磁盘管理工具 确保当前用户具有足够的权限来执行卷设备的操作。可以通过以下步骤以管理员身份运行磁盘管理工具: ```plaintext Win + S -> 输入“磁盘管理” -> 右键选择“以管理员身份运行” ``` 完成后,再次尝试停用设备。 ##### 方法三:使用命令提示符强制删除卷 如果通过图形界面无法解决问题,可以使用命令提示符中的 `diskpart` 工具来强制删除卷。具体步骤如下: 1. 按下 `Win + S`,输入“命令提示符”,右键选择“以管理员身份运行”。 2. 在命令提示符中输入以下命令并按回车: ```plaintext diskpart ``` 3. 列出所有磁盘: ```plaintext list disk ``` 4. 选择要操作的磁盘(例如磁盘0): ```plaintext select disk 0 ``` 5. 列出该磁盘的所有分区: ```plaintext list partition ``` 6. 选择要删除的分区(例如分区3): ```plaintext select partition 3 ``` 7. 强制删除分区: ```plaintext delete partition override ``` 注意:此操作将清除选定分区上的所有数据,请确保已备份重要信息。 ##### 方法四:更新或重新安装驱动程序 如果问题是由驱动程序冲突引起的,可以尝试更新或重新安装相关驱动程序。具体步骤如下: 1. 按下 `Win + X`,选择“设备管理器”。 2. 展开“磁盘驱动程序”部分,找到目标设备。 3. 右键单击设备,选择“更新驱动程序”或“卸载设备”。 4. 如果选择卸载设备,请勾选“删除此设备的驱动程序软件”选项,然后重新启动计算机以自动安装最新驱动程序。 ##### 方法五:检查系统文件完整性 系统文件损坏可能导致卷设备无法正常操作。可以使用以下命令检查并修复系统文件: 1. 按下 `Win + S`,输入“命令提示符”,右键选择“以管理员身份运行”。 2. 输入以下命令并按回车: ```plaintext sfc /scannow ``` #### 3. 注意事项 - 在执行任何删除或修改操作之前,请确保已备份重要数据。 - 如果问题仍然存在,可以尝试进入安全模式进行操作,以减少其他程序或服务的干扰。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值