openServiceA 函数 (winsvc.h)

打开现有服务。

语法

SC_HANDLE OpenServiceA(
  [in] SC_HANDLE hSCManager,
  [in] LPCSTR    lpServiceName,
  [in] DWORD     dwDesiredAccess
);

参数

[in] hSCManager

服务控制管理器数据库的句柄。 OpenSCManager 函数返回此句柄。 有关详细信息,请参阅 服务安全和访问权限

[in] lpServiceName

要打开的服务的名称。 这是创建服务对象时 CreateService 函数的 lpServiceName 参数指定的名称,而不是用户界面应用程序为标识服务而显示的服务显示名称。

最大字符串长度为 256 个字符。 服务控制管理器数据库保留字符的大小写,但服务名称比较始终不区分大小写。 正斜杠 (/) 和反斜杠 (\) 是无效的服务名称字符。

[in] dwDesiredAccess

对服务的访问权限。 有关访问权限的列表,请参阅 服务安全性和访问权限

在授予请求的访问权限之前,系统会根据与服务对象关联的安全描述符的任意访问控制列表检查调用进程的访问令牌。

返回值

如果函数成功,则返回值是服务的句柄。

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

服务控制管理器可以设置以下错误代码。 其他可由服务控制管理器调用的注册表函数设置。

返回代码 说明
ERROR_ACCESS_DENIED
句柄无权访问服务。
ERROR_INVALID_HANDLE
指定的句柄无效。
ERROR_INVALID_NAME
指定的服务名称无效。
ERROR_SERVICE_DOES_NOT_EXIST
指定的服务不存在。

注解

返回的句柄仅对调用 OpenService 的进程有效。 可以通过调用 CloseServiceHandle 函数来关闭它。

若要使用 OpenService,除了 SC_MANAGER_CONNECT之外,不需要任何特权。

示例

有关示例,请参阅 启动服务

注意

winsvc.h 标头将 OpenService 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 winsvc.h (包括 Windows.h)
Library Advapi32.lib
DLL Advapi32.dll

另请参阅

ChangeServiceConfig

CloseServiceHandle

ControlService

CreateService

DeleteService

EnumDependentServices

OpenSCManager

QueryServiceConfig

QueryServiceDynamicInformation

QueryServiceObjectSecurity

QueryServiceStatusEx

SCM 句柄

服务函数

SetServiceObjectSecurity

StartService