Вот результаты из нескольких функций:
- EnumProcesses: 16 мс, 207 процессов
- CreateToolhelp32Snapshot: 141 мс (16 мс), 207 процессов
- WTSEnumerateProcesses: 16 мсек, 207 процессов
- WTSEnumerateProcessesEx (WTS_CURRENT_SESSION): 16 мсек, 98 процессов
- WTSEnumerateProcessesEx (WTS_ANY_SESSION): 16 мсек, 207 процессов
Машина работаетWindows 8 с включенным UAC, пользователь не имеет прав (например, не имеет доступа к системным процессам).Основной процесс - 32-разрядный, машина - 64-разрядная, поэтому существует множество 64-разрядных процессов.Существуют: сеанс 0 для системы, сеанс 1 для текущего пользователя консоли, сеанс 2 для другого пользователя быстрого переключения.Всего 207 процессов (как 32-, так и 64-битных, включая псевдосистемный процесс). 207 также подтверждается Process Explorer.Среди этих 207 процессов: 23 процесса предназначены для сеанса 2, 98 процессов - для сеанса 1, а остальные - для сеанса 0.
Результаты приведены для цикла из 10 отдельных вызовов функций.Они воспроизводятся на 100% при каждом запуске.
Для CreateToolhelp32Snapshot основным результатом является вызов самого CreateToolhelp32Snapshot, а вторым результатом (в скобках) является цикл с First / Next.
Я думаю, что люди путают«перечислить все процессы» (получить PID) и «получить имя процесса / exe».Первый (enumerate) не имеет проблем с кросс-битностью x32 / x64.Но у последнего («get name») действительно есть проблемы - не каждый метод будет работать в x32 / x64.