Программно замедлить жесткий диск в Windows?

Как вы запрашиваете у Windows программную остановку жесткого диска? Есть ли какая-нибудь функция пользовательского режима, которую я могу вызвать (или функцию режима ядра для вызова или IRP для отправки), чтобы это произошло?

Я попытался создать программу для отправки команды ATA STANDBY прямо на жесткий диск, но проблема в том, что этот метод не информирует систему, и, следовательно, всякий раз, когда системе требуется очистить кеш, она снова разбудит жесткий диск. Как мне сказать системе сделать это за меня? (Если система сделает это, она сохранит кэш и «разорвет» данные, когда они станут слишком большими, вместо того, чтобы писать маленькими приращениями.)

(Весь смысл здесь в том, чтобы сделать это напрямую , не путем изменения общесистемного тайм-аута замедления на 1-секундный период и ожидания остановки диска. Мне нужна функция, которую я могу вызвать в определенный момент времени, когда Я использую свой ноутбук, а не что-то общее, которое не подходит для 95% ситуаций.)


Как далеко я зашел:

Мне кажется, что для этого могут быть полезны PoCallDriver и IRP_MJ_POWER , но у меня очень ограниченный опыт программирования в режиме ядра (и почти нулевой опыт работы с драйверами), поэтому я действительно понятия не имею.


Прочтите:

Обновление :

Кажется, люди неоднократно упоминают решения, которые я уже упоминал, не работают. Как я уже сказал выше, я уже пробовал "хакерские" решения, которые изменяют значение тайм-аута или напрямую выдают команду накопителю, и вся причина Я задал этот вопрос вот что они не сделали то, что мне нужно. Пожалуйста, прочтите весь вопрос (особенно параграфы 2 и 3), прежде чем повторять то, что я Я уже сказал в своих ответах - это вся трудность в вопросе.


Дополнительная информация:

Я нашел этот документ об обнаружении простоя диска полезным , но моего ответа там нет. В нем указано, что Power Manager отправляет IRP драйверу диска (поэтому я подозреваю IRP_MJ_POWER как полезный), но я понятия не имею, как использовать эту информацию.

20
задан Mehrdad 5 April 2011 в 01:42
поделиться