Форум: "Система";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизПрограммная перезагрузка/выключение Найти похожие ветки
← →
Graf (2004-03-10 06:26) [0]Привет всем!
Народ, объясните, как можно выполнить программную перезагрузку или выключение под WinXP. Почитал, что есть какие-то привилегии приложений и пр. но ничего конкретного в API нету. Подскажите, желательно с примерами.
← →
Eagle-XK © (2004-03-10 10:39) [1]Попробуй так:
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)
← →
Graf (2004-03-10 11:15) [2]Во-во, я уже это пробовал. Только АПИ говорит, что надо установить токены привилегий, а где - фиг его знаить?
← →
Игорь Шевченко © (2004-03-10 11:26) [3]
> Только АПИ говорит, что надо установить токены привилегий,
> а где - фиг его знаить?
FAQ
← →
Александр1 © (2004-03-10 18:38) [4]Перезагрузка!!!!!!!! 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;
← →
Александр1 © (2004-03-10 18:39) [5]Выключение!!!!!!
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:40) [6]К стати примеры по этому вопросу есть на этом сайте!!!
← →
Graf (2004-03-11 05:58) [7]Спасибо!!!!!!!
← →
Александр1 © (2004-03-11 10:56) [8]Graf - Пожалуйста!
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c