OpenSemaphoreW 函数 (synchapi.h)

打开现有的命名信号灯对象。

语法

HANDLE OpenSemaphoreW(
  [in] DWORD   dwDesiredAccess,
  [in] BOOL    bInheritHandle,
  [in] LPCWSTR lpName
);

参数

[in] dwDesiredAccess

对信号灯对象的访问。 如果指定对象的安全描述符不允许对调用进程进行请求的访问,则函数将失败。 有关访问权限的列表,请参阅 同步对象安全性和访问权限

[in] bInheritHandle

如果此值为 TRUE,则此进程创建的进程将继承句柄。 否则,进程不会继承此句柄。

[in] lpName

要打开的信号量的名称。 名称比较区分大小写。

此函数可以在专用命名空间中打开对象。 有关详细信息,请参阅 对象命名空间

终端服务: 名称可以具有“Global”或“Local”前缀,以显式打开全局命名空间或会话命名空间中的对象。 名称的其余部分可以包含除反斜杠字符 (\) 以外的任何字符。 有关详细信息,请参阅 内核对象命名空间

注意 使用终端服务会话实现快速用户切换。 第一个登录用户使用会话 0,下一个登录用户使用会话 1,依此。 内核对象名称必须遵循终端服务概述的准则,以便应用程序可以支持多个用户。

返回值

如果函数成功,则返回值是信号灯对象的句柄。

如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。

注解

OpenSemaphore 函数允许多个进程打开同一信号灯对象的句柄。 仅当某个进程已使用 CreateSemaphore 函数创建信号灯时,函数才会成功。 调用进程可以在需要信号量对象句柄的任何函数(如 wait 函数)中使用返回的句柄,但受 dwDesiredAccess 参数中指定的访问限制的限制。

可以使用 DuplicateHandle 函数复制句柄。 使用 CloseHandle 函数关闭句柄。 进程终止时,系统会自动关闭句柄。 信号灯对象在其最后一个句柄已关闭时被销毁。

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 synchapi.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

CloseHandle

CreateSemaphore

DuplicateHandle

对象名称

ReleaseSemaphore

信号灯对象

同步函数