同步对象安全性和访问权限
使用 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 访问权限。 |
同步 (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 访问权限。