- Может ли быть более 1 активных сеансов?
В состоянии WTSActive
может быть несколько сеансов одновременно, да. Они представляют сеансы с вошедшими в систему пользователями, как локальными (на физическом компьютере), так и удаленными. Тем не менее, только 1 локальный сеанс будет подключен к физической клавиатуре / мыши / монитору (KMM) за раз. Этот сеанс - это то, что вы видите на экране, и может или не может иметь пользователя, вошедшего в него. И локальный пользователь может переключаться между несколькими локальными сеансами или входить / выходить из них по желанию, что влияет на то, какой сеанс подключен к KMM в любой данный момент. Пользователи, которые находятся в удаленном режиме, будут входить в свои собственные сеансы, но эти сеансы никогда не будут присоединены к KMM.
Возможно ли не иметь активных сессий?
Да, если нет пользователей, вошедших в систему.
Существует ли сценарий, когда пользовательская система не сможет получить токен пользователя активного сеанса? (WTSQueryUserToken)
Да. Если в запрошенном сеансе нет пользователя, вошедшего в систему, WTSQueryUserToken()
завершится ошибкой, а GetLastError()
вернет ERROR_NO_TOKEN
. Кроме того, даже если вы запрашиваете удаленный сеанс, в котором зарегистрирован пользователь, WTSQueryUserToken()
может или не может дать сбой в зависимости от HOW , когда пользователь вошел в сеанс.
Если я перечисляю через сеансы, используя WTSEnumerateSessions, и мне не удалось найти активный сеанс, есть ли смысл использовать WTSGetActiveConsoleSessionId? или WTSGetActiveConsoleSessionId - это просто оболочка WTSEnumerateSessions?
WTSGetActiveConsoleSessionId()
возвращает сеанс, который в данный момент подключен к KMM. В этом сеансе может или не может войти в систему пользователя, но он все равно может отображать пользовательский интерфейс.