-
CRLF (22.08.11 12:32) [0]Под Win7 открываю процесс, запущенный другим пользователем в моей терминальной сессии так (админские права не требуются):OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, ...)
под XP PROCESS_QUERY_LIMITED_INFORMATION не работает, открываюOpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, ...)
, но с процессом, запущенным другим пользователем, даёт ACCESS DENIED. А как бы этот процесс открыть? Затем нужно будет получить полный путь к исполняемому файлу и имя запустившего процесс пользователя. -
CRLF (22.08.11 14:31) [1]В принципе, NtOpenProcess в этой ситуации работает, но хотелось бы чего-то менее экзотического.
-
Rouse_ © (22.08.11 20:46) [2]Это не экзотическая, а вполне документированная АПИ: http://msdn.microsoft.com/en-us/library/ff567022%28VS.85%29.aspx
-
CRLF (23.08.11 10:37) [3]Да, документированная, но в разделе "Driver support routines"... :-)
В частности, смущают коды статусов, несовпадающие с кодами GetLastError. Может, есть стандартная функция NTSTATUS -> error code? -
CRLF (23.08.11 11:45) [4]Ошибка... Не работает NtOpenProcess. $C0000022 ~ ACCESS DENIED
-
Игорь Шевченко © (23.08.11 12:24) [5]
> Может, есть стандартная функция NTSTATUS -> error code?
RtlNtStatusToDosError -
CRLF (23.08.11 12:40) [6]Спасибо.
Но первоначальный вопрос остаётся: как получить имя файла с полным путём и имя пользователя от процесса, запущенного в XP другим пользователем? -
Игорь Шевченко © (23.08.11 13:57) [7]SE_DEBUG_PRIVILEGE выставить ?
-
CRLF (23.08.11 14:38) [8]Спасибо... Я перечислил имеющиеся у процесса привилегии, SeDebugPrivilege он уже имел, я на этом и успокоился. А сейчас посмотрел, оказывается, эта привилегия disabled. Разрешил её, NtOpenProcess заработал (а OpenProcess -- нет). Теперь не хватает прав на OpenProcessToken(TOKEN_QUERY) (для получения имени пользователя).
-
CRLF (23.08.11 16:27) [9]Так... Вроде обошёлся без токена, GetKernelObjectSecurity(OWNER_SECURITY_INFORMATION). Теперь бы ещё терминальную сессию и элевацию (под семёркой) без токена умудриться определить...