Делаю инжект из ядра в winlogon.exe до логина юзера, запускю оттуда процесс и делаю в него инжект, который и подргужает основную DLL. В итоге процесс наследует права, среду итд. от winlogon.exe и запускается под учетной записью SYSTEM. Однако когда логинится юзер под своей учетной записью мне необходимо переключить моему процессу доступ к среде учетной записи пользователя, чтобы среда процесса (десктоп, графическую подсистему, системные переменные итд.) была такой, как будто бы он был запущен под эккаунтом юзера. Частично я пониаю что задача лежит через SetThreadDesktop(), SetProcessWindowStation() но это не рещает проблему со средой переменных оболочки. И как отлавливать переключение пользователей? Предполагаю что описанную выше задачу встречают и рзработчики сервисов. Может кто-нибудь сталкивался с решением подобной задачи, или может есть уже какое-то готовое решение? Спасибо
Я в ужасе. Честно. Ну во-первых, если ты уже произвел такое кол-во действий, то что мешает тебе внедрить еще какую-нибудь левую библиотеку в пользовательский процесс? Будет тебе код с правами пользователя. Зачем тебе SetThreadDesktop(), SetProcessWindowStation()? Окошки перечислить хочешь? За авторизацию отвечает msgina.dll в уже "попорченном" тобой winlogon'е
У разработчиков служб как раз такой проблемы нет. Достаточно получить токен вошедшего пользователя через WTSQueryUserToken(), далее создать блок переменных через CreateEnvironmentBlock() и передать это всё в CreateProcessAsUser() - вуаля, окружение будет один-в-один как у пользователя.