Есть сервис, который работает как GUI-приложение. При старте из-под этого сервиса надо узнать, какой из пользователей его запустил и имперсонировать токеном этого пользователя поток интерфейса. Залогиненых пользователей может быть несколько (Fast User Switching в XP). Вопрос в том, какой из этих интерактивных пользователей сейчас активен, т.е. последним вошел в систему. Сервис выбран потому, что приложение является так же COM-сервером. Я почитал собщений на форуме, но явного указания как получить токен залогиненого пользователя не зная его пароля (т.е. не через токен запушенного пользователем шелла или др. приложения) так и не нашел. API, которая это делает в XP, WTSQueryUserToken, в WIN2k не существует. То, до чего я докопал, это LsaLogonUser, и что вроде бы используя ее которую и имея SE_TCB_ххх привилегию(у сервиса, запущенного под системным аккаунтом она есть, проверял) можно это сделать. Но все мои надежды рухнули, после прочтения в msdn описания параметра AuthenticationInformation этой функции, кажется это тот же LogonUser, и туда нужно запихивать пароль юзера, только в неявном виде. Т.е. нужно решить 2 проблемы:
1. узнать какой пользователь запустил сервис.
2. вытащить его токен.