Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.013 c
3-94772
Skalp
2003-05-08 12:47
2003.05.29
Организационная структура БД


1-94803
lexusU
2003-05-17 17:25
2003.05.29
Как написать DLL ? (пример будет очень кстати)


14-95013
Dmitriy O.
2003-05-08 14:41
2003.05.29
ИМХО :) =)) и прочее


3-94711
Фагот
2003-05-07 12:01
2003.05.29
IBExpert


1-94818
Hooch
2003-05-19 13:15
2003.05.29
---|Ветка была без названия|---





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский