O modo de compatibilidade é alcançado usando os chamados shims. Existe um bom artigo no TechNet descrevendo como eles funcionam.
Os arquivos de aplicativo do Windows contêm uma tabela de importação que informa ao carregador de aplicativo quais DLLs o aplicativo precisa e quais funções ele usa deles. Um processo pode, por exemplo, referenciar GetVersionEx
no kernel32.dll
. Quando um programa for executado no modo de compatibilidade, o shim será colocado entre o aplicativo e o shim substituirá a função GetVersionEx
, para que o aplicativo não chame GetVersionEx
de kernel32.dll
, mas GetVersionEx
no shim. As funções corrigidas 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 em GetVersionEx
, portanto, ao falsificar um Windows antigo, a função GetVersionEx
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.
Houve também algumas outras alterações da versão do Windows para a versão do Windows. Em versões mais antigas, por exemplo, se um programa carregasse uma DLL, o caminho de pesquisa da DLL também incluiria o diretório atual. Esse é um problema de segurança, portanto, 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 contornar o UAC ou acessar arquivos protegidos.
Se você quiser saber mais, aqui estão alguns links que você pode achar interessantes:
- Usando a correção CorrectFilePaths para redirecionar arquivos no Windows Vista
- Criando um shim de compatibilidade de aplicativos com o Kit de ferramentas de compatibilidade de aplicativos da Microsoft
- de compatibilidade-problemas-e-que-são-o-ramifications.aspx ">
Especialmente o Microsoft Application Compatibility Toolkit vale a pena dar uma olhada. Essa ferramenta oferece uma visão geral sobre os aplicativos com problemas conhecidos, todas as correções e modos de compatibilidade disponíveis e quais correções são aplicadas a cada aplicativo.