• 服务管理器


    界面如下:

    主要代码如下:

      1 void CServiceManagerDlg::InitServicesList(void)
      2 {
      3     CRect Rect;
      4     m_ListServices.GetClientRect(&Rect);
      5     m_ListServices.SetExtendedStyle(m_ListServices.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
      6     m_ListServices.InsertColumn(0, _T("序号"));
      7     m_ListServices.InsertColumn(1, _T("服务名"));
      8     m_ListServices.InsertColumn(2, _T("显示名"));
      9     m_ListServices.InsertColumn(3, _T("状态"));
     10     m_ListServices.SetColumnWidth(0, Rect.Width() / 10);
     11     m_ListServices.SetColumnWidth(1, 3 * Rect.Width() / 10);
     12     m_ListServices.SetColumnWidth(2, 5 * Rect.Width() / 10);
     13     m_ListServices.SetColumnWidth(3, Rect.Width() / 10);
     14 }
     15 
     16 void CServiceManagerDlg::ShowServicesList(void)
     17 {
     18     m_ListServices.DeleteAllItems();
     19 
     20     SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
     21     if (NULL == hSCM)
     22     {
     23         AfxMessageBox(_T("OpenSCManager Error!"));
     24         return;
     25     }
     26 
     27     DWORD dwServiceType = 0;
     28     if (m_bApplication)
     29     {
     30         dwServiceType = SERVICE_DRIVER;
     31     }
     32     else
     33     {
     34         dwServiceType = SERVICE_WIN32;
     35     }
     36 
     37     DWORD dwBufSize = 1024 * sizeof(ENUM_SERVICE_STATUS);
     38     DWORD dwByteNeeded, dwServicesReturned, lpResumeHandle = 0;
     39     ENUM_SERVICE_STATUS SerStatus[1024] = {0};
     40     BOOL bRet = EnumServicesStatus(hSCM, dwServiceType, SERVICE_STATE_ALL, SerStatus, dwBufSize, &dwByteNeeded, &dwServicesReturned, &lpResumeHandle);
     41     //DWORD dwErr = GetLastError();
     42     if (FALSE == bRet)
     43     {
     44         AfxMessageBox(_T("EnumServiceStatus Error"));
     45         CloseServiceHandle(hSCM);
     46         return;
     47     }
     48 
     49     for (DWORD i = 0; i < dwServicesReturned; i++)
     50     {
     51         CString str;
     52         str.Format(_T("%d"), i);
     53         m_ListServices.InsertItem(i, str);
     54         m_ListServices.SetItemText(i, 1, SerStatus[i].lpServiceName);
     55         m_ListServices.SetItemText(i, 2, SerStatus[i].lpDisplayName);
     56         switch (SerStatus[i].ServiceStatus.dwCurrentState)
     57         {
     58         case SERVICE_PAUSED:
     59             m_ListServices.SetItemText(i, 3, _T("暂停"));
     60             break;
     61         case SERVICE_STOPPED:
     62             m_ListServices.SetItemText(i, 3, _T("停止"));
     63             break;
     64         case SERVICE_RUNNING:
     65             m_ListServices.SetItemText(i, 3, _T("运行"));
     66             break;
     67         default:
     68             m_ListServices.SetItemText(i, 3, _T("其他"));
     69             break;
     70         }
     71     }
     72     CloseServiceHandle(hSCM);
     73 }
     74 
     75 void CServiceManagerDlg::OnBnClickedRadioApplication()
     76 {
     77     // TODO: 在此添加控件通知处理程序代码
     78     UpdateData(TRUE);
     79     DebugPrivilege();
     80     ShowServicesList();
     81 }
     82 
     83 void CServiceManagerDlg::OnBnClickedRadioDriver()
     84 {
     85     // TODO: 在此添加控件通知处理程序代码
     86     UpdateData(TRUE);
     87     DebugPrivilege();
     88     ShowServicesList();
     89 }
     90 
     91 void CServiceManagerDlg::OnBnClickedButtonStart()
     92 {
     93     // TODO: 在此添加控件通知处理程序代码
     94     POSITION pos = m_ListServices.GetFirstSelectedItemPosition();
     95     int nSelected = -1;
     96 
     97     while (pos)
     98     {
     99         nSelected = m_ListServices.GetNextSelectedItem(pos);
    100     }
    101 
    102     if (-1 == nSelected)
    103     {
    104         AfxMessageBox(_T("请选择要启动的服务项"));
    105         return;
    106     }
    107 
    108     TCHAR szServiceName[MAXBYTE] = {0};
    109     m_ListServices.GetItemText(nSelected, 1, szServiceName, MAXBYTE);
    110     //AfxMessageBox(szServiceName);
    111 
    112     SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    113     if (NULL == hSCM)
    114     {
    115         AfxMessageBox(_T("OpenSCManager Error"));
    116         return;
    117     }
    118 
    119     SC_HANDLE hSCService = OpenService(hSCM, szServiceName, SERVICE_ALL_ACCESS);
    120 
    121     BOOL bRet = StartService(hSCService, 0, NULL);
    122     if (TRUE == bRet)
    123     {
    124         m_ListServices.SetItemText(nSelected, 3, _T("运行"));
    125     }
    126     else
    127     {
    128         DWORD dwErr = GetLastError();
    129     }
    130 
    131     CloseServiceHandle(hSCService);
    132     CloseServiceHandle(hSCM);
    133 }
    134 
    135 void CServiceManagerDlg::OnBnClickedButtonStop()
    136 {
    137     // TODO: 在此添加控件通知处理程序代码
    138     POSITION pos = m_ListServices.GetFirstSelectedItemPosition();
    139     int nSelected = -1;
    140 
    141     while (pos)
    142     {
    143         nSelected = m_ListServices.GetNextSelectedItem(pos);
    144     }
    145 
    146     if (-1 == nSelected)
    147     {
    148         AfxMessageBox(_T("请选择要停止的服务项"));
    149         return;
    150     }
    151 
    152     TCHAR szServiceName[MAXBYTE] = {0};
    153     m_ListServices.GetItemText(nSelected, 1, szServiceName, MAXBYTE);
    154     //AfxMessageBox(szServiceName);
    155 
    156     SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    157     if (NULL == hSCM)
    158     {
    159         AfxMessageBox(_T("OpenSCManager Error"));
    160         return;
    161     }
    162 
    163     SC_HANDLE hSCService = OpenService(hSCM, szServiceName, SERVICE_ALL_ACCESS);
    164     SERVICE_STATUS ServiceStatus;
    165     BOOL bRet = ControlService(hSCService, SERVICE_CONTROL_STOP, &ServiceStatus);
    166     if (TRUE == bRet)
    167     {
    168         m_ListServices.SetItemText(nSelected, 3, _T("停止"));
    169     }
    170     else
    171     {
    172         DWORD dwErr = GetLastError();
    173     }
    174 
    175     CloseServiceHandle(hSCService);
    176     CloseServiceHandle(hSCM);
    177 }
    178 
    179 void CServiceManagerDlg::OnBnClickedButtonExit()
    180 {
    181     // TODO: 在此添加控件通知处理程序代码
    182     OnOK();
    183 }
    184 
    185 void CServiceManagerDlg::DebugPrivilege(void)
    186 {
    187     HANDLE hToken = NULL;
    188     BOOL bRet = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
    189     if (TRUE == bRet)
    190     {
    191         TOKEN_PRIVILEGES tp;
    192         tp.PrivilegeCount = 1;
    193         LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
    194         tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    195         AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
    196 
    197         CloseHandle(hToken);
    198     }
    199 }

    下载地址:

    http://pan.baidu.com/s/1jGE5na2

  • 相关阅读:
    吴恩达机器学习笔记——梯度下降算法(2)
    吴恩达机器学习笔记——梯度下降算法(1)
    Java面向对象
    实体框架
    Android Studio 3.4.1中使用com.android.support.v4.view.ViewPager提示不存在该类或程序闪退
    7、认识 Android Service
    安卓付费课程
    在Android Studio中如何添加GSON
    android studio 添加Volley
    android studio里面怎么看file explorer啊?
  • 原文地址:https://www.cnblogs.com/qiyueliuguang/p/3544137.html
Copyright © 2020-2023  润新知