电源要求

电源要求

我已经在我的台式计算机上安装了 USB 3.0 集线器。

我使用它来连接外部 USB 3.0 磁盘进行备份,但遇到了一个问题:Windows 7 默认为该集线器启用省电功能,这会导致磁盘在密集的 I/O 操作期间断开连接(例如,我计划在晚上 8 点进行备份)。

我可以通过执行以下操作禁用此设置:
转到设备管理器 > 右键单击​​集线器 > 属性 > 电源管理 > 取消选中允许计算机关闭此设备以节省电量

太糟糕了,每次我重启电脑时,这个复选框都会被再次选中。有没有办法永久禁用此设置?

编辑:我用上述设置的实际英文名称编辑了我的问题(之前不是很清楚)。

编辑彼得·菲茨杰拉德回答准确描述了我到目前为止所做的事情。每次我重新启动时,复选框都会再次被标记,我正在寻找一种永久禁用它的方法。

编辑: 看完之后西奈特回答,我能够追踪更改设置时更改的注册表项,即:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FLUSB\ROOT_HUB_FL30\5&f0b5d82&1\Device Parameters\WDF\IdleInWorkingState (DWORD)

每当我取消勾选复选框时,以及当我通过进程系统停用并重新激活设备时,管理控制台都会更改此密钥。遗憾的是,授权中的任何设置都被神秘地忽略了,甚至通过拒绝所有人的所有权限,密钥也始终设置为 1。

我尝试在线搜索,然后我发现本 Microsoft 指南。尝试设置他们描述的每一个键都没有帮助,似乎这些键被忽略了。我甚至尝试从现有的.INF在网上找到(哪些键放在下面/WDF,哪些键放在父键下面),例如,但我什么也没得到。

其他有用信息:

  • 在 下HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FLUSB\ROOT_HUB_FL30\,我也有这两个声音:5&f0b5d82&05&21f33a01&0,这似乎反映了上面的键的配置。IdleInWorkingState不过,唯一的变化是上面描述的。
  • 当我手动编辑寄存器时,设备管理器中复选框的值不会改变,它必须被缓存在某处。

答案1

电源要求

> 我在台式电脑上安装了一个 USB 3.0 集线器。我用它来连接外部 USB 3.0 磁盘进行备份,但我遇到了一个问题:Windows 7 默认为该集线器启用省电功能,这会导致磁盘在 I/O 操作频繁时断开连接

你确定驱动器关闭是因为电源管理,而不是因为它试图消耗太多电量吗?你可以通过装置经理(图 1 和图 2)。验证集线器可以提供的功率每个端口对于外置硬盘来说已经足够了。如果不够,您可以使用 USB Y 型适配器(图 3 和 4)从两个端口获取电力。(高耗电外置硬盘通常配有专门用于此目的的 Y 型适配器,因此请仔细检查包装盒和手册。)

追踪疾病

> 我可以通过执行以下操作禁用此设置:转到设备管理器 > 右键单击​​集线器 > 属性 > 电源管理 > 取消选中允许计算机关闭此设备以节省电源 > > 太糟糕了,每次我重新启动计算机时,该框都会再次被选中。有没有办法永久禁用此设置?

如果禁用该设置确实能解决当前的问题,那么现在的问题就是让它坚持下去,而不是恢复。一种选择是使用类似进程监控将过滤器设置为相关注册表项(HcDisableSelectiveSuspend)查看哪个程序对其进行了更改,从而关闭了该选项(应将其设置1禁用能源管理)。

这将是理想的方法,因为它可以追踪实际的原因恢复设置。不幸的是,只有发现原因;实际上修复它可能并不容易,甚至不可能。例如,Windows 可能会在关机时自动将其恢复,或者更有可能在启动时检测到硬件时将其设置为默认值。

定义“设备”;检查 USB 端口

顺便问一下,您是否将驱动器插入不同的 USB 端口?就 Windows 而言,“已知设备”是 **设备+端口** 的 *配对*,因此如果您之前已将设备插入端口 A 并让 Windows 为其安装驱动程序,然后稍后将保存的设备插入端口 B,Windows 会将其视为新设备并(重新)安装驱动程序以及 *默认设置*。因此,当您将其插入新端口时,必须重新设置所有设置。之后,Windows 应该会记住新端口和旧端口的设置。您可能需要将驱动器插入每个 USB 端口一次并对其进行配置,以便无论将它们插入哪个端口,都可以确保将来它们都已配置。(驱动器号也是如此,但由于可移动卷的驱动器号具有短暂性,因此驱动器号的可靠性往往稍差一些。

治疗症状

防止 Windows 恢复设置的一种方法是直接拒绝访问该设置。这需要使用注册表编辑器,如果不小心,可能会有风险,因此请采取常规的备份预防措施,并在进行更改之前仔细检查(尤其是删除任何内容时——您不应该在这里这样做)。
  1. 首先您需要找到相关的设备 ID:

  2. 打开USB 根集线器属性您的中心的对话框装置经理(图1),然后切换到能源管理标签

  3. 改变复选框的值Allow to turn off(改变什么并不重要,只要改变),但不是点击OK(图5)

  4. 运行进程管理器并设置过滤器(图6):

  5. Ctrl+L

  6. 设置为Path, contains, DisableSelectiveSuspend,Include

  7. 点击Add

  8. 为 、、、Operation设置另一个过滤器containssetvalueInclude

  9. Add

  10. 点击OK

  11. 清除当前捕获(Ctrl+ X)并启动(Ctrl+ E)如果它尚未运行

  12. 切换回装置经理对话框并单击OK

  13. 切换回进程监视器并停止捕获(Ctrl+ E

  14. 记下全局唯一标识符(图 7);在此示例中0055

     HKLM\System\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}\0055\HcDisableSelectiveSuspend
    
  15. 单击进程监视器中的行,然后按Ctrl+J打开 Regedit 并直接导航到该键(如果这不起作用,则打开 Regedit 并手动导航到该键)

  16. 最后一次将设置配置为您想要的值(取消选中能源管理并单击OK)

  17. 现在锁定该设置并阻止对密钥的访问(图 8):

  18. 右键单击 Regedit 左侧窗格中的键

  19. 选择权限

  20. 点击Advanced

  21. 联合国-选中复选框Inherit from parent,然后Copy单击OK

  22. 返回常规(非高级)权限对话框,单击顶部列表中列出的每个组和用户,然后针对每个组和用户,联合国-勾选Full Control底部列表中的复选框

现在,没有人,包括你,甚至系统本身都无法修改设置(但他们仍然可以读取它),因此它应该始终保持在你将其设置为只读之前设置的值。(如果需要,你可以通过删除项目中特定的权限来恢复写入权限高级安全设置对话框并重新选中该Inherit from parent框。

当然,您需要随后重新启动以确保设置生效。

最后一招

如果驱动器*仍然*处于关闭状态,请尝试将“HKLM\System\CurrentControlSet\Services\usb\DisableSelectiveSuspend”设置为“1”,并使其如上所述变为只读。此设置在正常系统中不存在,[也没有记录][4],就像[HcDisableSelectiveSuspend][5]一样(对它的唯一引用是在社区页面上),但 Windows 似乎在“HcDisableSelectiveSuspend”之前查询此值(图 7),因此值得一试。

夏洛克·福尔摩斯

此时,如果您愿意,您可以回头诊断潜在问题,而不仅仅是治疗症状。您可以使用上述过滤器让 Process Monitor 在启动期间(*选项 → 启用启动日志记录*)和 [关机][6](这 [稍微有点棘手][7])记录对注册表项的写访问,以准确找出更改它的原因。然后,您可以祈祷有办法阻止它。

插图

图1:设备管理器中的 USB 集线器屏幕截图

设备管理器中的 USB 集线器屏幕截图

图 2:USB 集线器耗电量的屏幕截图

USB 集线器耗电量的屏幕截图

图 3:USB Y 型适配器的照片

USB Y 型适配器的照片

图 4:USB Y 型适配器使用示意图

USB Y 型适配器使用示意图

图 5:USB 集线器电源管理选项卡的屏幕截图

USB 集线器电源管理选项卡的屏幕截图

图 6:必要的进程监视器过滤器

所需进程监视器过滤器的屏幕截图

图 7:Process Monitor 结果中相关注册表项的屏幕截图

Process Monitor 结果中相关注册表项的屏幕截图

图 8:将注册表项设置为只读的流程图

将注册表项设置为只读的流程图

答案2

由于其他解决方案均不起作用,因此我采用以下解决方法解决:

Powershell 脚本禁用设置

编辑在互联网上找到的脚本,我构建了这个:

计算机:powerMgmt.ps1

$hubs = Get-WmiObject Win32_USBHub
$powerMgmt = Get-WmiObject MSPower_DeviceEnable -Namespace root\wmi | where {$_.InstanceName.Contains($hubs.PNPDeviceID)}

foreach ($p in $powerMgmt)
{
    $p.Enable = $False
    $p.psbase.Put()
}

以提升的权限在启动时执行

上述脚本需要提升权限,因此我在 Windows 7 的任务计划程序中创建了一个任务,以便在以我的用户身份登录时运行以下脚本(以用户管理员身份):

命令行界面:

powershell -file C:\powerMgmt.ps1

这整个事情有点像黑客行为;它并不优雅并且没有帮助我理解问题,但它解决了问题。

答案3

进入设备管理器,展开“通用串行总线控制器”下的树列表,右键单击设备条目,然后选择属性。

在此处输入图片描述

转到属性对话框中的“电源管理”选项卡,然后取消选中“允许计算机关闭此设备以节省电源”复选框。

在此处输入图片描述

如果您使用的是笔记本电脑,您可能还需要进入高级电源计划设置并禁用允许 Windows 在设备不使用时切断电源的选项。

答案4

您可以尝试彻底删除驱动程序并清除陈旧的 USB 信息:

  1. 转到设备管理器,打开“通用串行总线控制器”,右键单击 USB 根集线器并选择卸载。

  2. 使用 regedit 删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FLUSB
    如果出现权限错误,请参阅 如何完全控制 Windows 注册表项(包括评论)。免费实用程序瑞格可能会有帮助(我自己从未使用过它)。

  3. 重启。

首先创建一个系统还原点,以防万一。

另一个解决方案是使用较旧的驱动程序,它可以与上述过程结合使用。

以下是我发现的两个:
3.5.36.0,A01
Fresco Logic USB 3.0 驱动程序 3.5.93.0

相关内容