Process32Next завершается с ERROR_NO_MORE_FILES

Я создаю процесс A, который создает процесс B. Я хочу завершить все дерево процессов, если выполняется определенное условие, поэтому я следую приведенным здесь инструкциям:
Завершить дерево процессов (C для Windows)

Пример кода работает нормально, он убивает дочерний и основной процесс, но я получаю сообщение об ошибке в :: Process32Next (hSnap, &pe) ERROR_NO_MORE_FILES.

Чтобы быть более точным, когда pe.th32ParentProcessID == dwPid и дочерний процесс завершается, в следующей итерации :: Process32Next (hSnap, &pe) возвращает false с кодом ошибки 18 (ERROR_NO_MORE_FILES)

Это правильно или я что-то не так делаю?

void MyClass::winKillProcess(DWORD dwPid) try {

PROCESSENTRY32 pe;
memset(&pe, 0, sizeof(PROCESSENTRY32));
pe.dwSize = sizeof(PROCESSENTRY32);

HANDLE hSnap = :: CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (::Process32First(hSnap, &pe))
{
BOOL bContinue = TRUE;

// kill child processes
while (bContinue)
{
// only kill child processes
if (pe.th32ParentProcessID == dwPid)
{
HANDLE hChildProc = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);

if (hChildProc)
{
::TerminateProcess(hChildProc, 1);
::CloseHandle(hChildProc);
}
}

bContinue = ::Process32Next(hSnap, &pe);
}

// kill the main process
HANDLE hProc = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);

if (hProc)
{
::TerminateProcess(hProc, 1);
::CloseHandle(hProc);
}

}
} catch (...) {
error_notify("winKillProcess() threw an unknown exception");
return;
}

-1

Решение

Я проверил перечисление моментального снимка процесса без кода, который убивает процессы, и заметил, что последний вызов Process32Next возвращается FALSE и (в Windows 7) GetLastError возвращается ERROR_NO_MORE_FILES, Он перечислил все процессы в моей системе.

Поэтому, хотя документация неясна, кажется, что либо ERROR_SUCCESS или же ERROR_NO_MORE_FILES указывает на успешное завершение перечисления.

Если вы сомневаетесь, подсчитайте количество найденных процессов и сравните его с количеством менеджера задач.

0

Другие решения


По вопросам рекламы [email protected]