Доброго времени суток. Есть необходимость на терминальных серверах запускать программу в чужой сессии и делать скрин рабочего стола определенного юзера. Все эти вопросы здесь неоднократно рассматривались с кучей примеров. Но у меня проблема немного в другом, чтобы запустить процесс в другой сессии или сделать скрин рабочего стола нужно иметь токен юзера над которым нам нужно проделывать все эти действия. Для того чтобы получить токен юзера необходимо иметь привилегию SE_TCB_NAME которая есть только у сервисов. Возможно ли как-то еще получить юзер токен не делая свой сервис?
А в какой процесс ты собрался получать токен пользователя? Если ты хочешь в процесс с правами обычного пользователя получить токен другого пользователя, то так нельзя.
К примеру запустить калькулятор в сессии другого пользователя и с его правами, т.е. как будто он сам запустил этот калькулятор. Моя учетка входит в группу администраторов но как понимаю этого мало чтобы получить токен другого юзера, а сервис не очень хочется делать чтобы заполучить заветную SE_TCB_NAME привилегию.
а если открыть процесс explorer.exe (например) другого пользователя и дёрнуть токен, или прав не хватит? у ProcessExplorer драйвер есть, может через него и получает.
В том-то и дело что у обычного приложения нет привилегии SE_TCB_NAME которая позволяет дергать токен. Попробовал запустить свою программу в нулевой сессии и уже из нулевой сессии запустить любое приложение в выбранной сессии все нормально проходит, но этот фокус прокатывает только потому что моя прога запущена от сервиса и имеет необходимые права. Ка бы теперь добиться этого в обычной терминальной сессии...
Немного покрутив привилегии и функцию OpenProcessToken удалось выдрать токен из чужого процесса (не системного), теперь вот в раздумьях к какому бы процессу цеплять динамически чтобы выдирать оттуда токен? winlogon не подходит т.к. к нему не могу добраться без привилегии SE_TCB_NAME.
В принципе тоже думал об этом, решение конечно же с этими токенами немного кривовато, но пока нет времени долго размышлять т.к. заказчик долго ждать не будет поэтому сделаю пока так и разберусь как все таки кашерно сделать получение токена. Была мысль запускать свою программу из сервиса, но работа программы от имени систем уж больно опасная штука для рядовых пользователей. P.S. Предложения и соображения по сабжу все еще принимаются, возможно кто-то серьезно ковырялся с этим вопросом и есть какие-то мысли в какую сторону нужно копать.
Странное получается, в ProcessExplorer вижу что функция OpenProcessToken тянет правильный токен, а внутри программы токен не правильный, сравнивал с результатом который выдает WTSQueryUserToken. Как такое может быть?