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

Power off (не убивает процессы)

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

Power off (не убивает процессы)

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

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Power off (не убивает процессы)

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

procedure ExitWinNT(AShutdown: Boolean);
var
  hToken: THandle;
  tkp: TTokenPrivileges;
  ReturnLength, What: Cardinal;
begin
  if AShutdown then
    What := EWX_SHUTDOWN or EWX_POWEROFF
  else
    What := EWX_REBOOT;
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
    TOKEN_QUERY, hToken) then
  begin
    LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
    tkp.PrivilegeCount := 1;
    tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength) then
      ExitWindowsEx(What, 0)
  end
end;

Пример использования:

ExitWinNT(True); 

Это код-snippet на Delphi, который позволяет отключить или перезапустить Windows-систему без прерывания процессов. Он использует функцию ExitWindowsEx из Windows API, которая позволяет системе быть отключенной в контролируемом режиме.

Процедура ExitWinNT принимает булевый параметр AShutdown, который определяет, выполняться ли shut down или перезапуск. Если AShutdown равен True, система будет выключена; иначе, она будет перезапущена.

Распределение кода:

  1. Функция OpenProcessToken используется для открытия токена, связанного с текущим процессом.
  2. Функция LookupPrivilegeValue используется для получения LUID (Locally Unique Identifier) для привилегии 'SeShutdownPrivilege', которая необходима для отключения или перезапуска системы.
  3. Функция AdjustTokenPrivileges используется для включения привилегии 'SeShutdownPrivilege' для текущего процесса.
  4. Если изменение привилегий успешно, функция ExitWindowsEx вызывается с указанным типом shut down (отключение, перезапуск или выключение) и необязательным значением таймаута.

Код также включает в себя пример использования: ExitWinNT(True);, который бы отключил систему без прерывания процессов.

Обратите внимание, что этот код требует административных привилегий для успешного выполнения. Кроме того, важно быть осторожным при использовании этого кода, так как отключение или перезапуск системы может иметь неожиданные последствия.

В статье описывается процедура ExitWinNT для остановки компьютера на Windows, которая не убивает процессы и позволяет выбрать тип завершения (shutdown, power off или рестарт).


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:37:07/0.0036520957946777/0