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

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

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

CreateEventW( NULL, FALSE, FALSE, L"Global\\CSAPP" );

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

Примечание.

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

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

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

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

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

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

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

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