openMutexW 函数 (synchapi.h)
打开现有的命名互斥对象。
语法
HANDLE OpenMutexW(
[in] DWORD dwDesiredAccess,
[in] BOOL bInheritHandle,
[in] LPCWSTR lpName
);
参数
[in] dwDesiredAccess
对互斥对象的访问。 只有 SYNCHRONIZE 访问权限才需要使用互斥体;若要更改互斥体的安全性,请指定 MUTEX_ALL_ACCESS。 如果指定对象的安全描述符不允许对调用进程进行请求的访问,则函数将失败。 有关访问权限的列表,请参阅 Synchronization Object Security and Access Rights。
[in] bInheritHandle
如果此值为 TRUE,则此进程创建的进程将继承句柄。 否则,进程不会继承此句柄。
[in] lpName
要打开的互斥体的名称。 名称比较区分大小写。
此函数可以打开专用命名空间中的 对象。 有关详细信息,请参阅 对象命名空间。
终端服务: 名称可以具有“Global”或“Local”前缀,以显式打开全局命名空间或会话命名空间中的对象。 名称的其余部分可以包含除反斜杠字符 (\) 以外的任何字符。 有关详细信息,请参阅 内核对象命名空间。
注意 快速用户切换是使用终端服务会话实现的。 要登录的第一个用户使用会话 0,下一个登录的用户使用会话 1,依此而行。 内核对象名称必须遵循终端服务概述的准则,以便应用程序可以支持多个用户。
返回值
如果函数成功,则返回值是互斥对象的句柄。
如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。
如果命名互斥体不存在,该函数将失败, GetLastError 将返回 ERROR_FILE_NOT_FOUND。
注解
OpenMutex 函数使多个进程能够打开同一互斥对象的句柄。 仅当某个进程已使用 CreateMutex 函数创建了互斥体时,函数才会成功。 调用进程可以在需要互斥对象句柄的任何函数(如 wait 函数)中使用返回的句柄,但受 dwDesiredAccess 参数中指定的访问限制的约束。
可以使用 DuplicateHandle 函数复制句柄。 使用 CloseHandle 函数关闭句柄。 进程终止时,系统会自动关闭句柄。 互斥对象在其最后一个句柄已关闭时被销毁。
如果多线程应用程序必须重复创建、打开和关闭命名互斥对象,则可能会出现争用条件。 在这种情况下,最好使用 CreateMutex 而不是 OpenMutex,因为 CreateMutex 会打开互斥体(如果存在),如果不存在,则创建互斥体。
示例
有关使用 OpenMutex 的示例,请参阅 使用命名对象。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | synchapi.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |