Como funciona o "Modo de compatibilidade" no Windows?


Respostas:


31

O modo de compatibilidade é alcançado usando os chamados calços. Há um bom artigo no TechNet descrevendo como isso funciona.

Os arquivos de aplicativos do Windows contêm uma tabela de importação que informa ao carregador de aplicativos quais DLLs o aplicativo precisa e quais funções ele usa a partir deles. Um processo pode, por exemplo, fazer referência GetVersionExno kernel32.dll. Quando um programa é executado no modo de compatibilidade, em seguida, o calço é colocado entre a aplicação e os substitui calços a GetVersionExfunção, para que o aplicativo não chama GetVersionExa partir kernel32.dll, mas o GetVersionExno calço. As funções shimmed implementam o comportamento das versões anteriores do Windows. GetVersionExé uma amostra fácil, cada versão do Windows retorna seus próprios números de versão GetVersionEx; portanto, ao falsificar um Windows antigo, oGetVersionExA função agora não retorna os números de versão do Windows 7, mas, por exemplo, os números de versão do Windows XP. Portanto, o aplicativo acreditará que está sendo executado no Windows XP.

Também houve outras alterações da versão do Windows para a versão do Windows. Nas versões anteriores, por exemplo, se um programa carregava uma DLL, o caminho de pesquisa para a DLL também incluía o diretório atual. Esse é um problema de segurança; portanto, as versões mais recentes do Windows, por padrão, não pesquisam no diretório atual. Com o calço adequado, você pode simular o comportamento antigo.

Como os shims são apenas uma camada entre o aplicativo e a API do Windows, um shim pode fazer o que o aplicativo poderia fazer sozinho. O shim não pode ser usado, por exemplo, para burlar o UAC ou acessar arquivos protegidos.

Se você quiser saber mais, aqui estão alguns links que você pode achar interessantes:

Especialmente o Microsoft Application Compatibility Toolkit vale a pena dar uma olhada. Essa ferramenta fornece uma visão geral dos aplicativos com problemas conhecidos, todas as correções e modos de compatibilidade disponíveis e quais são aplicadas a cada aplicativo.


11
Você satisfez minha curiosidade com exemplos concretos. Obrigado!
Kale Muscarella

6

Eu acho que muitas coisas diferentes acontecem. Um exemplo direto é que um programa pode verificar a versão do Windows, mas fica confuso com o valor de retorno de um novo sistema operacional. Portanto, o uso do modo de compatibilidade informava ao Windows para relatar uma versão errada. Raymond Chen menciona mais algumas coisas: http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590


4

Meu conhecimento do Modo de Compatibilidade é que ele faz com que várias chamadas do sistema Windows ocorram no programa.

Um exemplo óbvio são as funções GetVersionEx e GetVersion que relatam a versão especificada do Windows em vez da versão real.

Os caminhos de arquivo à moda antiga também são convertidos automaticamente quando um programa no modo Compatibilidade se refere a um arquivo em pastas conhecidas do sistema. Por exemplo, C:\Documents and Settingsé traduzido para C:\Users\<user>\Documents quando executando no Windows 7 um programa no modo de compatibilidade com o XP.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.