Избегать контроля учетных записей, но запуск процесса с повышенными правами с помощью службы Windows

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

Мне удалось запустить дочерний процесс как SYSTEM, используя WTSGetActiveConsoleSessionId(), найти системный процесс и продублировать его токен. Точно так же я могу запускать процесс без повышенных прав как обычный пользователь. Но мне нужно запустить процесс как обычный пользователь, но с повышенными привилегиями - чтобы мне не нужно было показывать UAC, а процесс запущен от имени соответствующего пользователя.

Я не пытаюсь обойти UAC - пользователь уже согласился на установку сервиса. Я пытаюсь смягчить неудобства. Я нашел похожий вопрос без ответа - но спросил снова в надежде получить ответ.

1 ответ

Решение

Если у вас есть отфильтрованный токен для интерактивного пользователя, например, полученный с помощью WTSQueryUserToken(), вы можете извлечь неотфильтрованный ("повышенный") токен с помощью функции GetTokenInformation с параметром TokenLinkedToken.

Другие вопросы по тегам