Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.133.228] |
|
Сообщ.
#1
,
|
|
|
Для выполнения перезагрузки/выключения предназначены функции 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) 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 |