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 [仅限桌面应用]
目标平台 窗户
标头 winsvc.h (包括 Windows.h)
Advapi32.lib
DLL Advapi32.dll

另请参阅

ChangeServiceConfig

CloseServiceHandle

ControlService

CreateService

DeleteService

EnumDependentServices

OpenSCManager

QueryServiceConfig

QueryServiceDynamicInformation

QueryServiceObjectSecurity

QueryServiceStatusEx

SCM 句柄

Service Functions

SetServiceObjectSecurity

StartService