CreateProcessWithLogonW и вложенные Job
От: deva66 Украина  
Дата: 18.12.11 22:24
Оценка:
Всем привет,
есть такая проблема:
Невозможно привязать приложение к джобу

Подробности:
Приложение 1 запускает приложение 2 от другого пользователя используя CreateProcessWithLogonW.
Приложение 2 создаёт Job Object, запускает приложение 3 используя CreateProcess с флагами CREATE_SUSPENDED | CREATE_BREAKAWAY_FROM_JOB — второй флаг, чтобы избежать включения в джоб, который создаётся при выполнении CreateProcessWithLogonW.
После этого выполняется привязка приложения 3 к нашему Job Object.
Проблема в том, что если мы создаём процесс без флага CREATE_BREAKAWAY_FROM_JOB, то у нас происходит ошибка ACCESS_DENIED при попытке привязки процесса к джобу.
Если мы создаём с флагом, то у нас сама CreateProcess возвращает ACCESS_DENIED, т.е. видимо у job который управляет нашим 2 процессом запрещён побег.

Как можно избежать этих ошибок или убежать из джоба процесса 1? Добавление флага CREATE_BREAKAWAY_FROM_JOB к вызову CreateProcessWithLogonW ничего не даёт.
winapi c++
Re: CreateProcessWithLogonW и вложенные Job
От: Xsyst  
Дата: 22.05.12 08:17
Оценка:
Здравствуйте, deva66, Вы писали:

D>Всем привет,

D>есть такая проблема:
D>Невозможно привязать приложение к джобу

D>Подробности:

D>Приложение 1 запускает приложение 2 от другого пользователя используя CreateProcessWithLogonW.
D>Приложение 2 создаёт Job Object, запускает приложение 3 используя CreateProcess с флагами CREATE_SUSPENDED | CREATE_BREAKAWAY_FROM_JOB — второй флаг, чтобы избежать включения в джоб, который создаётся при выполнении CreateProcessWithLogonW.
D>После этого выполняется привязка приложения 3 к нашему Job Object.
D>Проблема в том, что если мы создаём процесс без флага CREATE_BREAKAWAY_FROM_JOB, то у нас происходит ошибка ACCESS_DENIED при попытке привязки процесса к джобу.
D>Если мы создаём с флагом, то у нас сама CreateProcess возвращает ACCESS_DENIED, т.е. видимо у job который управляет нашим 2 процессом запрещён побег.

D>Как можно избежать этих ошибок или убежать из джоба процесса 1? Добавление флага CREATE_BREAKAWAY_FROM_JOB к вызову CreateProcessWithLogonW ничего не даёт.


Таже самая проблема, но что интересно, при добавлении флага CREATE_BREAKAWAY_FROM_JOB сначала процесс №3 создавался вне Job Object процесса 2, но к сожалению только на девелоперской машине и то только до перезагрузки. я уж сначала подумал что все хорошо, но ошибся. Никто не знает решение проблемы? И как можно проверить, установлен ли в Job Object флаг JOB_OBJECT_LIMIT_BREAKAWAY_OK?
Re[2]: CreateProcessWithLogonW и вложенные Job
От: Xsyst  
Дата: 22.05.12 10:00
Оценка:
Отвечу сам себе, может кому тоже пригодиться! Решение проблемы в том, чтобы процесс 1 добавить в свой Job Object, созданный с флагом JOB_OBJECT_LIMIT_BREAKAWAY_OK, тогда CreateProcessWithLogonW не сможет включить его в свой job. После этого в процессе 2 выполняем CreateProcess с флагами CREATE_SUSPENDED | CREATE_BREAKAWAY_FROM_JOB — и процесс 3 у нас находиться вне задания, после чего назначаем ему задание, созданное в процессе 2!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.