Защита объектов синхронизации и права доступа

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

Дескриптор безопасности для объекта межпроцессной синхронизации можно указать при вызове функции CreateEvent, CreateMutex, CreateSemaphore или CreateWaitableTimer. Если указать значение NULL, объект получает дескриптор безопасности по умолчанию. Списки управления доступом (ACL) в дескрипторе безопасности по умолчанию для объекта синхронизации поступают из основного маркера или маркера олицетворения создателя.

Чтобы получить или задать дескриптор безопасности события, мьютекса, семафора или объекта таймера ожидания, вызовите функции GetNamedSecurityInfo, SetNamedSecurityInfo, GetSecurityInfo или SetSecurityInfo .

Дескрипторы, возвращаемые CreateEvent, CreateMutex, CreateSemaphore и CreateWaitableTimer , имеют полный доступ к новому объекту. При вызове функций OpenEvent, OpenMutex, OpenSemaphore и OpenWaitableTimer система проверяет запрошенные права доступа по дескрипторе безопасности объекта.

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

Значение Значение
DELETE (0x00010000L) Требуется для удаления объекта .
READ_CONTROL (0x00020000L) Требуется для чтения сведений в дескрипторе безопасности для объекта, не включая сведения в SACL. Чтобы прочитать или записать saCL, необходимо запросить право доступа ACCESS_SYSTEM_SECURITY . Дополнительные сведения см. в разделе Права доступа к SACL.
SYNCHRONIZE (0x00100000L) Право на использование данного объекта для синхронизации. Это позволяет потоку ждать, пока объект не перейдет в состояние сигнала.
WRITE_DAC (0x00040000L) Требуется для изменения DACL в дескрипторе безопасности для объекта .
WRITE_OWNER (0x00080000L) Требуется для изменения владельца в дескрипторове безопасности для объекта .

 

В следующей таблице перечислены права доступа для конкретных объектов событий. Эти права поддерживаются в дополнение к стандартным правам доступа.

Значение Значение
EVENT_ALL_ACCESS (0x1F0003) Все возможные права доступа к объекту события. Используйте это право, только если приложению требуется доступ, превышающий предоставленный стандартными правами доступа и EVENT_MODIFY_STATE. Использование этого права доступа повышает вероятность того, что приложение должно быть запущено администратором.
EVENT_MODIFY_STATE (0x0002) Измените доступ к состоянию, необходимый для функций SetEvent, ResetEvent и PulseEvent .

 

В следующей таблице перечислены права доступа к объектам мьютекса для конкретных объектов. Эти права поддерживаются в дополнение к стандартным правам доступа.

Значение Значение
MUTEX_ALL_ACCESS (0x1F0001) Все возможные права доступа к объекту мьютекса. Используйте это право, только если приложению требуется доступ, превышающий предоставленный стандартными правами доступа. Использование этого права доступа повышает вероятность того, что приложение должно быть запущено администратором.
MUTEX_MODIFY_STATE (0x0001) Зарезервировано для последующего использования.

 

В следующей таблице перечислены права доступа для объектов семафора. Эти права поддерживаются в дополнение к стандартным правам доступа.

Значение Значение
SEMAPHORE_ALL_ACCESS (0x1F0003) Все возможные права доступа для объекта семафора. Используйте это право, только если приложению требуется доступ, превышающий предоставленный стандартными правами доступа и SEMAPHORE_MODIFY_STATE. Использование этого права доступа повышает вероятность того, что приложение должно быть запущено администратором.
SEMAPHORE_MODIFY_STATE (0x0002) Измените доступ к состоянию, необходимый для функции ReleaseSemaphore .

 

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

Значение Значение
TIMER_ALL_ACCESS (0x1F0003) Все возможные права доступа к объекту таймера ожидания. Используйте это право только в том случае, если приложению требуется доступ, превышающий предоставленный стандартными правами доступа и TIMER_MODIFY_STATE. Использование этого права доступа повышает вероятность того, что приложение должно быть запущено администратором.
TIMER_MODIFY_STATE (0x0002) Измените доступ к состоянию, необходимый для функций SetWaitableTimer и CancelWaitableTimer .
TIMER_QUERY_STATE (0x0001) Зарезервировано для последующего использования.

 

Чтобы прочитать или записать saCL объекта межпроцессной синхронизации, необходимо запросить право доступа ACCESS_SYSTEM_SECURITY . Дополнительные сведения см. в разделах Списки управления доступом (ACL) и Права доступа saCL.