15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Завершение работы Windows.

Для завершения работы Windows можно воспользоваться функцией ExitWindowsEx. При этом файловые буфера будут сброшены на диск, а система приведена в состояние, когда компьютер можно безопасно выключить.

 

В Windows NT/2000/XP: для завершения работы системы необходимо получить привелегию SE_SHUTDOWN_NAME, как показано в следующем примере:

BOOL MySystemShutdown()
{
   HANDLE hToken;
   TOKEN_PRIVILEGES tkp;

   // Получаем маркер текущего процесса.

   if (!OpenProcessToken(GetCurrentProcess(),
        TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
      return( FALSE );

   // Получаем LUID для привелегии завершения работы.

   LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
        &tkp.Privileges[0].Luid);
 
   tkp.PrivilegeCount = 1;  // будет установлена одна привелегия
   tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

   // Получаем привелегию завершения работы для этого процесса.

   AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
        (PTOKEN_PRIVILEGES)NULL, 0);

   if (GetLastError() != ERROR_SUCCESS)
      return FALSE;

   // Шутдауним систему и заставляем все приложения закрыться.

   if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
      return FALSE;

   return TRUE;
}