#c #windows #service #sessionid #createprocessasuser
#c #Windows #Обслуживание #идентификатор сеанса #createprocessasuser
Вопрос:
У меня есть системная служба Windows, которой необходимо запустить новый процесс в контексте вошедшего в систему пользователя. Наряду с этим мне нужно создать задание для нового процесса с определенными ограничениями.
Я извлекаю токен процесса explorer.exe и дублирование его для создания основного токена. Я использую этот токен CreateProcessAsUser
для создания нового процесса, запущенного в контексте пользователя с ненулевым идентификатором сеанса. Когда я назначаю задание этому процессу, AssignProcessToJobObject
функция завершается с ошибкой отказа в доступе. В частности, я не могу установить JOBOBJECT_BASIC_UI_RESTRICTIONS
ограничения ( JOBOBJECT_EXTENDED_LIMIT_INFORMATION
хотя и работает).
Процесс создается как приостановленный, и после назначения задания я возобновляю поток.
Когда я использую токен текущего процесса (т.Е. СИСТЕМНОЙ службы с идентификатором сеанса 0) вместо explorer.exe , все работает нормально.
Я тестирую это в Windows 10
Комментарии:
1. идентификатор сеанса процесса (который берется из вашего токена) должен быть равен идентификатору сеанса задания . ваше
Job->SessionId
значение равно 0, но процесс не имеет 0.2. и из документации Все процессы в задании должны выполняться в том же сеансе, что и задание