note : StartService
来源:互联网 发布:女民工团 知乎 编辑:程序博客网 时间:2024/04/28 09:44
今天要启动一个程序的2个服务,笔记和网上都有资料, 很普通的用法.
同事出于好意,给了一段启动服务的代码.
看了下,是他逆向过来的代码, 有着明显的IDA F5的痕迹。里面的常量没有整理.
那段代码的逻辑不是很严谨,回来整理了一下.
// testScm.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <windows.h>#include <winsvc.h>// 访问权限值// 0xF003Fu#define LS_SERVICE_ACCESS (STANDARD_RIGHTS_REQUIRED | \ SERVICE_QUERY_CONFIG | \ SERVICE_CHANGE_CONFIG | \ SERVICE_QUERY_STATUS | \ SERVICE_ENUMERATE_DEPENDENTS | \ SERVICE_START | \ SERVICE_STOP)/// 重试时间// 0x3e8u#define SLEEP_TIME 1000// 服务的名称#define SERVICE_ONE L"xxx"#define SERVICE_TWO L"yyy"BOOL StartServices();BOOL StartServices(SC_HANDLE & hSCManager, const WCHAR * pcServiceName);int _tmain(int argc, _TCHAR* argv[]){ BOOL bRc = FALSE; bRc = StartServices(); _tprintf(L"Services start %s\r\n", bRc ? L"TRUE" : L"FALSE"); _tprintf(L"END, press any to quit\r\n"); getwchar();return 0;}BOOL StartServices(SC_HANDLE & hSCManager, const WCHAR * pcServiceName){ BOOL bRc = FALSE; int iRetryCnt = 0; DWORD dwDesiredAccess = LS_SERVICE_ACCESS; SC_HANDLE hSCObject = NULL; SERVICE_STATUS ServiceStatus; if (NULL == pcServiceName) return FALSE; ::ZeroMemory(&ServiceStatus, sizeof(SERVICE_STATUS)); hSCObject = OpenServiceW(hSCManager, pcServiceName, dwDesiredAccess); if (NULL != hSCObject) { if (QueryServiceStatus(hSCObject, &ServiceStatus)) { if (SERVICE_RUNNING == ServiceStatus.dwCurrentState) { /// 如果服务原本就是启动的, do nothing bRc = TRUE; } else if (StartServiceW(hSCObject, 0, 0)) { /// 启动服务成功后, 查询服务启动后的状态, 最多重试10次 do { if (!QueryServiceStatus(hSCObject, &ServiceStatus)) break; if (SERVICE_RUNNING == ServiceStatus.dwCurrentState) { bRc = TRUE; break; } Sleep(SLEEP_TIME); } while (++iRetryCnt <= 10); } } CloseServiceHandle(hSCObject); } return bRc;}BOOL StartServices(){ BOOL bRc = FALSE; SC_HANDLE hSCManager = NULL; hSCManager = OpenSCManagerW(0, 0, SERVICE_QUERY_CONFIG); if ( hSCManager ) { /// 这个程序有多个服务, 要都启动成功,才算成功 bRc = StartServices(hSCManager, SERVICE_ONE); if (bRc) bRc = StartServices(hSCManager, SERVICE_TWO); CloseServiceHandle(hSCManager); } return bRc;}
0 0
- note : StartService
- StartService
- StartService
- StartService
- note
- note
- NOTE
- note
- Note
- note
- note
- Note
- note
- Note
- Note
- note
- Note
- Note
- 应用数据存储而不是云存储
- 批量生成HTML文件,通过 学生名单(学号、姓名) 与 博客名单(姓名、网址)
- 创业公司必学军规——The Hardest Lessons for Startups to Learn
- 在向ca申请证书时,用户的公私钥对是怎么产生的,ca保存有用户的私钥码?
- HibernateTemplate和HibernateDaoSupport(spring注入问题)
- note : StartService
- 公钥、私钥、数字证书的概念
- 算法 二分求幂(快速取幂)
- Yii: 配置命令行命令目录
- NVIDIA 英伟达 内推职位推荐
- hadoop安装
- 关于Linux下安装Mozilla Flush插件
- python3+nltk3+matplotlib1.3中plot方法无法执行的解决办法
- 建筑工程行业:装饰企业积极探寻新方向,估值有提升空间