scr*_*lli 14 usb windows-7 power-management
我在台式计算机上安装了 USB 3.0 集线器。
我用它来连接外部 USB 3.0 磁盘以进行备份,但我遇到了一个问题:Windows 7 默认情况下为所述集线器启用省电功能,这会导致磁盘在密集 I/O 操作期间断开连接(例如我在 8 时的计划备份)下午)。
我可以通过执行以下操作禁用此设置:
转到设备管理器 > 右键单击集线器 > 属性 > 电源管理 > 取消选中允许计算机关闭此设备以节省电源
太糟糕了,每次我重新启动计算机时,都会再次选中该框。有没有办法永久禁用此设置?
编辑:我用上面设置的实际英文名称编辑了我的问题(以前不是很清楚)。
编辑:彼得菲茨杰拉德的回答准确地描述了我到目前为止所做的事情。每次我重新启动复选框时,都会再次标记,我正在寻找一种永久禁用它的方法。
编辑:阅读Synetech的回答后,我能够找到更改设置时更改的注册表项,即:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FLUSB\ROOT_HUB_FL30\5&f0b5d82&1\Device Parameters\WDF\IdleInWorkingState (DWORD)
Run Code Online (Sandbox Code Playgroud)
每当我取消设置复选框时,管理控制台都会更改此键,以及当我通过进程系统停用和重新激活设备时。太糟糕了,授权中的任何设置都被神秘地忽略了,即使拒绝每个人的所有特权,密钥也总是设置为 1。
我尝试在线搜索,并找到了此 Microsoft 指南。尝试设置他们描述的每个键都没有帮助,似乎这些键被忽略了。我什至试图从在线找到的现有.INF 中复制正确的密钥路径(将/WDF
哪些密钥放在父项下,哪些键放在父项下),就像这样,但我什么也没得到。
其他有用的信息:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FLUSB\ROOT_HUB_FL30\
,我也有这两个声音:5&f0b5d82&0
和5&21f33a01&0
,这似乎反映了上面的键的配置。IdleInWorkingState
不过,唯一的变化是上面描述的那个。我在台式计算机上安装了 USB 3.0 集线器。我用它来连接外部 USB 3.0 磁盘以进行备份,但我遇到了一个问题:Windows 7 默认为所述集线器启用省电功能,这会导致磁盘在大量 I/O 操作期间断开连接
您确定驱动器正在关闭以进行电源管理,而不仅仅是因为它试图消耗过多的电量吗?您可以通过设备管理器检查 USB 集线器的功耗(图 1 和图 2)。验证集线器可为每个端口提供的电源是否足以用于外部驱动器。如果没有,您可以使用 USB Y 型适配器(图 3 和图 4)从两个端口获取电源。(大功率外置驱动器通常带有专门用于此目的的 Y 型适配器,因此请仔细检查复选框和手册。)
我可以通过执行以下操作禁用此设置:转到设备管理器 > 右键单击集线器 > 属性 > 电源管理 > 取消选中允许计算机关闭此设备以节省电源
太糟糕了,每次我重新启动计算机时,都会再次选中该框。有没有办法永久禁用此设置?
如果禁用该设置确实解决了手头的问题,那么现在的问题是让它坚持而不是恢复。一种选择是使用Process Monitor 之类的东西,并将过滤器设置为相关的注册表项 ( HcDisableSelectiveSuspend
) 以查看哪些程序对其进行了更改,以便关闭该选项(应将其设置1
为禁用电源管理)。
这将是理想的方法,因为它可以追踪设置恢复的实际原因。不幸的是,只能找到原因;实际上修复它可能并不容易,甚至不可能。例如,Windows 可能会在关机时自动恢复它,或者更有可能在启动期间检测到硬件时将其设置为默认值。
顺便说一下,您是否将驱动器插入不同的 USB 端口?至于Windows正在而言,“已知装置”是一个配对的设备+端口,因此,如果您之前已经将一台设备到端口A,并让Windows安装驱动程序,那么你以后插上节省设备进港B, Windows 会将其视为新设备并(重新)为其安装驱动程序以及默认设置. 因此,当您将其插入新端口时,您必须重新设置所有设置。之后,Windows 应该记住新旧端口的设置。您可能希望将驱动器一次插入每个 USB 端口并对其进行配置,这样无论您将它们插入哪个端口,都可以确保将来它们都已配置完毕。(驱动器号也是如此,但由于可移动卷的驱动器号的短暂性质,这些往往不太可靠。
阻止 Windows 恢复设置的一种方法是简单地拒绝对设置的访问。这需要使用注册表编辑器,如果您不小心,这可能会带来风险,因此在进行更改之前采取通常的备份预防措施并仔细检查(尤其是在删除任何内容时 - 无论如何您都不应该在这里做)。
首先,您需要找到相关的设备 ID:
Allow to turn off
复选框(没关系什么,只是改变它),但不点击OK(图5)Path
, contains
, DisableSelectiveSuspend
,Include
Operation
, contains
, setvalue
,设置另一个过滤器Include
记下GUID后面的四位设备 ID (图 7);在这个例子中,0055
:
HKLM\System\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}\0055\HcDisableSelectiveSuspend
Run Code Online (Sandbox Code Playgroud)单击 Process Monitor 中的行,按Ctrl+J打开 Regedit 并直接导航到该键(如果不起作用,则打开 Regedit 并手动导航到该键)
将设置配置为您希望的最后一次设置(取消选中“电源管理”选项卡中的框并单击OK)
现在锁定该设置并阻止对密钥的访问(图 8):
Inherit from parent
框,然后点击Copy和OKFull Control
选中底部列表中的框现在没有人,不是你,甚至系统本身都不能修改设置(但他们仍然可以读取它),所以在将它设置为只读之前,它应该始终保持你设置的内容。(如果需要,您可以通过在“高级安全设置”对话框中删除特定于项目的权限并重新选中该Inherit from parent
框来恢复写访问权限。
当然,之后您需要重新启动以确保设置保持不变。
如果驱动器仍在关闭,请尝试按照上述方法将其设置HKLM\System\CurrentControlSet\Services\usb\DisableSelectiveSuspend
为1
只读。这个设置在普通系统中不存在,也没有像HcDisableSelectiveSuspend 那样被记录(唯一的引用是在社区页面上),但 Windows 似乎之前确实查询过这个值HcDisableSelectiveSuspend
(图 7),所以值得一试。
此时,如果您愿意,您可以返回并诊断潜在问题,而不仅仅是治疗症状。您可以使用上面的过滤器在启动期间(选项?启用引导日志记录)和关闭期间(稍微复杂一点)对注册表项进行进程监视器日志写入访问,以准确找出正在更改它的内容。然后你可以交叉手指,希望有一种方法可以防止它。
图 1:设备管理器中 USB 集线器的屏幕截图
图 2:USB 集线器上的功耗屏幕截图
图 3:USB Y 型适配器的照片
图 4:USB Y 型适配器使用示意图
图 5:USB 集线器电源管理选项卡的屏幕截图
图 6:必要的进程监视器过滤器
图 7:进程监视器结果中相关注册表项的屏幕截图
图 8:将注册表项设置为只读的流程图
由于其他解决方案均无效,因此我使用以下解决方法解决了问题:
编辑在互联网上找到的脚本,我构建了这个:
C:\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()
}
Run Code Online (Sandbox Code Playgroud)
上述脚本需要提升权限,因此我在 Windows 7 的任务计划程序中创建了一个任务,以便在使用我的用户登录时运行以下脚本(以管理员用户身份):
C:\powerMgmt.cmd
powershell -file C:\powerMgmt.ps1
Run Code Online (Sandbox Code Playgroud)
整个事情有点像黑客;它并不优雅,也不能帮助我理解问题,但它解决了问题。
归档时间: |
|
查看次数: |
57333 次 |
最近记录: |