<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=6362&amp;view=findpost&amp;p=70072</guid>
        <pubDate>Wed, 29 Jan 2003 03:39:57 +0000</pubDate>
        <title>Перезагрузка/выключение Windows. Как?</title>
        <link>https://forum.sources.ru/index.php?showtopic=6362&amp;view=findpost&amp;p=70072</link>
        <description><![CDATA[next: Для выполнения перезагрузки/выключения предназначены функции ExitWindows/ExitWindowsEx<br><br><strong class='tag-b'>ExitWindows</strong>:<br><br><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Описание:</span><br> &nbsp;Function ExitWindows(Reserved: DWord; ReturnCode: Word): Bool;<br> &nbsp;Иницииpует стандаpтную пpоцедуpу завеpшения pаботы с Windows. Все пpикладные задачи должны подтвеpдить завеpшение pаботы Windows. Вызывает функцию 4CH пpеpывания 21H DOS.<br><br><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Паpаметpы:</span><br>  Reserved: Установлен в нуль.<br>  ReturnCode: Значение, пеpедаваемое в DOS (в pегистpе AL).<br><br><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Возвpащаемое значение:</span><br>  Нуль, если одна или несколько задач отказываются завеpшить pаботу.<br><br><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Примеры использования:</span><br>  ExitWindows(EWX_LOGOFF,0); - завершение сеанса<br>  ExitWindows(EWX_SHUTDOWN,0); - выключение компьютера<br>  ExitWindows(EWX_REBOOT,0); - перезагрузка<br>  Флаги EWX_FORCE, EWX_POWEROFF и  EWX_FORCEIFHUNG могут комбинироваться к нужному действию.<br><br><strong class='tag-b'>ExitWindowsEx</strong>:<br>Функция ExitWindowsEx() представляет собой расширенный вариант ExitWindows().<br><br><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Описание:</span><br>  BOOL ExitWindowsEx( UINT uFlags, DWORD dwReserved, ); <br>  Функция ExitWindowsEx перезагружает(restart) или выключает систему (shutdown), а также может завершить сессию для текущего пользователя(log off). <br><br><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Параметры:</span><br>  uFlags -- флаг завершения работы, может принимать следущие значения:<br>    EWX_LOGOFF завершает сессию текущего пользователя.<br>    EWX_POWEROFF выключает питание компьютера(компьютер должен поддерживать данную функцию).<br>    EWX_REBOOT перезагружает систему. <br>    EWX_SHUTDOWN завершает работу комьпьютера до того места, где он может быть безопасно выключен: сброшенны все файловые буферы на диск, завершает работу всех процессов. <br>  dwReserved --Зарезирвированно для последующих нужд, параметр игнорируется. <br><br><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Возвращаемое значение:</span><br>  Не ноль если всё прошло успешно <br><br><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Пример использования:</span><br>  ExitWindowsEx(EWX_SHUTDOWN,0);<br>  Остальные примеры смотри в описании первой функции.<br><br>Вышеописанные примеры действительны только для w9x/Me.<br>Дело в том, что, чтобы выполнить функциию в NT ОС, нужно получить права на выполнение этой функции. Сделать это можно через AdjustTokenPriviligies.<br>С помощью нижеприведённой функции можно получить любую привелегию, в т.ч. и привеленгию <strong class='tag-b'>SeShutdownPrivilege</strong>, которая нужна для разрешения функции ExitWindows(Ex)<br><br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Function SetPrivilege(aPrivilegeName: String; aEnabled: Boolean ): Boolean; &#60;br&#62;Var TPPrev, &#60;br&#62;      TP: TTokenPrivileges; &#60;br&#62;      Token: THandle; &#60;br&#62;      dwRetLen: DWord; &#60;br&#62;Begin &#60;br&#62; Result:=False; &#60;br&#62; OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, @Token ); &#60;br&#62; TP.PrivilegeCount:=1; &#60;br&#62; IF LookupPrivilegeValue(nil,PChar(aPrivilegeName),TP.Privileges[0].LUID )) then &#60;br&#62;  Begin &#60;br&#62;   IF aEnabled then TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED &#60;br&#62;               else  TP.Privileges[0].Attributes:=0; &#60;br&#62;   dwRetLen:= 0; &#60;br&#62;   Result:=AdjustTokenPrivileges(Token,False,TP,SizeOf(TPPrev),TPPrev,dwRetLen); &#60;br&#62;  End; &#60;br&#62; CloseHandle(Token); &#60;br&#62;End;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br><br><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Пример использования для среды NT:</span><br>  SetPrivilege('SeShutdownPrivilege',True);<br>  ExitWindowsEx(EWX_SHUTDOWN,0);<br><br><span class="tag-color tag-color-named" data-value="green" style="color: green"><span class="tag-font" data-value="Arial" style="font-family:Arial"><span class='tag-size' data-value='8' style='font-size:8pt;'>Тема - элемент ЧАВО. Подготовлена by © Song</span></span></span>]]></description>
        <author>next</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	