Имена объектов
Именованные объекты предоставляют простой способ совместного использования дескрипторов объектов. После создания именованного события, мьютекса, семафора или таймера другие процессы могут использовать имя для вызова соответствующей функции (OpenEvent, OpenMutex, OpenSemaphoreили OpenWaitableTimer), чтобы открыть дескриптор для объекта. Сравнение имен учитывает регистр.
Имена событий, семафора, мьютекса, таймера ожидания, сопоставления файлов и объектов заданий используют одно и то же пространство имен. Если вы пытаетесь создать объект с помощью имени, используемого объектом другого типа, функция завершается ошибкой и GetLastError возвращает ERROR_INVALID_HANDLE. Поэтому при создании именованных объектов используйте уникальные имена и обязательно проверьте возвращаемые значения функции для ошибок повторяющихся имен.
При попытке создать объект с помощью имени, используемого объектом одного типа, функция успешно возвращает дескриптор существующему объекту и GetLastError возвращает ERROR_ALREADY_EXISTS. Например, если имя, указанное в вызове функции CreateMutexCreateMutex, соответствует имени существующего объекта мьютекса, функция возвращает дескриптор существующему объекту. В этом случае вызов CreateMutex эквивалентен вызову функции OpenMutex. Использование нескольких процессов CreateMutex для одного и того же мьютекса эквивалентно тому, что один процесс вызывает CreateMutex в то время как другие процессы вызывают OpenMutex, за исключением того, что он устраняет необходимость первого запуска процесса создания. Однако при использовании этого метода для объектов мьютекса ни один из вызывающих процессов не должен запрашивать немедленное владение мьютексом. Если несколько процессов запрашивают немедленное владение, можно спрогнозировать, какой процесс фактически получает начальное владение.
Среда служб терминалов имеет глобальное пространство имен для событий, семафоров, мьютексов, таймеров ожидания, объектов сопоставления файлов и объектов заданий. Кроме того, каждый сеанс клиента служб терминалов имеет собственное отдельное пространство имен для этих объектов. Клиентские процессы служб терминалов могут использовать имена объектов с префиксом Global\или Local\, чтобы явно создать объект в глобальном или пространстве имен сеанса. Дополнительные сведения см. в разделе пространства имен объектов ядра. Быстрое переключение пользователей реализуется с помощью сеансов служб терминалов (каждый пользователь входит в другой сеанс). Имена объектов ядра должны соответствовать рекомендациям, описанным для служб терминалов, чтобы приложения могли поддерживать несколько пользователей.
Объекты синхронизации можно создавать в частном пространстве имен. Дополнительные сведения см. в пространствах имен объектов.
Связанные разделы