![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программная перезагрузка/выключение [D7, WinXP]
Graf © (2004-03-10 06:26:00)Привет всем!
Народ, объясните, как можно выполнить программную перезагрузку или выключение под WinXP. Почитал, что есть какие-то привилегии приложений и пр. но ничего конкретного в API нету. Подскажите, желательно с примерами.
Александр1 (2004-03-11 10:56:00) [1]Graf - Пожалуйста!
Graf (2004-03-11 05:58:00) [2]Спасибо!!!!!!!
Александр1 (2004-03-10 18:40:00) [3]К стати примеры по этому вопросу есть на этом сайте!!!
Александр1 (2004-03-10 18:39:00) [4]Выключение!!!!!!
procedure RebootSystem;
var
handle_: THandle;
n: DWORD;
luid: TLargeInteger;
priv: TOKEN_PRIVILEGES;
ver: TOSVERSIONINFO;
begin
ver.dwOSVersionInfoSize := Sizeof(ver);
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, handle_) then
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then
begin
priv.PrivilegeCount := 1;
priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
priv.Privileges[0].Luid := luid;
AdjustTokenPrivileges(handle_, false, priv, 0, nil, n);
end
else
writeln('Ошибка')
else
writeln('Ошибка ');
end
else
writeln('Ошибка ');
if not ExitWindowsEx(EWX_POWEROFF,1) then
writeln('Ошибка');
end;
Александр1 (2004-03-10 18:38:00) [5]Перезагрузка!!!!!!!! WinNT
procedure reboot2;
var hToken : THandle;
tkp : _TOKEN_PRIVILEGES;
DUMMY : PTokenPrivileges;
DummyRL : Cardinal;
begin
DUMMY:=nil;
if not OpenProcessToken(
GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
hToken
)
then raise TShutdownEx.Create('OpenProcessToken failed');
if (not LookupPrivilegeValue(nil, 'SeShutdownPrivilege' , tkp.Privileges[0].Luid))
then raise TShutdownEx.Create('LookupPrivilegeValue failed');
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := $0002; //SE_PRIVILEGE_ENABLED = $00002
AdjustTokenPrivileges(hToken, FALSE, tkp, 0, Dummy, DummyRL);
if (GetLastError() <> ERROR_SUCCESS) then
raise TShutdownEx.Create('AdjustTokenPrivileges failed');
if (not ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0)) then
raise TShutdownEx.Create('ExitWindowsEx failed');
end;
Игорь Шевченко (2004-03-10 11:26:00) [6]
> Только АПИ говорит, что надо установить токены привилегий,
> а где - фиг его знаить?
FAQ
Graf (2004-03-10 11:15:00) [7]Во-во, я уже это пробовал. Только АПИ говорит, что надо установить токены привилегий, а где - фиг его знаить?
Eagle-XK (2004-03-10 10:39:00) [8]Попробуй так:
if not ExitWindows(EX_RebootSystem, 0) then {ERROR};
ExitWindows(EX_RestartWindows, 0)
Аналогично и:
ExitWindowsEx(EWX_Logoff, 1)
ExitWindowsEx(EWX_Shutdown, 1)
ExitWindowsEx(EWX_Reboot, 1)
ExitWindowsEx(EWX_Force, 1)
ExitWindowsEx(EWX_Poweroff, 1)
ExitWindowsEx(EWX_Forceifhung, 1)