【发布时间】:2011-07-19 00:47:19
【问题描述】:
如何请求 Windows 以编程方式降低硬盘转速?我可以调用任何用户模式函数(或调用内核模式函数或发送 IRP)来实现这一点吗?
我尝试过编写一个程序,将ATA STANDBY command 直接发送到硬盘,但问题是这种方法不会通知系统,因此每当系统需要刷新缓存时,它就会再次唤醒硬盘。我如何告诉 系统 为我执行此操作? (如果系统这样做了,它会保存缓存并在数据变得太大时“突发”数据,而不是小增量写入。)
(这里的重点是直接执行此操作,不是通过将系统范围的降速超时更改为 1 秒时间并等待磁盘减速。我需要一个可以在我使用笔记本电脑时在特定时刻调用的函数,而不是不适合 95% 情况的通用函数。)
到目前为止我已经走了多远:
我觉得PoCallDriver 和IRP_MJ_POWER 可能对此有用,但我的内核模式编程经验非常有限(而且驱动程序经验几乎为零)所以我真的不知道。
请阅读:
更新:
人们似乎反复提到我已经提到的解决方案不起作用。就像我上面说的,我已经尝试过“hacky”解决方案,这些解决方案可以更改超时值或直接向驱动器发出命令,以及我问过的全部原因这里的问题是那些没有没有做我需要的事情。 请阅读整个问题(尤其是第 2 和第 3 段),然后再重复我在你的答案中已经说过的话——这就是 整个问题在问题中。
更多信息:
我发现this document about Disk Idle Detection 很有用,但我的答案不在其中。它指出 电源管理器 将 IRP 发送到磁盘驱动程序(因此我怀疑 IRP_MJ_POWER 很有用),但我不知道如何使用这些信息。
【问题讨论】:
-
现在这是一个核心问题!
-
那么你是想指示电源管理子系统让HD进入睡眠状态,而不是直接指示HD进入睡眠状态?
-
您能否添加一段解释,说明为什么常规方法(即“让操作系统根据系统和用户策略为您管理”)不适合您的场景?提前致谢!
-
我相信实现您既定目标的最简单方法:磁盘不旋转、节省电池寿命、防止热量积聚和消除噪音将是安装固态磁盘。您甚至可以获得显着的性能提升。
-
@Ben:我想更便宜的方法是阅读书籍并让笔记本电脑休眠 :-)
标签: winapi hard-drive