Главная страница
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
3-34343
mihei
2003-04-22 11:23
2003.05.12
подскажите как добавить в DBGridEh1 число или строку


3-34368
AERO
2003-04-18 17:34
2003.05.12
Как в цикле создавать поля в новой таблице?


3-34336
neXt
2003-04-21 17:54
2003.05.12
Ошибка в BDE


3-34365
Ann
2003-04-22 15:22
2003.05.12
date


8-34517
Blastoderm
2003-01-22 14:45
2003.05.12
TAnimate->OnClick ?