Причина, по которой вы видите <unknown>
в названии процесса, заключается в том, что они являются системными процессами, как вы и предсказывали. OpenProcess
, который пытается открыть с необходимыми разрешениями, терпит неудачу и по умолчанию неизвестен для системных процессов.
Вместо этого вы можете использовать WTSEnumerateSessions , если вы ищете только имена процессов и PID.
WTS_PROCESS_INFO* pWtsProcessInfo = NULL;
DWORD dwProcessCount = 0;
if (WTSEnumerateProcesses(NULL, NULL, 1, &pWtsProcessInfo, &dwProcessCount)) {
for (DWORD i = 0; i < dwProcessCount; i++) {
printf("%ws : %d\n", pWtsProcessInfo[i].pProcessName, pWtsProcessInfo[i].ProcessId); // %s if the project is not in unicode
}
}