本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/47803033
前言:我之前写过一个“Win32服务开发四部曲“,如下:
[Win32] 服务程序开发(1)基本概念和服务程序的框架
[Win32] 服务程序开发(2)Session 0隔离(上)
[Win32] 服务程序开发(3)Session 0隔离(下)创建SYSTEM权限可交互进程
[Win32] 服务程序开发(4)自定义控制码与服务通信
我当时说,编写的服务程序可以使用SCManager API来安装,控制,下面我们来看看SCManager API的具体用法。
1。OpenSCManager 打开服务控制管理器
函数原型:
SC_HANDLE WINAPI OpenSCManager(
_In_opt_ LPCTSTR lpMachineName,
_In_opt_ LPCTSTR lpDatabaseName,
_In_ DWORD dwDesiredAccess
);
lpMachineName:置NULL
lpDatabaseName:服务控制管理器数据库,NULL表示默认数据库
dwDesiredAccess:访问权限
SC_MANAGER_ALL_ACCESS:包括 STANDARD_RIGHTS_REQUIRED,除了在此表中的所有访问权限之外。
SC_MANAGER_CREATE_SERVICE:需要调用 CreateService 函数来创建一个服务。
SC_MANAGER_CONNECT:需要连接到服务控制管理器。
SC_MANAGER_ENUMERATE_SERVICE:需要调用 EnumServicesStatus 或 EnumServicesStatusEx 函数列出数据库中的服务。
需要调用 NotifyServiceStatusChange 函数来接收当创建或删除任何服务时的通知。
SC_MANAGER_LOCK:需要调用 LockServiceDatabase 函数来获取对数据库的锁定。
SC_MANAGER_MODIFY_BOOT_CONFIG:需要调用 NotifyBootConfigStatus 函数。
SC_MANAGER_QUERY_LOCK_STATUS:需要调用 QueryServiceLockStatus 函数来检索数据库的锁状态信息。
返回值:如果打开成功返回服务控制管理器的句柄,失败返回NULL