Главная страница
    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.035 c
3-1081260780
Black Krok
2004-04-06 18:13
2004.05.02
Как остановить Oracle?


1-1081915858
alexprozorov
2004-04-14 08:10
2004.05.02
Как узнать какие функции есть в DLL ?


1-1082094458
Solik
2004-04-16 09:47
2004.05.02
GUI+Console


14-1081455993
_Sh_
2004-04-09 00:26
2004.05.02
Помогите с CLX-компонентами


3-1080873973
Angel_Forever
2004-04-02 06:46
2004.05.02
Преполнение стека





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