CB>Вот моя программа как parent запускает некую программу-процесс. CB>Как можно поменять desktop для дочернего процесса, если тот еще не успел насоздавать окошек? Как можно поменять профайл (пользователя под которым запущен процесс) для процесса? Как "на ходу" менять environment у процесса?
на ходу — очень врядли потому что:
1) desktop потока поменять невозможно, если поток имеет поставленные user32 хуки или созданные окна
2) профайл на ходу поменять — а смысл, если предположим процесс на запуске вычитывает настройки, создает какието объекты доступные тока своему юзеру — вы его просто поломаете, даже если поменяете его environment block и токен (что возможно если очень сильно захотеть)
А вот создать процесс на нужном десктопе с нужным профилем — стандартная операция.
Как много веселых ребят, и все делают велосипед...
Привет всем!
Задался тут вопросом интересным.
Довольно много в WinAPI описывается как вызовами изнутри программы пытаться что-то измениь — права доступа, десктоп и прочее.
А что можно изменить снаружи?
Вот моя программа как parent запускает некую программу-процесс.
Как можно поменять desktop для дочернего процесса, если тот еще не успел насоздавать окошек? Как можно поменять профайл (пользователя под которым запущен процесс) для процесса? Как "на ходу" менять environment у процесса?
Приходят в голову только откровенно хакерские методы, типа инжекта своей DLL, перехват каких-либо функций WinAPI для этого приложения и вызовы требуемой функциональности "изнутри" процесса, но это как-то.... "из пушки по воробьям" Неужели нет Каких-либо Zw* функций на этот счет?
K>Есть. Все системные вызовы оперируют хендлами (процесса, потока), требуется лишь правильные права доступа.
Хорошо. Давайте конкретно.
Есть GINA которая запускает некоторый сторонний процесс.
Запуск идет ДО логина пользователя.
После успешного логина необходимо изменить parent на запушенный explorer пользователя.
У gina.dll есть только, соответственно, HANDLE процесса и основного потока.
Здравствуйте, Crazy Blu, Вы писали:
CB>Приходят в голову только откровенно хакерские методы, типа инжекта своей DLL, перехват каких-либо функций WinAPI для этого приложения и вызовы требуемой функциональности "изнутри" процесса, но это как-то.... "из пушки по воробьям" Неужели нет Каких-либо Zw* функций на этот счет?
Добавлю, что на мой взгляд, инъекции — более правильный путь с точки зрения "не системного программиста". Т.е. Zw более хак чем инъекция.
Здравствуйте, Crazy Blu, Вы писали:
K>>Есть. Все системные вызовы оперируют хендлами (процесса, потока), требуется лишь правильные права доступа. CB>Хорошо. Давайте конкретно.
CB>Есть GINA которая запускает некоторый сторонний процесс. CB>Запуск идет ДО логина пользователя. CB>После успешного логина необходимо изменить parent на запушенный explorer пользователя.
CB>У gina.dll есть только, соответственно, HANDLE процесса и основного потока.
CB>Ваши предложения?
Я лишь ответил на вопрос о возможности подразумевая, что эти возможности не ограничены (разрешено все, что не запрещено).
По такому сценарию (сомнительному на мой взгляд) моим предложением будет заказать решение у профессионалов.