Я предлагаю пройти маршрут объекта задания, как указано выше, он будет наиболее надежным.
Если вы не можете пройти маршрут объекта задания, вы можете использовать API-интерфейс всплывающей подсказки, чтобы получить идентификаторы родительского процесса и построить дерево таким образом. Будьте осторожны, поскольку в Windows нет тесных отношений между родителями и детьми, и PID могут быть переработаны. Вы можете использовать GetProcessTimes
, чтобы запросить время создания процесса и проверить, что он старше, чем дочерний процесс. Если промежуточный процесс в дереве завершен, вы не сможете пройти по дереву дальше.
// Error handling removed for brevity
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 process;
ZeroMemory(&process, sizeof(process));
process.dwSize = sizeof(process);
Process32First(snapshot, &process);
do
{
// process.th32ProcessId is the PID.
// process.th32ParentProcessID is the parent PID.
} while (Process32Next(snapshot, &process));