CreateProcessWithLogonW и Job

Тема в разделе "WASM.WIN32", создана пользователем dv66, 24 дек 2011.

  1. dv66

    dv66 New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2009
    Сообщения:
    8
    Есть следующая проблема.
    У нас есть приложение (А), работающее от обычного пользователя, оно запускает приложение (Б) с повышенными привилегиями (админ), которое, в свою очередь, может запускать несколько разных процессов уже без изменения привелегий (т.е. через CreateProcess), далее оно добавляет их в Job Object и следит за ними, и когда процессы заканчивают работу - выходит.
    Проблема в том, что добавление в Job Object перестаёт работать, как только мы запускаем приложение Б используя CreateProcessWithLogonW (а именно так оно запускается из приложения А). Если запустить его руками - то всё хорошо.
    Как я понял из обрывков статей - CreateProcessWithLogonW использует для имперсонации Secondary Logon и сам по себе создаёт анонимный джоб, что автоматически блокирует возможность добавить процесс в свой, и судя по всему, там ещё и лимиты стоят, которые не позволяют выполнить CreateProcess с флагом CREATE_BREAKAWAY_FROM_JOB. Т.е. что получается:
    A->CreateProcessWithLogonW( B );
    B->CreateProcess(CREATE_BREAKAWAY_FROM_JOB) возвращает ACCESS_DENIED

    Если просто сделать B->CreateProcess(), то последующий вызов B->AssignProcessToJobObject возвращает ACCESS_DENIED

    Собсно вопрос:
    Как можно это обойти? Т.е. получить возможность нормально создавать джобы в дочерних процессах, запущенных от имени.

    ЗЫ:
    Windows 7 x64, UAC Disabled