Карта сайта 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 reboot;
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, 0)) then
    raise TShutdownEx.Create('ExitWindowsEx failed');
end;

Программный код на Delphi, который реализует функцию перезапуска системы в Windows NT без остановки процессов. Вот подробное описание кода:

Переменные и константы

  • hToken: обрабатываемый handle для токена текущего процесса
  • tkp: экземпляр структуры _TOKEN_, представляющей структуру привилегий токена
  • DUMMY: указатель на запись PTokenPrivileges, инициализированный в nil
  • DummyRL: кардинальная переменная, используемая как дымовая зона

Функциональность

Код определяет процедуру reboot, которая выполняет следующие шаги:

  1. Открывает токен процесса для текущего процесса с помощью OpenProcessToken. Если это не удается, то возникает исключение.
  2. Ищет привилегию 'SeShutdownPrivilege' с помощью LookupPrivilegeValue. Если это не удается, то возникает исключение.
  3. Устанавливает структуру tkp, чтобы включить привилегию 'SeShutdownPrivilege' (SE_PRIVILEGE_ENABLED = $00002).
  4. Активирует привилегии токена с помощью AdjustTokenPrivileges. Если это не удается, то возникает исключение.
  5. Вызывает функцию ExitWindowsEx с флагом EWX_REBOOT, чтобы инициировать перезапуск системы. Если это не удается, то возникает исключение.

Обработка ошибок

Код использует исключения для обработки ошибок, которые могут возникнуть при выполнении кода. В частности:

  • TShutdownEx - это пользовательский тип исключения, используемый для обёртывания сообщений ошибках, связанных с операциями перезапуска.
  • Стatement raise TShutdownEx.Create('...') создает экземпляр исключения TShutdownEx и устанавливает его сообщение в указанную строку.

Замечания

  • Этот код требует Windows NT или более поздних версий, потому что он зависит от функции ExitWindowsEx.
  • Привилегия 'SeShutdownPrivilege' необходима для выполнения операции перезапуска системы. Без этой привилегии операция перезапуска будет провалена.
  • Использование исключений обеспечивает robust ошибку, но код мог быть улучшен, предоставляя более подробные сообщения об ошибках или механизмы журналирования.

В целом, этот код демонстрирует, как реализовать функцию перезапуска системы в Windows NT без остановки процессов, а также подчеркивает важность хорошей практики обработки ошибок и управления исключениями.

Курсор на пример кода на Delphi для перезагрузки компьютера в Windows NT без остановки процессов.


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

Получайте свежие новости и обновления по 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:47:39/0.0081439018249512/1