Конференция "WinAPI" » Открытие процесса другого пользователя
 
  • 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). Теперь бы ещё терминальную сессию и элевацию (под семёркой) без токена умудриться определить...
 
Конференция "WinAPI" » Открытие процесса другого пользователя
Есть новые Нет новых   [134431   +10][b:0][p:0.001]