代码之家  ›  专栏  ›  技术社区  ›  Mikey

C++进程检查

  •  1
  • Mikey  · 技术社区  · 16 年前

    void MyFrame::ProcChecker(bool showmessage=false){
     HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
     PROCESSENTRY32 *processInfo = new PROCESSENTRY32;
     processInfo->dwSize = sizeof(PROCESSENTRY32);
    
     int index = 0;
     string procList = "";
    
     while(Process32Next(hSnapShot,processInfo) != false){
      HANDLE modSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, processInfo->th32ProcessID);
    
      MODULEENTRY32 *moduleInfo = new MODULEENTRY32;
      moduleInfo->dwSize = sizeof(MODULEENTRY32);
    
      index++;
      stringstream indexstr;
      indexstr << index;
    
      Module32First(modSnapShot,moduleInfo);
    
      procList = procList + indexstr.str() + ": " + wxString((string)processInfo->szExeFile) + "[" + wxString((string)moduleInfo->szExePath) + "]" + "\r\n";
     }
    
     if(showmessage){
      MessageBox(NULL,procList.c_str(),"Processes",false);
     }
    }
    

    我刚刚开始学习C++,所以我知道我目前的代码可能很糟糕:P

    1 回复  |  直到 16 年前
        1
  •  3
  •   Michael    16 年前

    为了查询您没有直接访问权限的进程的信息,您需要拥有SeDebugPrivilege*。如果这是在Vista上,您很可能是以标准用户身份运行的,并且您没有该权限。您需要以管理员身份运行程序(请注意,TaskManager必须以管理员的身份运行才能获取所有进程的信息。)

    AdjustTokenPrivileges article

    OpenProcess OpenThread ACL 查看对象上是否有访问权限。用户通常只被授予对他们创建的进程的权限。如果调用代码的令牌中有SeDebugPrivilege,即使ACL没有授予代码访问权限,OpenProcess和OpenThread也会成功。