Я пытаюсь получить имя winstation (например, «winsta0»), которую открыл отдельный процесс, используя только идентификатор процесса. Я не могу найти ничего, что делает это в MSDN. Кажется, у них есть только GetProcessWindowStation(), который работает только для вашего собственного процесса.
Любые идеи?
ОБНОВЛЕНИЕ: Возможно, это часть головоломки...
BOOL ProcessIdToSessionId(__in DWORD dwProcessId, __out DWORD *pSessionId);
2 ответа
Вероятно, вам придется использовать EnumWindowStations(), EnumDesktops(), EnumDesktopWindows() и GetWindowThreadProcessId() для просмотра всех запущенных окон, пока вы не найдете то, которое соответствует нужному идентификатору процесса.
Что ж, я просмотрел функции API, но зашел в тот же тупик, что и вы. Предложение Реми должно работать до тех пор, пока целевой процесс создает одно или несколько окон верхнего уровня. Еще мне пришла в голову следующая бредовая идея:
- Используйте VirtualAllocEx() для выделения некоторой исполняемой памяти в целевом процессе.
- Используйте WriteProcessMemory() для записи кода в эту память.
- Используйте CreateRemoteThread() для выполнения кода в этом процессе.
Внедренный код будет вызывать GetProcessWindowStation(), а затем использовать механизм IPC, чтобы отправить его обратно в ваш процесс. После того, как вы его получите, используйте VirtualFreeEx() для восстановления исходного адресного пространства целевого процесса. Есть некоторые дополнительные проблемы с использованием этого в процессе другого пользователя, но он все равно должен работать, если вы работаете от имени администратора.
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.