Como o Modo de Compatibilidade no Windows funciona internamente?
Como o Modo de Compatibilidade no Windows funciona internamente?
Respostas:
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 GetVersionEx
no 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 GetVersionEx
função, para que o aplicativo não chama GetVersionEx
a partir kernel32.dll
, mas o GetVersionEx
no 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, oGetVersionEx
A 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.
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
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.
Este artigo explica muito bem.
http://arstechnica.com/information-technology/2010/01/windows-xp-mode/
No Windows 7, no entanto, Redmond forneceu uma solução para o problema: Modo Windows XP. O Windows XP Mode usa a tecnologia de virtualização para permitir que aplicativos em execução em uma cópia virtualizada do Windows XP apareçam no menu Iniciar do Windows 7 e na área de trabalho do Windows 7.