Найти "скрытые" процессы Windows в .NET - PullRequest
0 голосов
/ 31 октября 2011

Я пытаюсь перечислить все процессы, запущенные на моей машине:

public int EnumProcesses()
{   
    Process[] ProList = Process.GetProcesses();
    Proc.iProcessNum = ProList.Length;
    for (int i = 0; i < ProList.Length; i++)
    {
        PrintProcess(ProList[i]);
    }          
    return 0;
}

Некоторые процессы (например, игры, запускаемые с XTrap) не найдены Process.GetProcesses(). Диспетчер задач может их видеть, хотя. Как я могу найти эти «скрытые» процессы?


Теперь я поднял его processID, но processName - это «призрак» (истинное имя - ge.exe, но я получаю chrome.exe или что-то еще). Я попробовал с

GetModuleFileName()
GetModuleHandle()
GetModuleHandleEx()

Почему Диспетчер задач и ProcessExplorer могут показывать значение true, Любое дает мне решение.

1 Ответ

2 голосов
/ 31 октября 2011

Скорее всего, ваша программа не работает с достаточными правами для получения информации о других процессах.

Только при выполнении от имени SYSTEM вы получите каждое имя процесса, но для других вы можете запросить, чтобы ваше приложение выполнялось с правами администратора (обычно путем указания уровня UAC в манифесте приложений) (вам также может потребоваться включить SeDebugPrivilege в процессе доступа к токену), и это должно позволить вам увидеть большинство из них.

Кроме того, обращение к нативному API сделало бы вещи более понятными, поскольку для выполнения именно этих задач уже используется множество примеров кода.

EDIT ::

GetModuleFileName предназначен только для использования на модулях процесса (т.е. DLL), и даже тогда они должны быть загружены текущим процессом. Что вы ищете:

GetProcessImageFileName

Пока вы можете открыть дескриптор процесса с требуемым доступом, он должен работать. Вот ссылка на документацию msdn для GetProcessImageFileName: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683217%28v=vs.85%29.aspx

Обратите внимание, что ProcessExplorer загружает драйвер и, таким образом, имеет полный доступ к системе, следовательно, он может найти практически все. TaskManager использует несколько печально известных API для получения данных. Они слишком много, чтобы попасть сюда, хотя.

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