Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];

Вниз

Выключение компа из-под Win2000 Adv Serv   Найти похожие ветки 

 
AlexPro_   (2003-03-14 17:21) [0]

Как выключить комп программно?
Этот код почему-то неработает.

procedure TForm1.Button1Click(Sender: TObject);
var
hToken : THandle;
tkp, ptkp : TTokenPrivileges;
i : dword;
begin
{ Get a token for this process. }
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
{ Get the LUID for the shutdown privilege. }
LookupPrivilegeValue("","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,ptkp,i);
{ Cannot test the return value of AdjustTokenPrivileges. }
GetLastError;
{ Shut down the system and force all applications to close. }
ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0);
end;
Что нетак?


 
ZZ   (2003-03-15 00:30) [1]

а как переводится
Cannot test the return value of AdjustTokenPrivileges
и что возвращает написанный GetLastError?

Если код правильный (т.е. скопирован из надежных источников и работает на несерверных NT"ях), то скорее всего нет прав на перезагрузку чтобы всякие личности-неадмины не перезагружали сервер


 
AlexPro_   (2003-03-18 10:42) [2]

Вот накопал, работает без вариантов!
Может еще кому понадобится.
var
TokenHandle: Cardinal;
RetLength: Cardinal;
TP: TTokenPrivileges;
begin
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,TokenHandle);
if LookupPrivilegeValue(nil, "SeShutdownPrivilege", TP.Privileges[0].Luid) then begin
TP.PrivilegeCount:=1;
TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
RetLength:=0;
If AdjustTokenPrivileges(TokenHandle, FALSE, TP, 0, nil, RetLength) then begin
If not SetProcessShutdownParameters($4FF, SHUTDOWN_NORETRY) then begin
// MessageBox(0, "Shutdown failed", nil, MB_OK or MB_ICONSTOP);
Form1.LogFile1.WriteLogFile("Shutdown failed");
Result:=False;
end else begin
Form1.LogFile1.WriteLogFile("System PowerOFF");
Result:=ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN, 0);
end;
exit;
end;



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.44 MB
Время: 0.006 c
4-34646
olimpic
2003-03-11 19:53
2003.05.12
Работа с функцией RegEnumValue


14-34606
panov
2003-04-24 13:44
2003.05.12
О сообщениях


3-34334
Ergoist
2003-04-22 02:59
2003.05.12
DBGrid и расположение данных


1-34497
UserMicc
2003-04-28 18:01
2003.05.12
По поводу таймера...


14-34566
Scorpx
2003-04-17 19:31
2003.05.12
Обновление сайта!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский