Присвоение JobObject процессу с ненулевым идентификатором сеанса, запущенному из СИСТЕМНОЙ службы

#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. и из документации Все процессы в задании должны выполняться в том же сеансе, что и задание