Win32: Как отправить сообщение процессу, запущенному другим пользователем в Windows?

Мы запускаем два приложения, каждое из которых регистрирует одно и то же сообщение, используя RegisterWindowMessage(): приложение A в качестве обычного пользователя и приложение B в качестве администратора в сеансе одного и того же пользователя на компьютере, и эти приложения отправляют это сообщение одно в другое. Когда A и B работали как один и тот же пользователь, все было хорошо, и мы могли общаться с помощью обмена сообщениями PostMessage(). Теперь, когда приложение B запускается от имени администратора, сообщения больше не поступают. Что мы можем с этим поделать?

Обязывает ли эта ситуация нас использовать другие механизмы (кроме сообщений)?

1 ответ

Решение

В Windows Vista и более поздних версиях изоляция привилегий пользовательского интерфейса (UIPI) не позволяет процессу с более низкой целостностью отправлять оконные сообщения процессу более высокой целостности. В более ранних версиях Windows вредоносный код мог атаковать административные процессы, злоупотребляя сообщениями окна. По умолчанию UIPI блокирует все сообщения со значением выше WM_USER, который включает в себя сообщения, зарегистрированные через RegisterWindowMessage(), Таким образом, чтобы позволить А отправлять такие сообщения B, B должен сначала вызвать ChangeWindowMessageFilter() или же ChangeWindowMessageFilterEx() для каждого заблокированного сообщения, которое оно хочет получить от процессов с более низкой целостностью.

Другие вопросы по тегам