Как узнать, доступен ли спящий режим для пользователя Windows (с C++)

Я знаю, что можно вызвать следующий API для спящего режима системы:

SetSuspendState(TRUE, FALSE, FALSE);

Но есть ли способ узнать, доступна ли "настоящая" гибернация для текущего пользователя Windows?

Вот что я имею в виду:

  1. Если админ звонит:

    powercfg.exe /hibernate off
    

    API выше переведет систему в спящий режим. Итак, как вы узнаете (из программы на C++), что это произойдет вместо гибернации?

  2. Я не уверен, существует ли групповая политика, которая может запретить пользователю переходить в спящий режим на компьютере, подключенном к Active Directory?

Изменить Я в курсе (от) IsPwrHibernateAllowed API. Я считаю, что это не работает: он по-прежнему возвращает тот же результат, даже если powercfg.exe /hibernate off назывался. Я что-то там не так делаю? Может кто-нибудь объяснить, почему IsPwrHibernateAllowed у меня не работает?

1 ответ

Решение

Взгляни на SYSTEM_POWER_CAPABILITIES структура, которая может быть получена с CallNtPowerInformation. В частности, посмотрите на HiberFilePresent поле.

Другие вопросы по тегам