Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как обойти UAC для повышения привилегий приложения на Windows

Delphi , ОС и Железо , Windows

Обход UAC для повышения привилегий приложения на Windows

Операционная система Windows встроила в себя механизм контроля учетных записей пользователя (User Account Control, UAC), который требует подтверждения действий, выполняемых от имени администратора. Это стандартная практика безопасности, предотвращающая несанкционированное выполнение действий, которые могут навредить системе. Тем не менее, разработчики программного обеспечения, в том числе и приложений на Pascal/Delphi, могут столкнуться с необходимостью запуска некоторых функций своего приложения с повышенными привилегиями.

Проблема

При разработке приложения, например, криптографического, может возникнуть необходимость запуска определенных функций с правами администратора. Стандартный запуск приложения происходит с обычными правами пользователя, и для выполнения действий, требующих административных привилегий, необходимо использовать механизмы UAC.

Решение

Чтобы обойти UAC и повысить привилегии приложения, следует использовать новую функцию, которая будет выполнена отдельным процессом, для которого и будет запрошены административные привилегии. Это невозможно выполнить с существующим процессом, так как приложение получает свой токен при запуске и не может изменить его впоследствии.

Пример кода на Object Pascal (Delphi)

uses
  Winapi.Windows, ShellApi;

function IsAdmin: Boolean;
var
  TOKEN_ELEVATION_TYPE: Integer;
begin
  Result := False;
  if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, @TOKEN_INFORMATION) then
  try
    GetTokenInformation(TOKEN_INFORMATION, TOKEN_ELEVATION, @TOKEN_ELEVATION_TYPE, SizeOf(TOKEN_ELEVATION_TYPE), @TOKEN_INFORMATION_SIZE);
    Result := (TOKEN_ELEVATION_TYPE = TokenElevationTypeFull);
  finally
    CloseHandle(TOKEN_INFORMATION);
  end;
end;

procedure RequestAdminRights;
var
  ShellExecuteInfo: TShellExecuteInfo;
begin
  ZeroMemory(@ShellExecuteInfo, SizeOf(TShellExecuteInfo));
  ShellExecuteInfo.cbSize := SizeOf(ShellExecuteInfo);
  ShellExecuteInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_NO_UI;
  ShellExecuteInfo.hwnd := DesktopWindow;
  ShellExecuteInfo.lpVerb := 'runas';
  ShellExecuteInfo.lpFile := PChar(Application.ExeName);
  ShellExecuteEx(@ShellExecuteInfo);

  // Запускаем новый процесс с административными правами
  if ShellExecuteInfo.hProcess <> 0 then
  begin
    CloseHandle(ShellExecuteInfo.hProcess);
  end;
end;

begin
  if not IsAdmin then
    RequestAdminRights;
  // Основной код программы
end.

Комментарии к коду

Данный код представляет собой пример функции, которая проверяет, запущено ли приложение с административными правами, и если нет, то запрашивает их, используя механизм ShellExecute для запуска нового процесса с правами администратора. В результате будет отображено диалоговое окно UAC, которое потребуется подтвердить для продолжения работы с повышенными привилегиями.

Заключение

Важно понимать, что обход UAC может быть неприемлем с точки зрения политики безопасности. Убедитесь, что ваше приложение действительно требует повышенных привилегий для своей работы, и что пользователь осведомлен о необходимости предоставить эти привилегии. В случае разработки криптографического приложения, как описано в комментариях, повышение привилегий может быть критично для корректной работы программы, например, при доступе к защищенным областям диска или при выполнении операций, требующих специфических административных разрешений.

Создано по материалам из источника по ссылке.

Обход UAC для запуска приложения на Windows с повышенными привилегиями администратора.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 02:16:47/0.0033891201019287/0