Форум: "Система";
Текущий архив: 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.005 c