Создать процесс как пользователь после загрузки профиля пользователя

У меня есть служба, которая работает как система, я хочу создать новый процесс в каком-то пользовательском сеансе TS с привилегиями пользователя.

Я вызываю LogonUser, LoadUserProfile, CreateEnvironmentBlock, CreateProcessAsUser и запускаю процесс в пользовательском сеансе TS.

Процесс (cmd.exe) запускается в пользовательском сеансе TS, но когда я пытаюсь запустить приложение с графическим интерфейсом, я получаю следующее сообщение об ошибке:

Исключение EAccessViolation в модуле ntdll.dll по адресу 00022272.

Нарушение прав доступа по адресу 77D22272 в модуле ntdll.dll. Запись адреса 0000000C.

Я что-то пропустил?

Любая помощь будет принята с благодарностью!

Спасибо, Лиор


person user403103    schedule 27.07.2010    source источник


Ответы (1)


Посмотрите Запуск процесс в сеансе пользователя из службы. Основная проблема заключается в том, что вы должны начать процесс с другого сеанса TS. Таким образом, вам нужно переключить текущий сеанс относительно SetTokenInformation и TokenSessionId. Чтобы иметь возможность сделать это, вы должны включить привилегию SE_TCB_NAME.

Кроме того, вам необходимо изменить дескриптор безопасности объектов Desktop и Windows Station в отношении OpenWindowStation, OpenDesktop и SetUserObjectSecurity (см. http://msdn.microsoft.com/en-us/library/ms681928.aspx, http://msdn.microsoft.com/en-us/library/ms687107.aspx и http://support.microsoft.com/kb/165194)

person Oleg    schedule 03.08.2010