Пространства имен объектов ядра

Сервер служб удаленных рабочих столов имеет несколько пространств имен для следующих именованных объектов ядра: события, семафоры, мьютексы, таймеры ожидания, объекты сопоставления файлов и объекты заданий. Существует глобальное пространство имен, используемое в основном службами в клиентских и серверных приложениях. Кроме того, каждый сеанс клиента имеет отдельное пространство имен для этих объектов, например в Windows Vista.

Отдельные пространства имен сеанса клиента позволяют нескольким клиентам запускать одни и те же приложения, не мешая друг другу. Для процессов, запущенных в сеансе клиента, система по умолчанию использует пространство имен сеанса. Однако эти процессы могут использовать глобальное пространство имен, добавляя префикс Global\к имени объекта. Например, следующий код вызывает CreateEvent и создает объект события с именем CSAPP в глобальном пространстве имен:

Примечание

Глобальное пространство имен недоступно для приложений Магазина Windows.

 

CreateEvent( NULL, FALSE, FALSE, "Global\\CSAPP" );

Приложения-службы в среде служб удаленных рабочих столов по умолчанию используют глобальное пространство имен.

Нулевой сеанс используется только для размещения служб, и сеанс консоли отсутствует, в отличие от предыдущих версий Windows.

Глобальное пространство имен позволяет процессам в нескольких сеансах клиента взаимодействовать с приложением-службой. Например, клиентское или серверное приложение может использовать объект мьютекса для синхронизации. Серверный модуль может создать объект мьютекса в глобальном пространстве имен. Затем сеанс клиента может использовать префикс Global\, чтобы открыть объект мьютекса.

Кроме того, глобальное пространство имен используется для приложений, использующих именованные объекты, чтобы определить, что экземпляр приложения уже запущен в системе во всех сеансах. Этот именованный объект должен быть создан или открыт в глобальном пространстве имен, а не в пространстве имен для каждого сеанса. По умолчанию поддерживается более распространенный случай запуска приложения один раз в сеансе, так как именованный объект создается в пространстве имен сеанса.

Помимо префикса Global\, клиентские процессы могут использовать префикс "Local\" для явного создания объекта в пространстве имен сеанса. В этих ключевых словах учитывается регистр.

Префикс "Session\" зарезервирован для системного использования, и его не следует использовать в именах объектов ядра.

Быстрое переключение пользователей реализуется с помощью сеансов служб удаленных рабочих столов. Первый пользователь, который входит в систему, использует сеанс 1, следующий пользователь использует второй сеанс и т. д. Имена объектов ядра должны соответствовать рекомендациям для служб удаленных рабочих столов, чтобы приложения могли поддерживать нескольких пользователей.

Создание объекта сопоставления файлов в глобальном пространстве имен с помощью CreateFileMapping из сеанса, отличного от нулевого сеанса, является привилегированной операцией. По этой причине для приложения, работающего в произвольном сеансе сервера узла сеансов удаленных рабочих столов (узла сеансов удаленных рабочих столов), необходимо включить SeCreateGlobalPrivilege , чтобы успешно создать объект сопоставления файлов в глобальном пространстве имен. Привилегия проверка ограничена созданием объектов сопоставления файлов и не применяется к открытию существующих объектов. Например, если служба или система создает объект сопоставления файлов, любой процесс, выполняющийся в любом сеансе, может получить доступ к объекту сопоставления файлов при условии, что у пользователя есть необходимый доступ.