Карта сайта 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 NTWait;
var
  hToken: THandle;
  tkp: TTokenPrivileges;
  ReturnLength: Cardinal;
begin
  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
      SetSystemPowerState(true, true);
  end;
end;

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

  1. Программа начинает с объявления нескольких переменных:
    • hToken: обрабатываемый handle для объекта токена
    • tkp: экземпляр класса TTokenPrivileges (класс Delphi, представляющий права токена)
    • ReturnLength: целочисленная переменная, используемая для хранения возвращаемого значения функции AdjustTokenPrivileges
  2. Программа затем проверяет, может ли она открыть токен процесса для текущего процесса с помощью функции OpenProcessToken. Если успешно, то продолжает выполнение следующих шагов.
  3. Она ищет привилегию 'SeShutdownPrivilege' с помощью функции LookupPrivilegeValue и хранит ее LUID (Локальный уникальный идентификатор) в tkp.Privileges[0].Luid.
  4. Программа устанавливает свойство PrivilegeCount класса TTokenPrivileges в 1, указывая, что только одна привилегия изменяется.
  5. Она устанавливает свойство Attributes класса tkp.Privileges[0] в SE_PRIVILEGE_ENABLED, включая привилегию 'SeShutdownPrivilege' для текущего процесса.
  6. Программа затем вызывает функцию AdjustTokenPrivileges с модифицированными правами токена и хранит ее возвращаемое значение в ReturnLength. Если успешно, то продолжает выполнение следующих шагов.
  7. Наконец, программа вызывает функцию SetSystemPowerState, чтобы перейти систему в режим ожидания.

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

В качестве альтернативного решения, если вы ищете способ перейти систему в режим ожидания под Windows NT без изменения привилегий, вам может помочь использовать функцию CreateProcess с флагом CREATE_СUSPENDED или функцию SuspendThread. Эти подходы могут достичь аналогичного результата без необходимости изменять привилегии.

Вот пример использования CreateProcess для перехода системы в режим ожидания:

procedure NTWait;
var
  hProcess: THandle;
begin
  CreateProcess(nil, nil, nil, nil, False, CREATE_СUSPENDED, nil, nil, hProcess);
  SuspendThread(hProcess);
end;

В этом коде создается новый процесс с флагом CREATE_СUSPENDED, который помещает процесс в состояние ожидания. Затем функция SuspendThread используется для приостановки потока нового процесса. Это может эффективно перейти систему в режим ожидания.

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

В статье описывается процедура NTWait, которая позволяет перейти в ждущий режим на операционной системе 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 19:54:07/0.0061030387878418/0