Я пишу приложение-службу, которое должно перечислять все текущие сеансы пользователей и получать их идентификаторы сеансов, а затем посмотреть, какие процессы выполняются для какого сеанса. Я использую WTSEnumerateSessions()
API, а также WTSQuerySessionInformation()
для получения информации о сеансе. К сожалению, эти WTS API очень ненадежны.
На компьютере с Windows XP с отключенным быстрым переключением пользователей или на компьютере с XP, подключенным к домену, эти API-интерфейсы не доступны сразу. Они могут не работать с кодом ошибки RPC_S_INVALID_BINDING
или 1702 в течение нескольких минут после загрузки Windows XP и запуска моей службы.
Я не смог найти никакой официальной документации, объясняющей, как справиться с таким ограничением. Единственный доступный через поисковик - это дождаться загрузки службы терминалов, что, конечно, возможно, но становится болью ОСНОВНОЙ в реализации **.
Так что, если бы кто-то мог ответить на следующее, я был бы признателен:
- Существуют ли альтернативные API для работы с данными, относящимися к сеансу, которые являются более надежными, чем эти WTS? Мне в основном нужно видеть текущие сеансы на компьютере, получать имя пользователя и статус сеанса. Также перечислите процессы с идентификаторами сеансов для каждого процесса. (Я знаю, что это возможно, поскольку GINA или экран входа в систему могут проделать все это до загрузки служб терминалов.)
- Существует ли 100% гарантия того, что API-интерфейсы класса WTS (такие как
WTSEnumerateSessions()
, WTSQuerySessionInformation()
и WTSEnumerateProcesses()
) будут загружаться до , когда мой сервис запускается на любой версия машины с Windows Vista / Windows 7?
Обратите внимание на и любые условия, которые ОЧЕНЬ важны.