2010-08-03 13 views
6

Próbuję uzyskać ścieżkę procesu przez pid, ale otrzymuję komunikat Win32Exception (odmowa dostępu).Odmowa dostępu podczas pobierania ścieżki procesu

Kod wygląda następująco:

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

Próbowałem, używając OpenProcess z GetModuleFileNameEx ale OpenProcess wraca 0. Próbowałem nawet umożliwiając SeDebugPrivilege według C# – How to enable SeDebugPrivilege ale to nie pomogło.

Powyższy kod działa dla większości procesów, ale generuje błąd dla programu SynTPHelper.exe (Synaptics Pointing Device Helper) Aplikacja działa pod tą samą nazwą użytkownika co mój kod. Zarówno moja aplikacja, jak i proces są uruchamiane w 64-bitowej wersji.

Czy mogę odzyskać ścieżkę bez z uruchomieniem mojej aplikacji jako administrator?

Edit

Task Manager jest w stanie „otwartym lokalizacji pliku” mimo, że nie uciekam go jako administrator.

Odpowiedz

12

W końcu udało mi się go rozwiązać. Jak się okazało nie jest nowa funkcja w Windows Vista i wyżej uzyskania ścieżkę procesu i dostępu do nowych procesów (PROCESS_QUERY_LIMITED_INFORMATION):

QueryFullProcessImageName

Oto kod, który działa od nie-podwyższonej procesu:

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; 
    } 
+3

Wielkie dzięki za http://www.aboutmycode.com/net-framework/how-to-get-elevated-process-path-in-net/ (to samo Giorgi?). Simple Copy/Past/Reformat/Dodaj trochę przestrzeni nazw i działa !!! :) –

+0

@Andreas: Tak, to tylko mój blog. – Giorgi

+3

PROCESS_QUERY_LIMITED_INFORMATION = 0x1000; http://msdn.microsoft.com/en-us/library/windows/desktop/ms684880(v=vs.85).aspx – Jason

1

Z pewnością nie jest to niespotykane w przypadku usług usuwania praw dostępu, aby nawet administrator nie mógł otworzyć procesu. Usługa ma wystarczające uprawnienia, aby to zrobić, komponenty DRM, takie jak audiodg.exe, mogą to zrobić. Pomocnik myszy nie wydaje mi się czymś, co wymagałoby takiej ochrony. Ale co, hej, dlaczego ktokolwiek musiałby zadzierać z pomocnikiem myszy?

+0

Nie próbuję z tym walczyć, chcę tylko uzyskać listę procesów, których ścieżka jest pod bieżącym użytkownikiem. – Giorgi

+0

Skontaktuj się z Synaptics, aby uzyskać pomoc. Przygotuj się na Dlaczego? pytanie. –

+0

audiodg.exe jest również chronionym procesem IIRC, więc dostaje taką ochronę za darmo – Anders

Powiązane problemy