Содержание материала

Вышеописанные примеры действительны только для w9x/Me.

Дело в том, что, чтобы выполнить функциию в NT ОС, нужно получить права на выполнение этой функции. Сделать это можно через AdjustTokenPriviligies.

С помощью нижеприведённой функции можно получить любую привелегию, в т.ч. и привеленгию SeShutdownPrivilege, которая нужна для разрешения функции ExitWindows(Ex)

 

Code:

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);

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить