Поделиться через


Подключение процесса к оконной станции

Процесс автоматически устанавливает подключение к оконной станции и рабочему столу при первом вызове функции USER32 или GDI32 (кроме оконной станции и настольных функций). Система определяет оконную станцию, к которой подключается процесс, в соответствии со следующими правилами:

  1. Если процесс вызвал функцию SetProcessWindowStation , он подключается к оконной станции, указанной в этом вызове.
  2. Если процесс не вызвал SetProcessWindowStation, он подключается к оконной станции, унаследованной от родительского процесса.
  3. Если процесс не вызвал SetProcessWindowStation и не наследовал оконную станцию, система попытается открыть для MAXIMUM_ALLOWED доступ и подключиться к оконной станции следующим образом:
    • Если имя оконной станции было указано в элементе lpDesktop структуры STARTUPINFO , которая использовалась при создании процесса, процесс подключается к указанной оконной станции.
    • В противном случае, если процесс выполняется в сеансе входа интерактивного пользователя, процесс подключается к станции интерактивного окна.
    • Если процесс выполняется в сеансе неинтерактивного входа, имя станции окна формируется на основе идентификатора сеанса входа и предпринимается попытка открыть ее. Если операция открытия завершается сбоем, так как эта оконная станция не существует, система попытается создать оконную станцию и рабочий стол по умолчанию.

Оконную станцию, назначенную во время этого процесса подключения, невозможно закрыть путем вызова функции CloseWindowStation .

Когда процесс подключается к оконной станции, система выполняет поиск унаследованных дескрипторов в таблице дескрипторов процесса. Система использует первый дескриптор оконной станции, который она находит. Если требуется, чтобы дочерний процесс подключался к определенной унаследованной оконной станции, необходимо убедиться, что только нужный дескриптор помечен как наследуемый. Если дочерний процесс наследует несколько дескрипторов оконной станции, результаты подключения оконной станции не определены.

Обработчики оконной станции, которую система открывает при подключении процесса к оконной станции, не наследуются.

Подключение потока к рабочему столу