Windows вопросов сессий - PullRequest
       9

Windows вопросов сессий

0 голосов
/ 16 апреля 2020

Я разрабатываю приложение (AppRunner), которое выполняет другое приложение (APP) с помощью консоли, вошедшей в токен пользователя (CreateProcessAsUser). AppRunner должен иметь возможность выполнять APP из любой комбинации сеанса / пользователя, включая сеанс 0 + System или сеанс / имя пользователя стандартного пользователя.

Поскольку эта топи c является новой для меня, у меня есть несколько вопросов о сессиях, на которые я не нашел ответов после поиска в Google:
1. Может ли быть более 1 активных сессий?
2. Возможно ли не иметь активных сессий?
3. Существует ли сценарий, когда пользовательская система не сможет получить токен пользователя активного сеанса? (WTSQueryUserToken)
4. Если я перечисляю по сеансам, используя WTSEnumerateSessions, и мне не удалось найти активный сеанс, есть ли смысл использовать WTSGetActiveConsoleSessionId? или WTSGetActiveConsoleSessionId - это просто оболочка WTSEnumerateSessions?

Большое спасибо!

1 Ответ

1 голос
/ 16 апреля 2020
  1. Может ли быть более 1 активных сеансов?

В состоянии WTSActive может быть несколько сеансов одновременно, да. Они представляют сеансы с вошедшими в систему пользователями, как локальными (на физическом компьютере), так и удаленными. Тем не менее, только 1 локальный сеанс будет подключен к физической клавиатуре / мыши / монитору (KMM) за раз. Этот сеанс - это то, что вы видите на экране, и может или не может иметь пользователя, вошедшего в него. И локальный пользователь может переключаться между несколькими локальными сеансами или входить / выходить из них по желанию, что влияет на то, какой сеанс подключен к KMM в любой данный момент. Пользователи, которые находятся в удаленном режиме, будут входить в свои собственные сеансы, но эти сеансы никогда не будут присоединены к KMM.

Возможно ли не иметь активных сессий?

Да, если нет пользователей, вошедших в систему.

Существует ли сценарий, когда пользовательская система не сможет получить токен пользователя активного сеанса? (WTSQueryUserToken)

Да. Если в запрошенном сеансе нет пользователя, вошедшего в систему, WTSQueryUserToken() завершится ошибкой, а GetLastError() вернет ERROR_NO_TOKEN. Кроме того, даже если вы запрашиваете удаленный сеанс, в котором зарегистрирован пользователь, WTSQueryUserToken() может или не может дать сбой в зависимости от HOW , когда пользователь вошел в сеанс.

Если я перечисляю через сеансы, используя WTSEnumerateSessions, и мне не удалось найти активный сеанс, есть ли смысл использовать WTSGetActiveConsoleSessionId? или WTSGetActiveConsoleSessionId - это просто оболочка WTSEnumerateSessions?

WTSGetActiveConsoleSessionId() возвращает сеанс, который в данный момент подключен к KMM. В этом сеансе может или не может войти в систему пользователя, но он все равно может отображать пользовательский интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...