枚举系统服务

 
  1. #include "StdAfx.h"   
  2. #include <windows.h>   
  3. #include <iostream.h>   
  4. void main()  
  5. {  
  6.     int menu = 0;  
  7.     while (cin >> menu)  
  8.     {  
  9.         if(menu == 1)  
  10.         {  
  11.             SC_HANDLE SCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); //打开系统服务控制器   
  12.             if(SCMan == NULL)  
  13.             {  
  14.                 printf("OpenSCManager Eorror/n");  
  15.                 return;  
  16.             }  
  17.             LPENUM_SERVICE_STATUS service_status; //保存系统服务的结构   
  18.             DWORD cbBytesNeeded = NULL;   
  19.             DWORD ServicesReturned = NULL;  
  20.             DWORD ResumeHandle = NULL;  
  21.               
  22.             service_status = (LPENUM_SERVICE_STATUS)LocalAlloc(LPTR, 1024 * 64);//分配内存,注意大小   
  23.               
  24.               
  25.             //获取系统服务的简单信息   
  26.             bool ESS = EnumServicesStatus(SCMan, //系统服务句柄   
  27.                 SERVICE_WIN32, //服务的类型   
  28.                 SERVICE_STATE_ALL,  //服务的状态   
  29.                 (LPENUM_SERVICE_STATUS)service_status,  //输出参数,系统服务的结构   
  30.                 1024 * 64,  // 结构的大小   
  31.                 &cbBytesNeeded, //输出参数,接收返回所需的服务   
  32.                 &ServicesReturned, //输出参数,接收返回服务的数量   
  33.                 &ResumeHandle); //输入输出参数,第一次调用必须为0,返回为0代表成功   
  34.             if(ESS == NULL)   
  35.             {  
  36.                 printf("EnumServicesStatus Eorror/n");  
  37.                 return;  
  38.             }  
  39.             for(int i = 0; i < ServicesReturned; i++)  
  40.             {  
  41.                 printf("服务名: %s ", service_status[i].lpDisplayName);  
  42.                 switch(service_status[i].ServiceStatus.dwCurrentState)// 服务状态   
  43.                 {  
  44.                 case SERVICE_CONTINUE_PENDING:  
  45.                     printf("状态: 挂起");  
  46.                     break;  
  47.                 case SERVICE_PAUSE_PENDING:  
  48.                     printf("状态: 正在暂停 ");  
  49.                     break;  
  50.                 case SERVICE_PAUSED:  
  51.                     printf("状态: 已暂停 ");  
  52.                     break;  
  53.                 case SERVICE_RUNNING:  
  54.                     printf("状态: 运行 ");  
  55.                     break;  
  56.                 case SERVICE_START_PENDING:  
  57.                     printf("状态: 启动 ");  
  58.                     break;  
  59.                 case SERVICE_STOPPED:  
  60.                     printf("状态: 停止 ");  
  61.                     break;  
  62.                 default:  
  63.                     printf("状态: 未知 ");  
  64.                     break;  
  65.                 }  
  66.                 LPQUERY_SERVICE_CONFIG lpServiceConfig = NULL; //服务详细信息结构   
  67.                 SC_HANDLE service_curren = NULL; //当前的服务句柄   
  68.                 service_curren = OpenService(SCMan, service_status[i].lpServiceName, SERVICE_QUERY_CONFIG); //打开当前服务   
  69.                 lpServiceConfig = (LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR, 8 * 1024);      //分配内存, 最大为8kb    
  70.                   
  71.                 if(NULL == QueryServiceConfig(service_curren, lpServiceConfig, 8 * 1024, &ResumeHandle))  
  72.                 {  
  73.                     printf("QueryServiceConfig Error/n");  
  74.                     return;  
  75.                 }  
  76.                 printf("路径: %s ", lpServiceConfig->lpBinaryPathName);//服务的路径   
  77.                 printf("/n");  
  78.                 CloseServiceHandle(service_curren);//关闭当前服务的句柄   
  79.             }  
  80.             CloseServiceHandle(SCMan);//关闭服务管理器的句柄   
  81.         }  
  82.     }  
  83. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值