/************************* Workers ************************************/ static BOOL IsShutdownTypeEnabled(BYTE shutdownType) { BOOL bReturn = FALSE; switch (shutdownType) { case SDSDT_HIBERNATE: case SDSDT_STANDBY: bReturn = shutdownType == SDSDT_HIBERNATE ? IsPwrHibernateAllowed() : IsPwrSuspendAllowed() != 0; /* test privilege */ if (bReturn) { bReturn = WinNT_SetPrivilege(SE_SHUTDOWN_NAME, TRUE); if (bReturn) WinNT_SetPrivilege(SE_SHUTDOWN_NAME, FALSE); } break; case SDSDT_LOGOFF: { HKEY hKey; DWORD dwSetting, dwSize; /* NoLogOff is BINARY on Win9x/ME and DWORD on Win2000+ */ bReturn = TRUE; if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) { dwSize = sizeof(dwSetting); if (RegQueryValueEx(hKey, _T("NoLogOff"), 0, NULL, (LPBYTE)&dwSetting, &dwSize) == ERROR_SUCCESS) if (dwSetting) bReturn = FALSE; RegCloseKey(hKey); } } break; case SDSDT_LOCKWORKSTATION: { HKEY hKey; DWORD dwSize, dwSetting; /* DisableLockWorkstation is DWORD on Win2000+ */ bReturn = TRUE; if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) { dwSize = sizeof(dwSetting); if (!RegQueryValueEx(hKey, _T("DisableLockWorkstation"), 0, NULL, (LPBYTE)&dwSetting, &dwSize)) if (dwSetting) bReturn = FALSE; RegCloseKey(hKey); } } break; case SDSDT_CLOSERASCONNECTIONS: /* check if RAS installed/available */ bReturn = TRUE; break; case SDSDT_SETMIRANDAOFFLINE: case SDSDT_CLOSEMIRANDA: bReturn = TRUE; /* always possible */ break; case SDSDT_REBOOT: case SDSDT_SHUTDOWN: /* test privileges */ bReturn = WinNT_SetPrivilege(SE_SHUTDOWN_NAME, TRUE); if (bReturn) WinNT_SetPrivilege(SE_SHUTDOWN_NAME, FALSE); break; } return bReturn; }
bool HibernationEnabled() { #pragma warning (push, 4) #pragma warning( disable : 4800 ) BOOST_LOG_SEV(logger(), debug) << "IsPwrHibernateAllowed(): " << (bool)IsPwrHibernateAllowed(); BOOST_LOG_SEV(logger(), debug) << "IsPwrShutdownAllowed(): " << (bool)IsPwrShutdownAllowed(); BOOST_LOG_SEV(logger(), debug) << "IsPwrSuspendAllowed(): " << (bool)IsPwrSuspendAllowed(); #pragma warning (pop) SYSTEM_POWER_CAPABILITIES systemPowerCapabilities = {0}; if (!GetPwrCapabilities(&systemPowerCapabilities)) { DWORD last_error = GetLastError(); std::string msg = Utilities::MakeString() << "GetPwrCapabilities() failed. Reason: " << last_error; BOOST_LOG_SEV(logger(), error) << msg; return false; } #pragma warning (push, 4) #pragma warning( disable : 4800 ) BOOST_LOG_SEV(logger(), debug) << "systemPowerCapabilities.Hiberboot: " << (bool)systemPowerCapabilities.Hiberboot; #pragma warning (pop) return !!systemPowerCapabilities.Hiberboot; }
bool SleepEnabled() { return !!IsPwrSuspendAllowed(); // do not sure how to perform it using SYSTEM_POWER_CAPABILITIES. }