获取本地服务列表
2009-11-17 19:09
405 查看
#include <Windows.h> #include <iostream> #define ERRORINGETLOCALSERVICELIST 1 DWORD GetLocalServiceList() { DWORD dwErrorCode = NULL; DWORD dwRet = NULL; DWORD dwBufSize = NULL; DWORD dwByteNeeded = NULL; DWORD dwServicesReturned = NULL; DWORD dwServiceCoutRet = NULL; DWORD dwResumeHandle = 0; DWORD dwReturn = NULL; BOOL bRet = false; ENUM_SERVICE_STATUS_PROCESS *lpServicesBuffer = NULL; //开启服务管理器 SC_HANDLE sc_hHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE); if(NULL == sc_hHandle) { dwErrorCode = GetLastError(); printf("Error in OpenSCManager/n"); dwReturn = ERRORINGETLOCALSERVICELIST; goto END; } //第一次调用EnumServicesStatusEx,使得函数返回(dwByteNeeded)确切的bpServicesBuffer空间需求 dwResumeHandle = 0; bRet = EnumServicesStatusEx(sc_hHandle, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, NULL, 0, &dwByteNeeded, &dwServiceCoutRet, &dwResumeHandle, NULL); //分配获得服务列表所需的空间 lpServicesBuffer = (ENUM_SERVICE_STATUS_PROCESS*)malloc(dwByteNeeded); if(NULL == lpServicesBuffer) { printf("Error in mallco a buffer./n"); dwReturn = ERRORINGETLOCALSERVICELIST; goto END; } SecureZeroMemory(lpServicesBuffer, dwByteNeeded); //获取服务列表 dwBufSize = dwByteNeeded; bRet = EnumServicesStatusEx(sc_hHandle, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, (PBYTE)lpServicesBuffer, dwBufSize, &dwByteNeeded, &dwServiceCoutRet, &dwResumeHandle, NULL); if(0 == bRet) { printf("Error in second enum./n"); dwReturn = ERRORINGETLOCALSERVICELIST; goto END; } for(DWORD i=0; i<dwServiceCoutRet; i++) { printf("%d: ==========================================/n", i+1); printf("lpDisplayName: %ws/n", lpServicesBuffer[i].lpDisplayName); printf("lpServiceName: %ws/n", lpServicesBuffer[i].lpServiceName); printf("ServiceStatusProcess: %d/n", lpServicesBuffer[i].ServiceStatusProcess.dwCurrentState); } dwReturn = ERROR_SUCCESS; END: if(NULL !=lpServicesBuffer) { free(lpServicesBuffer); lpServicesBuffer = NULL; } getchar(); return dwReturn; } int _tmain(int argc, _TCHAR* argv[]) { //本地中文化,防止服务名称为中文 setlocale(LC_ALL, "chs"); GetLocalServiceList(); return 0; }
相关文章推荐
- Atitit.获取某个服务 网络邻居列表 解决方案
- python获取本人关注列表并批量存入本地mysql数据库
- 获取进程、服务、任务列表
- 获取本地文件列表及预览文件
- Debian GNU Linux服务列表的获取、服务的关闭/开启、服务在启动时是否自己主动执行的生效/失效
- C#获取本地打印机列表,并将指定打印机设置为默认打印机
- 用WCF服务来动态的获取本地XML省市区文档
- Delphi如何获取系统服务(即Service服务程序)列表
- 获取本地IP列表
- Atitit.获取某个服务 网络邻居列表 解决方案
- 获取本地文件列表后按照文件修改时间降序排列
- 获取进程、服务、任务列表
- 在服务器中发布IIS服务,挡在本地iis网站访问服务时候经常出现文件无法获取
- android 获取进程、服务、任务列表
- java获取本地操作系统进程列表
- java如何获取本地操作系统进程列表
- WinPcap. 获取本地驱动设备列表
- Atitit.获取某个服务 网络邻居列表 解决方案
- FTP服务的LIST指令获取的文件列表信息的解析
- 获取进程、服务、任务列表