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

Вниз

выключить компьютор Win2000   Найти похожие ветки 

 
DS   (2004-10-20 00:03) [0]

Пытаюсь выключить компьютор,администратор(в свойствах пользователя)
в Win2000
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);
не выключается
LookupPrivilegeValue и AdjustTokenPrivileges возращают True!

для проверки пробывал EWX_LOGOFF - выполняется,а выключение нет


 
lipskiy ©   (2004-10-20 00:10) [1]

Этот код рабочий:

procedure TFormShutDown.Off;

var
   hToken: THandle;
   tkp: TTokenPrivileges;
   ReturnLength: Cardinal;
begin

if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
 LookupPrivilegeValue(nil, "SeShutdownPrivilege", tkp.Privileges[0].Luid);
 tkp.PrivilegeCount:=1; // one privelege to set
 tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
 if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength) then
   ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF, 0);
end;

end;


 
Pop   (2004-10-20 11:00) [2]

Не компьютОр, а компьютер. Русский язык не менее важен любого языка программирования!


 
DS   (2004-10-20 17:13) [3]

Pop   (20.10.04 11:00) [2]
>Не компьютОр, а компьютер

э,ночь,буду иметь в виду!

Не работает!код! WIN2000 невыключается.
Накачал исходники ни один неработает
правда может в том,что это не компилится- не соотвествиие типов
if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength)

этот nil пришлось заменить пустой R
...0,R,ReturnLength)
где R: TTokenPrivileges;
nil,0 не компилится delphi4

эксперементы с SizeOf(prevst) или 0 в поле size ни к чему не привели,что я делаю не так


 
vertal ©   (2004-10-20 20:15) [4]

В моей 2000 винде и c компилятором из Delphi7 работает следующее:

Const
SE_SHUTDOWN_NAME="SeShutdownPrivilege";

{$B-}
Function ShutdownOrReboot(dwFlags:Cardinal):Boolean;
Var
 TokenHandle:THandle;
 NewState:TOKEN_PRIVILEGES;
 ReturnLength:DWORD;
Begin
if LongInt(GetVersion())>0 then
Begin
  NewState.PrivilegeCount:=1;
  NewState.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
  Result:=OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,TokenHandle)
    and LookupPrivilegeValue(Nil,SE_SHUTDOWN_NAME,NewState.Privileges[0].Luid)
    and AdjustTokenPrivileges(TokenHandle,False,NewState,0,Nil,ReturnLength)
    and ExitWindowsEx(dwFlags,0);
End
else
  Result:=ExitWindowsEx(dwFlags,0);
End;
Вызов:
ShutdownOrReboot(EWX_SHUTDOWN or EWX_FORCE or EWX_POWEROFF);




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

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

Наверх




Память: 0.48 MB
Время: 0.039 c
1-1101292981
Всезнайка
2004-11-24 13:43
2004.12.05
Переход на нужную страницу в CHM-хелпе


1-1101133232
ЛёхА
2004-11-22 17:20
2004.12.05
Скриптовой Язык


4-1098287307
korfu
2004-10-20 19:48
2004.12.05
передача строки в ActiveX-приложение


14-1100507751
gn
2004-11-15 11:35
2004.12.05
Шпионы среди нас


6-1095933458
Dennis S
2004-09-23 13:57
2004.12.05
Как прочесть с какой-либо определенной страницы в интернете