Psutil повышает AccessDenied для всех процессов, не принадлежащих пользователю, при получении атрибутов процесса

Я столкнулся с серьезной проблемой: я не могу получить доступ к информации о (большинстве) процессах, которые не принадлежат пользователю. Например, следующее:

for proc in psutil.process_iter(): try: print proc.pid, proc.username except psutil.AccessDenied: print "denied" 

печатает:

 0 NT AUTHORITY\SYSTEM 4 NT AUTHORITY\SYSTEM 428 denied 444 denied 632 my_user 648 denied 676 my_user 704 denied 748 denied 772 denied 804 denied 824 denied 832 denied 880 my_user 920 denied 988 denied 1052 denied ... 

Для этих же «отрицаемых» процессов такие методы, как get_cpu_times (), работают нормально.

UPD: Извините, я много раз запускал эту вещь с разными атрибутами и разными отпечатками, что я вставлял вывод из другого фрагмента кода (печатное username , а не name ). Но, надеюсь, дело до сих пор ясно …

Похоже, что ошибка возникает в базовом C-коде. Я не знаю, почему GetProcessImageFileName () предпочтительнее QueryFullProcessImageName () (поскольку последний возвращает путь, как мы ожидали, используя буквы диска / UNC-пути), но может случиться так, что вызов будет терпеть неудачу для одного.

Вероятно, вам придется обсудить это с разработчиками .

Из _psutil_mswindows.c (строка 502):

 if (GetProcessImageFileName(hProcess, &exe, nSize) == 0) { CloseHandle(hProcess); if (GetLastError() == ERROR_INVALID_PARAMETER) { // see https://code.google.com/p/psutil/issues/detail?id=414 AccessDenied(); } else { PyErr_SetFromWindowsErr(0); } return NULL; } 

РЕДАКТИРОВАТЬ:
Я попытался сделать немного больше исследований симптомов, и у меня есть немного больше, чтобы сообщить. На более или менее полностью исправленной машине Win7 SP1 x64 с относительно недавним Python 2 (2.7.6) я не могу получить доступ к этим членам класса psutil.Process : exe , get_ionice() , get_memory_maps() , get_nice() , get_cwd() / getcwd() , get_open_files() , name , nice и username .

Эта информация, конечно же, доступна любому администратору Windows-машины, поэтому я не знаю, почему psutil не удается ее получить, если это не делается в The Wrong Way ™ (постоянно движущейся цели, определенной Microsoft).