Come funziona la "Modalità di compatibilità" in Windows?


Risposte:


27

La modalità di compatibilità si ottiene usando i cosiddetti shim. C'è un buono articolo su TechNet descrivendo come funzionano questi

I file di applicazione di Windows contengono una tabella di importazione che indica al caricatore di applicazioni le DLL di cui l'applicazione ha bisogno e le funzioni che utilizza da esse. Un processo potrebbe per esempio riferimento GetVersionEx nel kernel32.dll. Quando un programma deve essere eseguito in modalità di compatibilità, lo spessore viene inserito tra l'applicazione e lo spessore sostituisce il GetVersionEx funzione, in modo che l'applicazione non chiama GetVersionEx a partire dal kernel32.dll ma il GetVersionEx nello spessore. Le funzioni shimmed implementano quindi il comportamento delle precedenti versioni di Windows. GetVersionEx è un semplice esempio, ogni versione di Windows restituisce i propri numeri di versione in GetVersionEx, quindi quando si simula un vecchio Windows GetVersionEx la funzione ora non restituisce i numeri di versione di Windows 7 ma, ad esempio, i numeri di versione di Windows XP. Quindi l'applicazione crederà che sia in esecuzione su Windows XP.

Ci sono stati anche altri cambiamenti dalla versione di Windows alla versione di Windows. Nelle versioni precedenti, ad esempio, se un programma caricava una DLL, il percorso di ricerca della DLL includeva anche la directory corrente. Questo è un problema di sicurezza, quindi le nuove versioni di Windows per impostazione predefinita non eseguono ricerche nella directory corrente. Con lo shim corretto puoi simulare il vecchio comportamento.

Poiché gli shim sono solo uno strato tra l'applicazione e l'API di Windows, uno shim può semplicemente eseguire ciò che l'applicazione potrebbe eseguire autonomamente. Lo shim non può essere utilizzato ad esempio per aggirare UAC o accedere a file protetti.

Se vuoi saperne di più, ecco alcuni link che potresti trovare interessanti:

Soprattutto vale la pena dare un'occhiata a Microsoft Application Compatibility Toolkit. Questo strumento offre una panoramica delle applicazioni con problemi noti, tutte le correzioni e le modalità di compatibilità disponibili e quali correzioni sono applicate a ciascuna applicazione.


1
Hai soddisfatto con successo la mia curiosità con esempi concreti. Grazie!
Kale Muscarella

6

Penso che succedano molte cose diverse. Un esempio semplice è che un programma potrebbe controllare la versione di Windows, ma essere confuso dal valore di ritorno di un nuovo sistema operativo. Quindi utilizzando la modalità di compatibilità direi a Windows di segnalare una versione sbagliata. Raymond Chen menziona alcune altre cose: http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590


2

La mia conoscenza della modalità di compatibilità è che causa diverse chiamate di sistema di Windows a mentire al programma.

Un ovvio esempio sono le funzioni GetVersionEx e GetVersion quale relazione la versione di Windows specificata invece di quella reale.

Anche i percorsi di file vecchio stile vengono automaticamente tradotti quando un programma è in modalità Compatibilità si riferisce a un file in cartelle di sistema note. Per esempio C:\Documents and Settings è tradotto a C:\Users\<user>\Documents quando si esegue su Windows 7 un programma in modalità di compatibilità XP.


-5

Questo articolo fa un buon lavoro di spiegarlo.

http://arstechnica.com/information-technology/2010/01/windows-xp-mode/

Con Windows 7, tuttavia, Redmond ha fornito una soluzione al problema: Modalità Windows XP. La modalità Windows XP utilizza la tecnologia di virtualizzazione per far apparire le applicazioni in esecuzione su una copia virtualizzata di Windows XP nel menu Start di Windows 7 e sul desktop di Windows 7.


4
Modalità Windows XP! = Modalità di compatibilità
Kevin Mark
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.