C++ 获取Windows服务列表
2013-05-03 14:17
127 查看
#include <windows.h> #include <iostream> #define MAX_SERVICE_SIZE 1024 * 64 #define MAX_QUERY_SIZE 1024 * 8 int main(void) { do { SC_HANDLE SCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if(SCMan == NULL) { std::cout << "OpenSCManager failed." << std::endl; break; } LPENUM_SERVICE_STATUS service_status; DWORD cbBytesNeeded = NULL; DWORD ServicesReturned = NULL; DWORD ResumeHandle = NULL; service_status = (LPENUM_SERVICE_STATUS)LocalAlloc(LPTR, MAX_SERVICE_SIZE); BOOL ESS = EnumServicesStatus(SCMan, //句柄 SERVICE_WIN32, //服务类型 SERVICE_STATE_ALL, //服务的状态 (LPENUM_SERVICE_STATUS)service_status, //输出参数,系统服务的结构 MAX_SERVICE_SIZE, //结构的大小 &cbBytesNeeded, //输出参数,接收返回所需的服务 &ServicesReturned, //输出参数,接收返回服务的数量 &ResumeHandle); //输入输出参数,第一次调用必须为0,返回为0代表成功 if(ESS == NULL) { std::cout << "EnumServicesStatus Failed." << std::endl; break; } for(int i = 0; i < static_cast<int>(ServicesReturned); i++) { std:: cout << "ServiceName: " << service_status[i].lpDisplayName << "\t"; switch(service_status[i].ServiceStatus.dwCurrentState) { // 服务状态 case SERVICE_CONTINUE_PENDING: std::cout << "CONTINUE_PENDING" << std::endl; break; case SERVICE_PAUSE_PENDING: std::cout << "PAUSE_PENDING" << std::endl; break; case SERVICE_PAUSED: std::cout << "PAUSED" << std::endl; break; case SERVICE_RUNNING: std::cout << "RUNNING" << std::endl; break; case SERVICE_START_PENDING: std::cout << "START_PENDING" << std::endl; break; case SERVICE_STOPPED: std::cout << "STOPPED" << std::endl; break; default: std::cout << "UNKNOWN" << std::endl; break; } LPQUERY_SERVICE_CONFIG lpServiceConfig = NULL; //服务详细信息结构 SC_HANDLE service_curren = NULL; //当前的服务句柄 service_curren = OpenService(SCMan, service_status[i].lpServiceName, SERVICE_QUERY_CONFIG); //打开当前服务 lpServiceConfig = (LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR, MAX_QUERY_SIZE); //分配内存, 最大为8kb if(NULL == QueryServiceConfig(service_curren, lpServiceConfig, MAX_QUERY_SIZE, &ResumeHandle)) { std::cout << "QueryServiceConfig Failed." << std::endl; break; } std::cout << "Path: " << lpServiceConfig->lpBinaryPathName << std::endl; CloseServiceHandle(service_curren); } CloseServiceHandle(SCMan); } while (0); system("pause"); return 0; }
相关文章推荐
- Windows环境C/C++ 获取当前执行程序路径的两个函数
- C++ 获取linux和windows系统的用户名
- c/c++在windows下获取时间和计算时间差的几种方法总结
- C++获取目录下所有文件列表函数
- 用C++创建Windows服务代码
- C/C++ 获取文件夹下所有文件名 windows和linux通用
- C/C++ 获取目录下的文件列表信息
- 获取进程、服务、任务列表
- C++获取Windows系统License信息的方法
- C++编写Windows服务程序 用 C 语言编写 Windows 服务程序的五个步骤
- C++获取文件夹下面文件名列表
- Debian GNU Linux服务列表的获取、服务的关闭/开启、服务在启动时是否自动运行的生效/失效
- 从Windows系统服务获取活动用户的注册表信息
- C/C++获取操作系统、CPU、内存信息(windows和linux)
- windows下如何获取系统已存在的盘符 【c++】
- android 获取进程、服务、任务列表
- C++编写及注册windows服务程序
- C++获取目录下的文件列表
- Silverlight+WCF+ArcObjects获取地图服务图层列表的实现
- C/C++创建windows服务程序