На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Перезагрузка/выключение Windows. Как?
      Для выполнения перезагрузки/выключения предназначены функции ExitWindows/ExitWindowsEx

      ExitWindows:

      Описание:
       Function ExitWindows(Reserved: DWord; ReturnCode: Word): Bool;
       Иницииpует стандаpтную пpоцедуpу завеpшения pаботы с Windows. Все пpикладные задачи должны подтвеpдить завеpшение pаботы Windows. Вызывает функцию 4CH пpеpывания 21H DOS.

      Паpаметpы:
       Reserved: Установлен в нуль.
       ReturnCode: Значение, пеpедаваемое в DOS (в pегистpе AL).

      Возвpащаемое значение:
       Нуль, если одна или несколько задач отказываются завеpшить pаботу.

      Примеры использования:
       ExitWindows(EWX_LOGOFF,0); - завершение сеанса
       ExitWindows(EWX_SHUTDOWN,0); - выключение компьютера
       ExitWindows(EWX_REBOOT,0); - перезагрузка
       Флаги EWX_FORCE, EWX_POWEROFF и  EWX_FORCEIFHUNG могут комбинироваться к нужному действию.

      ExitWindowsEx:
      Функция ExitWindowsEx() представляет собой расширенный вариант ExitWindows().

      Описание:
       BOOL ExitWindowsEx( UINT uFlags, DWORD dwReserved, );
       Функция ExitWindowsEx перезагружает(restart) или выключает систему (shutdown), а также может завершить сессию для текущего пользователя(log off).

      Параметры:
       uFlags -- флаг завершения работы, может принимать следущие значения:
         EWX_LOGOFF завершает сессию текущего пользователя.
         EWX_POWEROFF выключает питание компьютера(компьютер должен поддерживать данную функцию).
         EWX_REBOOT перезагружает систему.
         EWX_SHUTDOWN завершает работу комьпьютера до того места, где он может быть безопасно выключен: сброшенны все файловые буферы на диск, завершает работу всех процессов.
       dwReserved --Зарезирвированно для последующих нужд, параметр игнорируется.

      Возвращаемое значение:
       Не ноль если всё прошло успешно

      Пример использования:
       ExitWindowsEx(EWX_SHUTDOWN,0);
       Остальные примеры смотри в описании первой функции.

      Вышеописанные примеры действительны только для w9x/Me.
      Дело в том, что, чтобы выполнить функциию в NT ОС, нужно получить права на выполнение этой функции. Сделать это можно через AdjustTokenPriviligies.
      С помощью нижеприведённой функции можно получить любую привелегию, в т.ч. и привеленгию SeShutdownPrivilege, которая нужна для разрешения функции ExitWindows(Ex)

      ExpandedWrap disabled
        Function SetPrivilege(aPrivilegeName: String; aEnabled: Boolean ): Boolean;
        Var TPPrev,
              TP: TTokenPrivileges;
              Token: THandle;
              dwRetLen: DWord;
        Begin
         Result:=False;
         OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, @Token );
         TP.PrivilegeCount:=1;
         IF LookupPrivilegeValue(nil,PChar(aPrivilegeName),TP.Privileges[0].LUID )) then
          Begin
           IF aEnabled then TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED
                       else  TP.Privileges[0].Attributes:=0;
           dwRetLen:= 0;
           Result:=AdjustTokenPrivileges(Token,False,TP,SizeOf(TPPrev),TPPrev,dwRetLen);
          End;
         CloseHandle(Token);
        End;


      Пример использования для среды NT:
       SetPrivilege('SeShutdownPrivilege',True);
       ExitWindowsEx(EWX_SHUTDOWN,0);

      Тема - элемент ЧАВО. Подготовлена by © Song
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0217 ]   [ 16 queries used ]   [ Generated: 27.04.24, 18:01 GMT ]