Запустить приложение с правами администратора из службы в контексте текущего пользователя - PullRequest
0 голосов
/ 08 июня 2018

Я хочу создать сервис.Этот сервис будет выполнять некоторую диагностику в сеансе текущего входа пользователя.Например, вызовите некоторые команды WMI.как вы знаете, когда вы подключаетесь к WMI в качестве службы, вы не можете видеть элементы (например, принтеры или что-то еще), относящиеся к сеансу пользователя

Итак, я начал свое исследование и обнаружил CreateProcessAsUser() (потому что я нея не знаю пароль текущего пользователя, мне показалось, что он выполнит свою работу.)

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

Мои вопросы:

  1. Можно ли вызвать другого exe-пользователя как пользователя, но с правами администратора?

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

  3. Если я решу перейти с 2, возможно ли запустить это небольшое приложение в контексте пользователя с правами администратора из службы?

РЕДАКТИРОВАТЬ:

Я думаю, что я близко, но немного запутался.Если я дублирую маркер, как я сказал, я получаю сеанс пользователя, но без прав администратора.Но вместо дубликата, если я получаю связанный токен (когда я читаю его токен администратора), я получаю его следующим образом

 IntPtr adminToken = IntPtr.Zero;
 uint TokenInfLength = 0;
 GetTokenInformation(hToken, 
 TOKEN_INFORMATION_CLASS.TokenLinkedToken, adminToken, 
 TokenInfLength,out TokenInfLength);

мой процесс запускается от имени администратора, но не в контексте пользователя входа в систему, он работает как системный контекст, который я не вижупользовательские данные.Я не понимаю, как дать права на этот токен текущему пользователю

1 Ответ

0 голосов
/ 08 июня 2018

возможно, т. Е. Вы можете использовать функцию DuplicateToken и затем CreateProcessAsUser с дублированным токеном и повышенными привилегиями.

Для работы в режиме обслуживания эти функции требуют некоторых измененийв локальной политике

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...