Re: Запуск Outlook Express из сервиса (Win2000).
От: Alex Fedotov США  
Дата: 04.02.02 06:48
Оценка: 2 (1)
Здравствуйте Вячеслав Мишуров, Вы писали:

ВМ>Есть работающий сервис.

ВМ>В некоторый момент он выводит окно, одна из кнопок на котором
ВМ>запускает Outlook Express. Но запускается он для LocalAccount,
ВМ>а надо для залогиненого юзера. Как поступить ?

Надо каким-то образом заполучить токен текущего пользователя. Это можно сделать:

1) перечислив процессы и взяв токен, скажем, еxplorer.exe (более точно — процесса оболочки, зарегистрированного в системе), либо

2) иметь процесс, запускаемый в контексте пользователя (например, с помощью ключа реестра Run), который соединяется с сервисом посредством named pipe, COM или другого механизма, поддерживающего имперсонацию. В этот момент сервис может имперсонировать пользователя и получить его токен. Вспомогательный процесс может благополучно завершиться после этого.

Второй способ лучше, так как корректно работает в случае нескольких интерактивных сессий в Terminal services и XP Fast User Switching.

После того как токен получен, процесс OE создается функцией CreateProcessAsUser, причем в структуре STARTUPINFO необходимо не забыть указать lpDesktop как "winsta0\\default".

Для полной иллюзии создания интерактивного процесса, в CreateProcessAsUser нужно передать новый environment block и заполнить его переменными, исходя из списка переменных окружения пользователя:

HKEY_USERS\<user-sid>\Environment
HKEY_USERS\<user-sid>\Volatile Environment

Впрочем, я думаю, что для OE это не обязательно.
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.