Прочитать на английском

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


Имена объектов

Именованные объекты предоставляют простой способ совместного использования дескрипторов объектов процессами. После создания процесса именованного объекта event, мьютекса, семафора или таймера другие процессы могут использовать имя для вызова соответствующей функции ( OpenEvent, OpenMutex, OpenSemaphore или OpenWaitableTimer), чтобы открыть дескриптор для объекта . Сравнение имен учитывает регистр.

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

При попытке создать объект, используя имя, используемое объектом того же типа, функция завершается успешно, возвращая дескриптор существующему объекту, а GetLastError возвращает ERROR_ALREADY_EXISTS. Например, если имя, указанное в вызове функции CreateMutex , совпадает с именем существующего объекта мьютекса, функция возвращает дескриптор существующему объекту. В этом случае вызов CreateMutex эквивалентен вызову функции OpenMutex . Поэтому наличие нескольких процессов, использующих CreateMutex для одного мьютекса, эквивалентно тому, что один процесс вызывает CreateMutex , а другие процессы вызывают OpenMutex, за исключением того, что он устраняет необходимость в том, чтобы процесс создания был запущен первым. Однако при использовании этого метода для объектов мьютекса ни один из вызывающих процессов не должен запрашивать немедленное владение мьютексом. Если несколько процессов запрашивают немедленное владение, может быть трудно предсказать, какой процесс фактически получает начальное владение.

Среда служб терминалов имеет глобальное пространство имен для событий, семафоров, мьютексов, таймеров для ожидания, объектов сопоставления файлов и объектов заданий. Кроме того, каждый сеанс клиента служб терминалов имеет собственное отдельное пространство имен для этих объектов. Клиентские процессы служб терминалов могут использовать имена объектов с префиксом "Global\" или "Local\" для явного создания объекта в глобальном пространстве имен или пространстве имен сеанса. Дополнительные сведения см. в разделе Пространства имен объектов ядра. Быстрое переключение пользователей реализуется с помощью сеансов служб терминалов (каждый пользователь входит в отдельный сеанс). Имена объектов ядра должны соответствовать рекомендациям, описанным для служб терминалов, чтобы приложения могли поддерживать нескольких пользователей.

Объекты синхронизации можно создавать в частном пространстве имен. Дополнительные сведения см. в разделе Пространства имен объектов.

Использование именованных объектов