#include <iostream>
#include <windows.h>
#include <winsvc.h>
int main() {
SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
if (hSCManager == NULL) {
std::cout << "无法打开服务控制管理器。错误代码:" << GetLastError() << std::endl;
return 1;
}
DWORD dwBytesNeeded;
DWORD dwServicesReturned;
DWORD dwResumeHandle = 0;
// 获取服务状态信息所需的缓冲区大小
EnumServicesStatusEx(hSCManager, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, NULL, 0, &dwBytesNeeded, &dwServicesReturned, &dwResumeHandle, NULL);
// 分配缓冲区
LPENUM_SERVICE_STATUS_PROCESS lpServices = (LPENUM_SERVICE_STATUS_PROCESS) new BYTE[dwBytesNeeded];
// 获取服务状态信息
if (!EnumServicesStatusEx(hSCManager, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL,
(LPBYTE)lpServices, dwBytesNeeded, &dwBytesNeeded, &dwServicesReturned, &dwResumeHandle, NULL)) {
std::cout << "无法枚举服务状态。错误代码:" << GetLastError() << std::endl;
delete[] lpServices;
return 1;
}
std::cout << "所有的服务列表:" << std::endl;
// 遍历服务并输出服务名和启动类型
for (DWORD i = 0; i < dwServicesReturned; i++) {
std::wcout << "服务名:" << lpServices[i].lpServiceName << std::endl;
std::cout << "是否为自动启动:" << ((lpServices[i].ServiceStatusProcess.dwServiceType & SERVICE_AUTO_START) ? "是" : "否") << std::endl;
std::cout << std::endl;
}
// 释放资源
delete[] lpServices;
CloseServiceHandle(hSCManager);
getchar();
return 0;
}