Accesso negato durante il percorso del processo

Sto cercando di ottenere il percorso del processo da pid, ma sto ricevendo Win32Exception (accesso ID negato).

Il codice si presenta così:

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

Ho provato a utilizzare OpenProcess con GetModuleFileNameEx ma OpenProcess restituisce 0. Ho persino provato a abilitare SeDebugPrivilege secondo C # – Come abilitare SeDebugPrivilege ma non è stato d’aiuto.

Il codice sopra riportato funziona per la maggior parte dei processi, ma genera un errore per SynTPHelper.exe (Synaptics Pointing Device Helper) L’applicazione è in esecuzione con lo stesso nome utente del mio codice. Entrambi, la mia applicazione e il processo funzionano a 64 bit.

È ansible recuperare il percorso senza eseguire la mia applicazione come amministratore?

modificare

Task Manager è in grado di ‘aprire la posizione del file’ anche se non lo sto eseguendo come amministratore.

Finalmente sono riuscito a risolverlo. Come si è scoperto c’è una nuova funzione in Vista e sopra per ottenere il percorso del processo e l’accesso al nuovo processo (PROCESS_QUERY_LIMITED_INFORMATION):

QueryFullProcessImageName

Ecco il codice che funziona dal processo non elevato:

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

Bene, non è certamente inaudito per i servizi di rimuovere i diritti di accesso in modo che anche un amministratore non può aprire il processo. Un servizio ha abbastanza privilegi per farlo, i componenti DRM come audiodg.exe lo fanno facilmente. Un aiutante del mouse pad non mi sembra una cosa che richiederebbe una simile protezione. Ma quale hey, perché qualcuno avrebbe mai dovuto pasticciare con un aiutante del mouse pad?