Как вы запрашиваете Windows, чтобы программно отменить жесткий диск? Есть ли функция пользовательского режима, которую я могу вызвать (или функцию режима ядра для вызова или IRP для отправки), чтобы это произошло?
Я попытался сделать программу для отправки команды ATA STANDBY непосредственно на жесткий диск, но проблема в том, что этот метод не сообщает системе, и, следовательно, всякий раз, когда система должна очищать кеш, она снова пробудит жесткий диск. Как мне сказать системе сделать это для меня? (Если система сделает это, она сохранит кеш и "всплеск" данных, когда он станет слишком большим, вместо того, чтобы писать небольшими приращениями.)
(Вся суть здесь заключается в том, чтобы сделать это напрямую, не, изменив общесистемный тайм-аут отсрочки до 1-секундного периода и ожидая, когда диск начнет вращаться. Мне нужно функцию, которую я могу вызвать в определенный момент времени, когда я использую свой ноутбук, а не что-то общее, что не подходит для 95% ситуаций.)
Насколько я дошел до сих пор:
У меня такое ощущение, что PoCallDriver и IRP_MJ_POWER могут быть полезны для этого, но я очень ограничен ядровое программирование (и почти нулевой опыт работы с драйверами), поэтому я действительно не знаю.
Пожалуйста, прочтите:
Update:
Люди, похоже, неоднократно упоминают, что решения, о которых я уже упоминал, не работают. Как я уже сказал выше, я уже уже пробовал "хакерские" решения, которые изменяют значение тайм-аута или напрямую выдают команду на диск, и вся причина, по которой я задал этот вопрос, заключается в том, что эти не делать то, что мне нужно. Пожалуйста, прочитайте весь вопрос (особенно пункты 2 и 3), прежде чем повторять то, что я уже сказал в ваших ответах, - что вся трудность в вопросе.
Дополнительная информация:
Я нашел этот документ об обнаружении простоя диска, но мой ответ там отсутствует. В нем говорится, что Power Manager отправляет IRP драйверу диска (поэтому я подозреваю, что IRP_MJ_POWER
будет полезен), но я не знаю, как использовать эту информацию.