您如何要求Windows以编程方式降低硬盘速度?有没有我可以调用的用户模式函数(或者要调用的内核模式函数或要发送的IRP)来实现此目的?
我尝试制作一个程序以将ATA STANDBY命令直接发送到硬盘,但是问题在于此方法不会通知系统,因此,每当系统需要刷新缓存时,它都会唤醒硬盘。我如何告诉系统为我执行此操作?(如果系统执行此操作,它将保存高速缓存并在数据过大时“爆发”数据,而不是以较小的增量写入。)
(这里的全部要点是直接执行此操作,而不是通过将系统范围的降速超时更改为1秒的时间并等待磁盘降速来完成。我需要一个可以在特定时间调用的函数当我使用笔记本电脑时,不是一种不适合95%情况的通用产品。)
我到目前为止已经走了多远:
我觉得PoCallDriver和IRP_MJ_POWER可能对此有用,但是我对内核模式编程的经验非常有限(并且几乎有零驱动程序的经验),所以我真的不知道。
请阅读:更新:
人们似乎反复提到我已经提到的解决方案不起作用。就像我在上面说过的那样,我已经尝试过更改超时值或直接向驱动器发出命令的“ hacky”解决方案,而在这里我问这个问题的全部原因是那些没有按照我的要求做。在重复我在回答中已经说过的内容之前,请先阅读整个问题(尤其是第2和第3段),这就是问题的全部难处。
更多信息:
我发现有关磁盘空闲检测的这份文档很有用,但是我的答案不在那儿。它指出电源管理器将IRP发送到磁盘驱动程序(因此,我怀疑为什么IRP_MJ_POWER有用),但是我不知道如何使用该信息。