Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перезагрузка в WinNT (Убивает процессы)

Delphi , ОС и Железо , Компьютер



Автор: DeMoN-777
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Зависимости: Windows
Автор:       DeMoN-777, DeMoN-777@yandex.ru, Санкт-Петербург
Copyright:   @
Дата:        21 июня 2002 г.
***************************************************** }

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;

Программа на языке Delphi, которая перезапускает операционную систему Windows NT, эффективно останавливая все запущенные процессы.

Вот разбивка того, что код делает:

  1. Он определяет несколько переменных:
    • hToken: Обратный handle к токену (множеству привилегий) для текущего процесса.
    • tkp: Структура _TOKEN_ PRIVILEGES, представляющая привилегии для токена.
    • DUMMY: Указатель на структуру PTokenPrivileges, используемую как дымовая переменная.
    • DummyRL: Целочисленная переменная, используемая для хранения результата функции AdjustTokenPrivileges.
  2. Программа открывает токен процесса с помощью OpenProcessToken, указывая текущий процесс и запрашивая оба запросы и изменения привилегий. Если это не удается, она выбрасывает исключение.
  3. Она находит значение привилегии 'SeShutdownPrivilege' с помощью LookupPrivilegeValue. Если это не удается, она также выбрасывает исключение.
  4. Программа изменяет привилегии токена с помощью AdjustTokenPrivileges, включая привилегию 'SeShutdownPrivilege'. Если это не удается, она выбрасывает исключение снова.
  5. Наконец, она вызывает ExitWindowsEx с флагами EWX_ REBOOT и EWX_FORCE, которые перезапускают систему немедленно.

Программа использует несколько исключений (TShutdownEx) для обработки потенциальных ошибок при выполнении. Эти исключения выбрасываются, если какие-либо из функций API не удается.

Обратите внимание, что это код специфичен для Windows NT и может не работать на более поздних версиях Windows, таких как Windows XP или новее.

В качестве альтернативного решения можно использовать процедуру System.Reboot в Delphi, которая перезапускает систему без необходимости явного изменения привилегий. Однако это может иметь разное поведение в зависимости от версии и конфигурации Windows.

Процедура reboot2 в WinNT выполняет перезагрузку системы, убивая все процессы и необходимые привилегии для выполнения этой операции.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компьютер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-11 20:03:51/0.0079610347747803/1