2009-10-09 10 views
2

У меня возникла проблема с программой, над которой я сейчас работаю. Это связано с повышенной безопасностью в Vista/Windows 7, в частности с UIPI, которая препятствует тому, чтобы окно с более низким уровнем целостности «разговаривало» с более высоким.Доступ к внешним оконным ручкам

В моем случае я хочу сказать окну с высоким уровнем целостности, чтобы перейти в наше приложение, оно работает безупречно на XP или Windows 7 с отключенной безопасностью.

Я попытался установить HWND верхнего окна IL напрямую, вместо использования функции findwindow() это работает отлично, но программа не работает при попытке ее перемещения или вообще взаимодействует с ней. Ручка окна сохраняется приложением, которое должно быть встроено и прочитано приложением, работающим на нижнем ИЛ.

Я также попытался настроить UIaccess в манифесте на ИСТИННО и цифровое подписание программы, но не повезло.

Любые идеи о том, как решить эту проблему? спасибо.

ответ

3

Просто подумал, что я последую за этим для тех, кто также боролся, поскольку я наконец нашел способ сделать это.

IL = Уровень целостности.

У меня было 2 приложения, highIL.exe и lowIL.exe, highIL хотел найти окно lowIL.exe, установить его как дочернее окно и переместить его в зону, созданную для него на файле highIL.exe. Это было заблокировано UIPI в Vista +.

В конце я использовал метод ChangeWindowMessageFilter в Vista и ChangeWindowMessageFilterEx в Windows7, оба найденные в user32.dll. Эти функции позволяют вытолкнуть отверстие в UIPI, чтобы разрешить сообщения, которые вы хотите.

Я создал несколько пользовательских сообщений с помощью функции RegisterWindowMessage, я использовал эту функцию, чтобы зарегистрировать метод в обоих highIL и lowIL приложений, линия выглядела немного как это:

const UINT MY_MOVEINTWINDOW_MSG = RegisterWindowMessage(_T("MyMsg.MoveWindow")); 

lowIL.exe затем могут отправлять эти сообщения в окно highIL.exe без их блокировки. Тогда это был случай просто добавления и записи обработчиков сообщений.

Этот метод будет работать только в том случае, если у вас есть доступ к высокому и низкому ИЛ. В MSDN также есть рабочий пример функции ChangeWindowMessageFilterEx Website