Форум: "WinAPI";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Внизвыключить компьютор 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.036 c