Проверка процесса C ++ - PullRequest
       8

Проверка процесса C ++

1 голос
/ 17 сентября 2009

Я создаю приложение типа диспетчера задач в C ++, и в настоящее время я использую:

`

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 Ответ

3 голосов
/ 17 сентября 2009

Чтобы запрашивать информацию о процессах, к которым у вас нет прямого доступа, вам нужно иметь SeDebugPrivilege *. Если это в Vista, вы, скорее всего, работаете как обычный пользователь, и у вас нет этой привилегии. Вам нужно запускать программу от имени администратора (обратите внимание, что TaskManager должен запускаться от имени администратора, чтобы получать информацию обо всех процессах.)

Если вы работаете от имени администратора, проблема, скорее всего, в том, что SeDebugPrivilege не включен по умолчанию. Это потому, что SeDebugPrivilege - очень опасная привилегия, чтобы иметь ее постоянно. Вы можете включить SeDebugPrivilege, вызвав API AdjustTokenPrivileges . В этой статье KB показано, как - вы можете найти другие ссылки в Интернете.

* SeDebugPrivilege, среди прочего, является переопределением OpenProcess и OpenThread . Toolhelp должен вызывать эти функции внутри, чтобы запрашивать информацию о процессах и потоках в системе. Эти функции проверят ACL на объекте, чтобы определить, есть ли у вас доступ. Пользователь обычно получает разрешение только на созданные им процессы. Если вызывающий код имеет SeDebugPrivilege в своем токене, OpenProcess и OpenThread будут успешными, даже если код не получил доступа по списку ACL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...