Часто задаваемые вопросы и ответы по C/C++/Visual C++
Последнее обновление: 27.08.2003
FAQ по C/C++/Visual C++
Работа с сетью
Выключение компьютьера
Составители: SUnteXx, Leprecon
Выключение компьютьера
A: (server_mouse)
Оригинальная ссылка: нету

Используется API-функция
bool ExitWindowsEx (UINT uFlags, DWORD dwReason);
Declared in Winuser.h; include Windows.h.
Use User32.lib.


uFlags:
для перегрузки используем EWX_REBOOT
для выключения питания EWX_POWEROFF
если нужно экстренно выключит/перегрузить комп, используем вышеуказаные влаги в сочетании с EWX_FORCE


Второй параметр используется только в XP для указания причины перезагрузки.

В NT/2000/XP для использования ExitWindowsEx необходимо иметь
привелегию SE_SHUTDOWN_NAME, по умолчанию не установленную
даже для администратора. Установить её можно нижеприведённым кодом.
HANDLE hToken;
TOKEN_PRIVILEGES* NewState;
OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES, 
                 &hToken);
NewState = (TOKEN_PRIVILEGES*) malloc (sizeof 
             (TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES));
NewState->PrivilegeCount = 1;
LookupPrivilegeValue (NULL, SE_SHUTDOWN_NAME, 
                         &NewState->Privileges[0].Luid);
NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges (hToken, FALSE, NewState, NULL, NULL, NULL);
free (NewState);
CloseHandle (hToken);

Содержание Обсудить на форуме « Предыдущая статья | Следующая статья »
Перейти к FAQ:  
FAQ составлен по материалам Форума на Исходниках.Ру.
Copyright © 2002 by Sources.ru. All rights reserved.