Здравствуйте, Cavaler, Вы писали:
C>Задача: при логине пользователя сервис должен запустить некий процесс с его привилегиями.
C>1a. Как, собственно, сервис может отловить этот момент? В том числе и для случая Terminal Services или нескольких пользователей для WinXP?
Самый корректный способ, имхо использовать Winlogon Notification Package — в соответствующей процедуре просто бросать event, а в сервисе его ждать. Для того, чтобы работало на Terminal Services, имя event должно начинаться с префикса 'Global\'.
C>1b. Соответственно, если сервис зпускается уже при залогиненном пользователе, надо как-то его (их) идентифицировать.
GetUserName()
C>2. Как запустить процесс от имени залогиневшегося юзера? Если у того уже запущены какие-то процессы, то последовательность OpenProcess(какой-нибудьтам) + OpenProcessToken() + CreateProcessAsUser() решает проблему, но при приходе какой-нибудь там нотификации может еще ни шелл, ничего другого не быть запущенным...
хм, вот тут не очень понял. Если нотификация о лигоне пришла, то пользователь уже залогинен. При чем тут шелл неясно...