服务管理,Dll查看

//枚举系统进程
VOID CManageProcessDlg::ShowProcess()
{
    
     m_ListProcess.DeleteAllItems();
     HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
     //...

     PROCESSENTRY32 Pe32 = {0};
     Pe32.dwSize = sizeof(PROCESSENTRY32);
     int bRet = Process32First(hSnap,&Pe32);
     //...
     CString strTemp;
     DWORD dwIndex = 0;
     while(bRet)
     {
          //...
          bRet = Process32Next(hSnap,&Pe32);
          strTemp.Format("%d",Pe32.th32ProcessID);
          m_ListProcess.InsertItem(dwIndex,strTemp);
          m_ListProcess.SetItemText(dwIndex,1,Pe32.szExeFile);
          dwIndex ++;
     }

}

//列表控件的初始化
void CManageProcessDlg::InitList()
{
     m_ListProcess.SetExtendedStyle(m_ListProcess.GetExtendedStyle() |
          LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

     m_ListProcess.InsertColumn(0,_T("NO"));
     m_ListProcess.InsertColumn(1,_T("进程名"));

     m_ListProcess.SetColumnWidth(0,LVSCW_AUTOSIZE_USEHEADER);
     m_ListProcess.SetColumnWidth(1,LVSCW_AUTOSIZE_USEHEADER);

     m_ListModule.SetExtendedStyle(m_ListModule.GetExtendedStyle() |
     LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

     m_ListModule.InsertColumn(0,_T("NO"));
     m_ListModule.InsertColumn(1,_T("DLL名"));
     m_ListModule.InsertColumn(2,_T("DLL路径"));

     m_ListModule.SetColumnWidth(0,LVSCW_AUTOSIZE_USEHEADER);
     m_ListModule.SetColumnWidth(1,LVSCW_AUTOSIZE_USEHEADER);
     m_ListModule.SetColumnWidth(2,LVSCW_AUTOSIZE_USEHEADER);

}

void CManageProcessDlg::ShowModule()
{
     DWORD  error;
     m_ListModule.DeleteAllItems();
    int nPid = GetSelectPid();
     MODULEENTRY32 Me32 = {0};
     Me32.dwSize = sizeof(MODULEENTRY32);
     HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,nPid);
     //...
     error = GetLastError();

     int bRet = Module32First(hSnap,&Me32);
    
     error = GetLastError();

     CString strTemp;
     DWORD dwIndex = 0;
     while( bRet)
     {
          //...
          bRet = Module32Next(hSnap,&Me32);
          strTemp.Format("%d",Me32.th32ProcessID);
          m_ListModule.InsertItem(dwIndex,strTemp);
          m_ListModule.SetItemText(dwIndex,1,Me32.szModule);
          m_ListModule.SetItemText(dwIndex,2,Me32.szExePath);
          dwIndex ++;
          //MessageBox(Me32.szExePath);
     }
}

int CManageProcessDlg::GetSelectPid()
{
     POSITION pos = m_ListProcess.GetFirstSelectedItemPosition();
     int nSelect = -1;

     while( pos )
     {
          nSelect = m_ListProcess.GetNextSelectedItem(pos);
     }

     if(-1 == nSelect)
     {
          MessageBox("请选择要操作的项");
          return 0;
     }

     //获取选中服务的服务名
     char szServiceName[MAXBYTE] = {0};
     m_ListProcess.GetItemText(nSelect,0,szServiceName,MAXBYTE);    
     int a = atoi(szServiceName);
     return a;
}
//查看DLL
void CManageProcessDlg::OnBtnDll()
{
     // TODO: Add your control notification handler code here
     DebugPrivilege();
     ShowModule();
}

//提升权限
void CManageProcessDlg::DebugPrivilege()
{
     HANDLE hToken = NULL;
     //打开当前进程的访问令牌
     int hRet = OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);

     if( hRet)
     {
          TOKEN_PRIVILEGES tp;
          tp.PrivilegeCount = 1;
          //取得描述权限的LUID
          LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);
          tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
          //调整访问令牌的权限
          AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);

          CloseHandle(hToken);
     }
}
原文地址:https://www.cnblogs.com/mynona/p/3162640.html