Acesso a alças de janela externas
-
20-09-2019 - |
Pergunta
Estou tendo um problema com o programa em que estou trabalhando atualmente. É causado pelo aumento da segurança no Vista/Windows 7, especificamente o UIPI que impede uma janela com um nível de integridade mais baixo 'conversando' com um maior.
No meu caso, estou querendo dizer à janela com um alto nível de integridade para mudar para o nosso aplicativo, ele funciona perfeitamente no XP ou Windows 7 com a segurança desligada.
Eu tentei definir diretamente o HWND da janela IL mais alta, em vez de usar a função findWindow (), isso funciona bem, mas o programa falha ao tentar movê -lo ou geralmente interage com ele. O WindowHandle é salvo pelo aplicativo a ser incorporado e lido pelo aplicativo em execução em uma IL mais baixa.
Eu também tentei definir o UiAiacess no manifesto como verdadeiro e assinar digitalmente o programa, mas sem sorte.
Alguma idéia de como resolver esse problema? obrigado.
Solução
Apenas pensei em seguir isso para quem também lutou, pois finalmente encontrei uma maneira de fazer isso.
IL = nível de integridade.
Eu tinha 2 aplicativos, Highil.exe e Lowil.exe, o Highil queria encontrar a janela Lowil.exe, definir -o como uma janela infantil e movê -la para uma zona criada para ele no Highil.exe. Isso foi bloqueado pelo UIPI no Vista+.
No final, usei o método ChangeWindowMessageFilter no Vista e o ChangeWindowMessageFilterex no Windows7, ambos encontrados no usuário32.dll. Essas funções permitem que você cutuque um buraco no UIPI para permitir mensagens que você deseja.
Criei algumas mensagens personalizadas usando a função RegisterWindowMessage, usei essa função para registrar o método em aplicativos Highil e Lowil, a linha parecia um pouco assim:
const UINT MY_MOVEINTWINDOW_MSG = RegisterWindowMessage(_T("MyMsg.MoveWindow"));
O lowil.exe pode enviar essas mensagens para a janela Highil.exe sem que elas sejam bloqueadas. Então foi um caso de simplesmente adicionar e escrever manipuladores de mensagens.
Esse método só funcionará se você tiver acesso à IL alta e baixa. O MSDN também tem um exemplo de funcionamento da função ChangeWindowMessageFilterex Local na rede Internet