Доступ запрещен при получении пути к процессу - PullRequest
6 голосов
/ 03 августа 2010

Я пытаюсь получить путь процесса по pid, но я получаю Win32Exception (идентификатор доступа запрещен).

Код выглядит так:

string path = Process.GetProcessById(pid).MainModule.FileName

Я пытался использовать OpenProcess с GetModuleFileNameEx, но OpenProcess возвращает 0. Я даже пытался включить SeDebugPrivilege согласно C # - Как включить SeDebugPrivilege , но это не помогло.

Приведенный выше код работает для большинства процессов, но выдает ошибку для SynTPHelper.exe (Synaptics Pointing Device Helper). Приложение работает под тем же именем пользователя, что и мой код. И мое приложение, и процесс выполняются в 64-битном режиме.

Можно ли получить путь без запуска моего приложения в качестве администратора?

Редактировать

Диспетчер задач может «открывать местоположение файла», даже если я не запускаю его как администратор.

Ответы [ 2 ]

15 голосов
/ 07 сентября 2010

Наконец мне удалось это решить.Как оказалось, в Vista и выше есть новая функция для получения пути к процессу и доступа к новому процессу (PROCESS_QUERY_LIMITED_INFORMATION):

QueryFullProcessImageName

Вот код, который работает сне повышенный процесс:

    private static string GetExecutablePathAboveVista(UIntPtr dwProcessId)
    {
        StringBuilder buffer = new StringBuilder(1024);
        IntPtr hprocess = OpenProcess(ProcessAccessFlags.PROCESS_QUERY_LIMITED_INFORMATION, false, dwProcessId);
        if (hprocess != IntPtr.Zero)
        {
            try
            {
                int size = buffer.Capacity;
                if (QueryFullProcessImageName(hprocess, 0, buff, out size))
                {
                    return buffer.ToString();
                }
            }
            finally
            {
                CloseHandle(hprocess);
            }
        }
        return string.Empty;
    }
1 голос
/ 03 августа 2010

Что ж, службы, конечно же, не неслыханно удаляют права доступа, поэтому даже администратор не может открыть процесс.Сервис имеет достаточно привилегий для этого, компоненты DRM, такие как audiodg.exe, с готовностью делают это.Помощник коврика для мыши не кажется мне чем-то, что потребовало бы такой защиты.Но что за хрень, зачем кому-то связываться с помощником коврика для мыши?

...