Como funciona o “Modo de Compatibilidade” no Windows?

46

Como o Modo de compatibilidade no Windows funciona internamente?

    
por ulrichb 22.04.2010 / 18:55

4 respostas

26

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:

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.

    
por 21.10.2013 / 11:11
6

Eu acho que muitas coisas diferentes acontecem. Um exemplo direto é que um programa pode verificar sua versão do Windows, mas fica confuso com o valor de retorno de um novo sistema operacional. Portanto, usar o modo de compatibilidade informaria às janelas para relatar uma versão incorreta. Raymond Chen menciona mais algumas coisas: link

    
por 22.04.2010 / 21:58
2

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

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

Caminhos de arquivos antigos também são traduzidos automaticamente quando um programa no modo Compatibilidade refere-se a um arquivo em pastas de sistema conhecidas. Por exemplo, C:\Documents and Settings é traduzido para C:\Users\<user>\Documents ao executar no Windows 7 um programa no modo de compatibilidade do XP.

    
por 21.10.2013 / 08:13
-5

Este artigo explica bem isso.

link

With Windows 7, however, Redmond has provided a solution to the problem: Windows XP Mode. Windows XP Mode uses virtualization technology to let applications running on a virtualized copy of Windows XP show up in the Windows 7 Start menu and on the Windows 7 desktop.

    
por 31.12.2012 / 18:05