Windows - поставить HDD в режим ожидания и спящий режим - PullRequest
2 голосов
/ 16 марта 2010

Как я могу перевести жесткий диск в режим ожидания или в спящий режим в Windows, программным способом .

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

1 Ответ

4 голосов
/ 22 марта 2010

Я нашел программу под названием «RevoSleep». Предупреждение: МУЗЫКА! http://revosleep.realspooky.de/

Я не могу сказать вам, работает ли он вообще [я не настолько смел, чтобы попробовать :)], но я попытался декомпилировать его с помощью .NET Reflector . Который, о чудо, сработал. (Я не могу найти, на что эта лицензия лицензирована, поэтому остерегайтесь .)

Не зная, на что я смотрю, эти фрагменты казались наиболее актуальными. Все они используют API-интерфейс Windows DeviceIoControl .

"Спящий" диск:

if (Environment.OSVersion.Version.Build > 0xa28)
{
    num2 = DeviceIoControl(this.hDevice[0], 0x4d02c, (void*) &_ata_pass_through_ex_with_buffer, 40, (void*) &_ata_pass_through_ex_with_buffer, 40, (uint modopt(IsLong)*) &num11, null);
}
else
{
    num2 = DeviceIoControl(this.hDevice[0], 0x4d028, (void*) &_ata_pass_through, 0x20c, (void*) &_ata_pass_through, 0x20c, (uint modopt(IsLong)*) &num11, null);
    //...
}

"Блокировка" диска:

DeviceIoControl(hDevice[index], 0x90018, null, 0, null, 0, (uint modopt(IsLong)*) &num11, null);

«Деактивировать» диск:

DeviceIoControl(this.hDevice[0], 0x2d1080, null, 0, (void*) &_storage_device_number2, 12, (uint modopt(IsLong)*) &num8, null);

«Перевести том в автономное состояние» (?):

DeviceIoControl(this.hDevice[num3], 0x56c00c, null, 0, null, 0, (uint modopt(IsLong)*) &num11, null);

Что, опять же, я понятия не имею, работает ли это или даже то, что вы ищете. Вы всегда можете попробовать декомпилировать его и посмотреть на весь код самостоятельно.

Альтернативно, помогают ли эти вызовы API?
Функция SetSuspend
Функция GetPwrDiskSpindownRange

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...