Вопрос, поднятый пользователем, заключается в необходимости запуска процесса с пониженными привилегиями из приложения, запущенного с повышенными привилегиями в операционной системе Windows Vista. Это может быть актуально, например, для установщика, который должен иметь повышенные привилегии для выполнения своих задач, но при этом запускать некоторые подпроцессы с обычными правами пользователя.
Решение проблемы
Для решения этой задачи можно использовать функцию CreateProcessWithLogonW(), которая позволяет запустить процесс с указанными учетными данными. Также можно использовать функцию CreateProcessMediumIL(), которая позволяет запустить процесс с уровнем интеграции, соответствующим уровню интеграции процесса "Проводника" (Explorer).
Пример кода на Object Pascal (Delphi)
Для запуска процесса с пониженными привилегиями можно использовать следующий код:
uses
Winapi.Windows;
function CreateProcessMediumIL(lpApplicationName: PWChar; lpCommandLine: PWChar; ...): DWORD; // Остальная часть функции опущена для краткости
// Пример использования функции CreateProcessMediumIL
procedure RunNonElevatedApp(ApplicationName, CommandLine: string);
var
StartupInfo: TStartupInfoW;
ProcessInformation: TProcessInformation;
begin
ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_NORMAL;
CreateProcessMediumIL(PChar(ApplicationName), PChar(CommandLine), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInformation);
end;
begin
RunNonElevatedApp('C:\Windows\notepad.exe', '');
end;
Подтвержденный ответ
Использование функции CreateProcessMediumIL позволяет запустить процесс с уровнем интеграции "средний", что соответствует требованиям безопасности Windows Vista для запуска подпроцессов с пониженными привилегиями.
Альтернативный ответ
В дополнение к вышеуказанному методу, можно также использовать функцию CreateProcessWithTokenW, которая позволяет запустить процесс с учетными данными процесса "Проводника". Это может быть полезно, если требуется запустить процесс с привилегиями обычного пользователя рабочего стола.
Заключение
В данной статье был рассмотрен процесс запуска подпроцессов с пониженными привилегиями из приложения, запущенного с повышенными привилегиями в среде Windows Vista. Предоставленные примеры кода на Object Pascal (Delphi) демонстрируют, как это можно реализовать на практике.
Вопрос касается технологии запуска подпроцессов с пониженными привилегиями в среде Delphi 2007 под управлением Windows Vista.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS