Форум: "Система";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
ВнизКак перезагрузить компьютер? Найти похожие ветки
← →
Puzzle (2003-03-31 15:36) [0]Мастера, подскажите как перезагрузить комп? Пробую использовать
ExitWindowsEx(EWX_REBOOT, 0)
, но перезагрузки почему-то не происходит, максимум закрытие некоторых открытых программ. Мне нужна перезагрузка не зависимо от того, что сейчас работает.
← →
Intell (2003-03-31 15:39) [1]procedure TForm1.Button1Click(Sender: TObject);
var
handle, ph: THandle;
pid, n: DWORD;
luid: TLargeInteger;
priv: TOKEN_PRIVILEGES;
dummy: PTokenPrivileges;
ver: TOSVERSIONINFO;
begin
close;
ver.dwOSVersionInfoSize := Sizeof(ver);
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then begin
pid := GetCurrentProcessId;
if OpenProcessToken(ph, 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;
dummy := nil;
AdjustTokenPrivileges(handle, false, priv, 0, dummy^, n);
end;
end;
ExitWindowsEx(EWX_REBOOT, 0);
end;
Не особо пробовал под WinNT и выше, но под 9X пашет.
← →
Puzzle (2003-03-31 15:59) [2]НЕ РАБОТАЕТ!
Какие еще будут предложения, друзья?
← →
Puzzle (2003-03-31 16:27) [3]Сам нашел, кому интересно:
Procedure RebootWindows;
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 ShowError("OpenProcessToken failed");
if Not LookupPrivilegeValue(nil, "SeShutdownPrivilege" , tkp.Privileges[0].Luid) then ShowError("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 ShowError("AdjustTokenPrivileges failed");
if Not ExitWindowsEx(EWX_REBOOT, 0) then ShowError("ExitWindowsEx failed");
End; {- RebootWindows -}
← →
gss (2003-03-31 18:34) [4]...
var
err : integer;
hp,ht : cardinal;
tp : TOKEN_PRIVILEGES;
c1,c2 : Cardinal;
begin
hp := GetCurrentProcess;//Взяли хендл текущего процесса
if not OpenProcessToken(hp,TOKEN_WRITE,ht)//открыли токен процесса
then
begin
err := GetLastError;
messagebox(0,Pchar(IntToStr(err)),"Error",mb_OK);
end;
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if not LookupPrivilegeValue(nil,"SeShutdownPrivilege",tp.Privileges[0].Luid) //Занесли в привилегии возможность для процесса управлять выключением и питанием
then
begin
err := GetLastError;
messagebox(0,Pchar(IntToStr(err)),"Error",mb_OK);
end;
c1 := SizeOf(tp);
if not AdjustTokenPrivileges(ht,False,tp,c1,nil,c2) //установили привилегию управления питанием для процесса
then
begin
err := GetLastError;
messagebox(0,Pchar(IntToStr(err)),"Error",mb_OK);
end;
ExitWindowsEx( EWX_FORCE + EWX_REBOOT,0);// (1) Перегружаем. EWX_FORCE - выполнить при любых условиях.
end;
Этот фрагмент не проверялся на перезагрузку, но с другим параметром работал на выключение и с другой функцией (1) - на усыпление компа под Win2k.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c