Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.12;
Скачать: CL | DM;

Вниз

Выключение компа из-под 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
7-34621
Леша
2003-03-17 12:12
2003.05.12
Пипле! Есть есть идеи по поводу реализации Portmon у SYSInternals


1-34403
Бедный
2003-04-29 18:58
2003.05.12
создание 500000 картинок..или взгляды психа на жизнь...


1-34414
Spartak
2003-04-30 11:32
2003.05.12
Поиск строки в Listbox в разных регистрах и не с начала строки


3-34361
Silver_
2003-04-21 09:47
2003.05.12
ID только-что добавленой записи


14-34579
Goffman
2003-04-24 07:07
2003.05.12
Delphi не освобождает ресурсы?