人小鬼不大

导航

 

一、相关结构体

1、SERVICE_STATUS结构

定义了服务的运行状态/服务类型/接受的控制形式以及指定错误代码等

1 typedef struct _SERVICE_STATUS { 
2 DWORD dwServiceType; //服务类型
3 DWORD dwCurrentState; //当前服务运行状态
4 DWORD dwControlsAccepted; //接受控制的类型,注册服务时。此参数默认设置0
5 DWORD dwWin32ExitCode; //指定当服务【开始】/【停止】的退出码,默认0
6 DWORD dwServiceSpecificExitCode; 默认为0,指定当服务运行或停止错误时的代码,参数会忽略dwWin2ExitCode,除非dwWin2ExitCode指定为ERROR_SERVICE_SPECIFIC_ERROR,
7 DWORD dwCheckPoint; //默认设置0
8 DWORD dwWaitHint; //默认设置0
9 } SERVICE_STATUS, *LPSERVICE_STATUS;
View Code

2、_QUERY_SERVICE_CONFIG 结构

 1 typedef struct _QUERY_SERVICE_CONFIG { 
 2 
 3 DWORD dwServiceType; 
 4 DWORD dwStartType; 
 5 DWORD dwErrorControl; 
 6 LPTSTR lpBinaryPathName; 
 7 LPTSTR lpLoadOrderGroup; 
 8 DWORD dwTagId; 
 9 LPTSTR lpDependencies; 
10 LPTSTR lpServiceStartName; 
11 LPTSTR lpDisplayName; 
12 } QUERY_SERVICE_CONFIG, *LPQUERY_SERVICE_CONFIG;
View Code

QUERY_SERVICE_CONFIG 和 SERVICE_STATUS 的结构参数类似。

3、_ENUM_SERVICE_STATUS 结构

1 typedef struct _ENUM_SERVICE_STATUS { 
2 LPTSTR lpServiceName; 
3 LPTSTR lpDisplayName; 
4 SERVICE_STATUS ServiceStatus; 
5 } ENUM_SERVICE_STATUS, *LPENUM_SERVICE_STATUS;
View Code

ENUM_SERVICE_STATUS 包含服务的名字,显示名。

二、函数

1、OpenSCManager

打开服务器控制管理器

1 SC_HANDLE OpenSCManager(
2 LPCTSTR lpMachineName, // 指定计算机的名字,如果为NULL,默认为local,如果是网络路径 格式需为已 "\\" 拼接的路径
3 LPCTSTR lpDatabaseName, // 指定打开的数据库名字,如果为NULL,打开默认的default 服务数据库
4 DWORD dwDesiredAccess // 指定访问的方式
5 );
View Code

返回值:当函数调用成功,返回已打开的(SC_HANDLE)句柄

2、CreateService

用于创建一个服务

 1 SC_HANDLE CreateService(
 2 SC_HANDLE hSCManager, // OpenSCManager打开的句柄
 3 LPCTSTR lpServiceName, // 指定注册服务的名字
 4 LPCTSTR lpDisplayName, // 指定注册服务显示的名字
 5 DWORD dwDesiredAccess, // 指定创建服务所支持的访问控制
 6 DWORD dwServiceType, // 指定创建的服务的类型
 7 DWORD dwStartType, // 指定服务启动的类型
 8 DWORD dwErrorControl, // 指定发生错误时的错误处理方式
 9 LPCTSTR lpBinaryPathName, // 指定程序的路径
10 LPCTSTR lpLoadOrderGroup, // 指定服务所属组,为NULL则不为任何组
11 LPDWORD lpdwTagId, // 当没有所属组,此值为NULL
12 LPCTSTR lpDependencies, // 如果没有依赖项,此值为NULL
13 LPCTSTR lpServiceStartName, // 指定为NULL,以localSystem账户启动
14 LPCTSTR lpPassword // 当lpServiceStartName 不为NULL,需指定此参数。此参数指定lpServiceStartName的密码
15 );
View Code

返回值:

如果函数成功,返回一个SC_HANDLE的实例句柄。
如果函数失败,返回NULL, 调用GetLastError 获取错误代码。

3、EnumServicesStatus

枚举当前已注册的所有服务,函数可以一次获取所有服务的信息,所以接收体需要足够大。

 1 BOOL EnumServicesStatus(
 2 SC_HANDLE hSCManager, //打开的句柄
 3 DWORD dwServiceType, // 要枚举的服务类型 【SERVICE_WIN32 / SERVICE_DRIVER】
 4 DWORD dwServiceState, // 要枚举的状态
 5 LPENUM_SERVICE_STATUS lpServices, //out:ENUM_SERVICE_STATUS 结构的输出参数,a struct = a service info
 6 DWORD cbBufSize, // 指定lpServices的大小,以字节为单位
 7 LPDWORD pcbBytesNeeded, // out: 接收实际需要的大小
 8 LPDWORD lpServicesReturned, // out: 接收服务的数量
 9 LPDWORD lpResumeHandle // 函数初次调用此参数必须为0,当函数调用成功。此参数为0. 当函数返回为0,GetLastError == ERROR_MORE_DATA 表示指向下一个服务节点的地址以获取更多附加数据。
10 );
View Code

返回值:

函数调用成功返回 nonzero.
函数调用失败返回zero

4、OpenService

打开指定的服务

1 SC_HANDLE OpenService(
2 SC_HANDLE hSCManager, // 句柄
3 LPCTSTR lpServiceName, // 要打开的服务名
4 DWORD dwDesiredAccess // 打开的方式
5 );
View Code

返回值:

调用成功返回打开的服务的句柄,
调用失败返回NULL。

5、QueryServiceConfig

查询服务的详细信息

1 BOOL QueryServiceConfig(
2 SC_HANDLE hService, // 打开服务的句柄
3 LPQUERY_SERVICE_CONFIG lpServiceConfig, // out: 接收服务信息的结构 【QUERY_SERVICE_CONFIG】
4 DWORD cbBufSize, // 指定 lpServiceConfig的大小,以字节为单位
5 LPDWORD pcbBytesNeeded // out: 实际接收的字节数
6 );
View Code

返回值:

调用成功返回nonzero,
调用失败返回zero.

6、QueryServiceConfig2

查询服务的information

1 BOOL QueryServiceConfig(
2 SC_HANDLE hService, // 打开服务的句柄
3 DWORD dwInfoLevel,    // 等级
4 LPBYTE lpBuffer,    // out: 接收服务信息的结构 【QUERY_SERVICE_CONFIG】
5 DWORD cbBufSize, // 指定lpBuffer的大小,以字节为单位
6 LPDWORD pcbBytesNeeded // out: 实际接收的字节数
7 );
View Code

返回值:

调用成功返回nonzero,
调用失败返回zero.

7、QueryServiceStatus

查询服务的运行状态

1 BOOL QueryServiceStatus(
2 SC_HANDLE hService, // 句柄
3 LPSERVICE_STATUS lpServiceStatus // out: 一个SERVICE_STATUS 结构的指针,接收服务状态
4 );
View Code

返回值:

调用成功返回nonzero,
调用失败返回zero.

8、ControlService

控制服务的运行

1 BOOL ControlService(
2 SC_HANDLE hService, // 打开实例的句柄
3 DWORD dwControl, // 控制的标志
4 LPSERVICE_STATUS lpServiceStatus // out 一个service_status结构,接收服务的详细信息
5 );
View Code

返回值:

调用成功返回nonzero,
调用失败返回zero.

9、StartService

启动一个已注册的服务

1 BOOL StartService(
2 SC_HANDLE hService, // 一个打开或创建的句柄
3 DWORD dwNumServiceArgs, // 服务参数,可为0
4 LPCTSTR *lpServiceArgVectors // 如果没有参数传递,可以为NULL
5 );
View Code

返回值:

调用成功返回nonzero,
调用失败返回zero.

10、CloseServiceHandle

关闭一个打开的服务句柄

1 BOOL CloseServiceHandle(
2 SC_HANDLE hSCObject // 句柄
3 );
View Code
posted on 2020-01-20 20:50  人小鬼不大  阅读(323)  评论(0编辑  收藏  举报