Я хочу создать сервис.Этот сервис будет выполнять некоторую диагностику в сеансе текущего входа пользователя.Например, вызовите некоторые команды WMI.как вы знаете, когда вы подключаетесь к WMI в качестве службы, вы не можете видеть элементы (например, принтеры или что-то еще), относящиеся к сеансу пользователя
Итак, я начал свое исследование и обнаружил CreateProcessAsUser()
(потому что я нея не знаю пароль текущего пользователя, мне показалось, что он выполнит свою работу.)
Я успешно получил идентификатор активной сессии, получил токен из сеанса и дублированный сеанс и вызвал процесс как текущий пользователь входа в систему.Но проблема в том, что когда я вызываю другой exe-файл, он вызывается без повышенных прав.Я застрял на этом этапе.
Мои вопросы:
Можно ли вызвать другого exe-пользователя как пользователя, но с правами администратора?
Это правильный и современный подход к этой проблеме?Я имею в виду, я читал, некоторые люди предлагают создать 2 компонента.Одним из них является простое приложение, которое будет работать в пользовательском контексте, а другое - сервис.Эта служба и небольшое приложение будут взаимодействовать.
Если я решу перейти с 2, возможно ли запустить это небольшое приложение в контексте пользователя с правами администратора из службы?
РЕДАКТИРОВАТЬ:
Я думаю, что я близко, но немного запутался.Если я дублирую маркер, как я сказал, я получаю сеанс пользователя, но без прав администратора.Но вместо дубликата, если я получаю связанный токен (когда я читаю его токен администратора), я получаю его следующим образом
IntPtr adminToken = IntPtr.Zero;
uint TokenInfLength = 0;
GetTokenInformation(hToken,
TOKEN_INFORMATION_CLASS.TokenLinkedToken, adminToken,
TokenInfLength,out TokenInfLength);
мой процесс запускается от имени администратора, но не в контексте пользователя входа в систему, он работает как системный контекст, который я не вижупользовательские данные.Я не понимаю, как дать права на этот токен текущему пользователю