Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.031 c
14-1081264403
Mim1
2004-04-06 19:13
2004.05.02
Как закрыть обсуджение


3-1081161522
Smalik
2004-04-05 14:38
2004.05.02
Типы полей при работе с Access


14-1081694979
Piter
2004-04-11 18:49
2004.05.02
Quake2 написана под .NET? :)


3-1081268718
Dimedrol
2004-04-06 20:25
2004.05.02
FireBird ODBC export


1-1081940111
clover
2004-04-14 14:55
2004.05.02
ScrollBars в MDI Form





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский