Как завершить сеанс работы или перезагрузить Windows NT

Советы » Windows » Как завершить сеанс работы или перезагрузить Windows NT

Для этого нам потребуются определённые привелегии:

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

; function

WinExit(iFlags: integer): boolean; // возможные флаги: // EWX_LOGOFF // EWX_REBOOT // EWX_SHUTDOWN begin

Result := True

; if

(SetPrivilege('SeShutdownPrivilege', true

)) then

begin

if

(not

ExitWindowsEx(iFlags, 0)) then

begin

Result := False

; end

; SetPrivilege('SeShutdownPrivilege', False

) end

else

begin

Result := False

; end

; end

;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com