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

Вниз

ExitWindowsEx(...   Найти похожие ветки 

 
Коля   (2003-12-30 11:41) [0]

Мне нужна функция выключения компьютера под Win2000
В Win98 была ф. ExitWindows(EWX_POWEROFF, 0 );
но она лишь перезагружала. Есть также:
ExitWindowsEx(EWX_REBOOT,0);
ExitWindowsEx(EWX_POWEROFF,0);
но там нужны привелегии для Win2000.
 А вообще мне это нужно, т.к. на серваке (который под Win2000) монитор сел совсем и я хочу написать прогу, выключающую его с другого (рабочего) компа локальной сети. Может уже есть готовые программы или процедура. Подскажите пожалуйста..


 
Rik   (2003-12-30 13:37) [1]

AdjustTokenPrivileges?


 
Dimman1 ©   (2003-12-30 13:40) [2]

procedure TForm1.Shutdown;
var ph:THandle;
   tp,prevst:TTokenPrivileges;
   rl:DWORD;
begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,ph);
LookupPrivilegeValue(Nil,"SeShutdownPrivilege",tp.Privileges[0].Luid);
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=2;
AdjustTokenPrivileges(ph,FALSE,tp,SizeOf(prevst),prevst,rl);
ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF or EWX_FORCE,0);
end;


 
Коля   (2003-12-30 13:43) [3]

Я тут покопался ещё в интернете и нашёл модуль:

unit shutdown;
interface
 procedure ForceShutdownNT;
 procedure ForceRebootNT;
 procedure ForcePowerOffNT;
implementation
uses windows;
procedure error(msg : string);
begin
 MessageBox(0, @msg[1], "Error", MB_ICONERROR or MB_OK);
end;
function GetShutdownPriv : boolean;
var
 hToken : THandle;
 tkp : TTokenPrivileges;
 ReturnLength : DWORD;
begin
 // Get a token for this process.
 if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then begin
     error("OpenProcessToken");
     Result := false;
     exit;
 end;
 // Get the LUID for the shutdown privilege.
 LookupPrivilegeValue(nil, "SeShutdownPrivilege", 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, nil, ReturnLength);
 // Cannot test the return value of AdjustTokenPrivileges.
 if (GetLastError <> ERROR_SUCCESS) then begin
    error("AdjustTokenPrivileges");
    Result := false;
    exit;
 end;
 Result := true;
end;
procedure ForceShutdownNT;
begin
 if GetShutdownPriv then
   if (ExitWindowsEx(EWX_LOGOFF or EWX_FORCE, 0)) then error("ExitWindowsEx");
end;
procedure ForcePowerOffNT;
begin
 if GetShutdownPriv then
   if (ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0)) then error("ExitWindowsEx");
end;
procedure ForceRebootNT;
begin
 if GetShutdownPriv then
   if (ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0)) then error("ExitWindowsEx");
end;
end.


 
YuRock ©   (2003-12-30 13:45) [4]

> [2]
Да, но при чем здесь сервак? Ты же свой комп выключишь! Хотя, конечно, можно запустить эту прогу на удаленной машине.


 
YuRock ©   (2003-12-30 13:54) [5]

А вообще это делается так, как в [2], но вместо ExitWindowsEx() - InitiateSystemShutdown(), в которой первым параметром должно быть сетевое имя компа. Работает только на NT/2K/XP, причем если ты подлогинился к выключаемому компу с правами админа.


 
BestDen   (2004-02-09 23:28) [6]

Вставил я от [2] код, мой компилятор показывает следующую ошибку:
[Error] offer.pas(51): Ambiguous overloaded call to "AdjustTokenPrivileges"
Помогите решить проблемку... :)


 
DarkForest   (2004-02-17 00:37) [7]

Попробуй написать:
AdjustTokenPrivileges(ph,FALSE,tp,0,nil,rl);

В MSDN нарисовано так в примере кода выключения системы под WinXP.


 
Костя   (2004-02-21 09:41) [8]

Люди, вы не знаете что в XP вырубает комп,т.к. ExitWindowsEx что-то не работает...


 
DeadMeat ©   (2004-02-22 19:26) [9]


> [8] Костя   (21.02.04 09:41)


Нормально... Ты вообще читал что сверху написано...??



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

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
6-1077907167
ALeX.B.
2004-02-27 21:39
2004.04.25
Помогите! Нужен рабочий FTPServer!


1-1081146749
an-na2002
2004-04-05 10:32
2004.04.25
замена , на .


14-1080925674
SergP
2004-04-02 21:07
2004.04.25
Что за прикол такой?


14-1080594690
Andy BitOff
2004-03-30 01:11
2004.04.25
Asm --> Delphi


3-1080301555
gedd
2004-03-26 14:45
2004.04.25
Зашита базы Access