Доступ к внешним оконным ручкам - PullRequest
2 голосов
/ 09 октября 2009

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

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

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

Я также попытался установить для UIaccess в манифесте значение ИСТИНА и подписать программу цифровой подписью, но безуспешно.

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

1 Ответ

3 голосов
/ 14 октября 2009

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

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 без их блокировки. Тогда это был случай простого добавления и написания обработчиков сообщений.

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

...