Ну, я посмотрел на функции API, но попал в тот же тупик, что и вы. Предложение Реми должно работать, пока целевой процесс создает одно или несколько окон верхнего уровня. Мне пришла в голову следующая безумная идея:
- Используйте VirtualAllocEx () для выделения некоторой исполняемой памяти в целевом процессе
- Используйте WriteProcessMemory () для записи некоторого кода в эту память
- Используйте CreateRemoteThread () для выполнения кода в этом процессе
Внедренный код будет вызывать GetProcessWindowStation (), а затем использовать механизм IPC для отправки его обратно в ваш процесс. После того, как вы его получите, используйте VirtualFreeEx () для восстановления оригинального адресного пространства целевого процесса. Есть некоторые дополнительные проблемы, связанные с использованием этого процесса другого пользователя, но он все равно должен работать, если вы работаете от имени администратора.