Форум — Ответы     (  К темам )
 ?  Raven: Какими функциями можно отключить, перезагрузить комп (очень надо) (28-04-2003 21:46:13)
Я написал прогу, которая отключает, перезагружает комп и тп.
Я использовал функции
ExitWindowsEx(EWX_REBOOT, 0)
ExitWindowsEx(EWX_SHUTDOWN, 0);

Но, как оказалось, они не хотят работать в системах NT. Я пречел в help'е, что для того чтобы они заработали в NT, надо объявить какие-то PRIVILEGES (SE_SHUTDOWN_NAME privilege). Примера там не было и у меня не выходит, поэтому прошу Вас подсказать как можно перезагрузить Комп в NT (Windows XP). Помогите разобраться с этими PRIVILEGE или дайте другое решение.
Благодарю!!!
 Георгий (28-04-2003 23:46:32)
мне на аналогичный вопрос недавно отвечали — попробуй поиск для развёрнутого ответа, а краткий:
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

// Get a token for this process.

if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
;
// Application->MessageBox("OpenProcessToken","",MB_ICONERROR|MB_OK);

// Get the LUID for the shutdown privilege.

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.

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

// Cannot test the return value of AdjustTokenPrivileges.

if (GetLastError() != ERROR_SUCCESS)
;
// Application->MessageBox("AdjustTokenPrivileges","",MB_ICONERROR|MB_OK);

// Shut down the system and force all applications to close.

if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_POWEROFF, 0))
Application->MessageBox("Не удалось выключить компьютер","Ошибка",MB_ICONERROR|MB_OK);