Reindirizzamento del Registro di sistema

Il reindirizzamento del Registro di sistema isola applicazioni a 32 bit e a 64 bit fornendo viste logiche separate di determinate parti del Registro di sistema in WOW64. Il reindirizzamento del Registro di sistema intercetta le chiamate del Registro di sistema a 32 bit e a 64 bit alle rispettive visualizzazioni del Registro di sistema logico e le esegue il mapping alla posizione del Registro di sistema fisico corrispondente. Il processo di reindirizzamento è trasparente all'applicazione. Pertanto, un'applicazione a 32 bit può accedere ai dati del Registro di sistema come se fosse in esecuzione in Windows a 32 bit anche se i dati vengono archiviati in una posizione diversa in Windows a 64 bit.

Windows 10 in ARM: oltre alla visualizzazione logica a 32 bit per le applicazioni x86, Windows 10 in ARM include una vista logica separata per applicazioni ARM a 32 bit.

Vengono condivisi un subset di chiavi in percorsi del Registro di sistema reindirizzati. Le chiamate del Registro di sistema a 32 bit alle chiavi condivise non vengono reindirizzate. Una copia fisica della chiave viene invece mappata a ogni visualizzazione logica del Registro di sistema. Per un elenco di chiavi reindirizzate e chiavi condivise, vedere Chiavi del Registro di sistema interessate da WOW64.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Per abilitare l'interoperabilità dell'applicazione tramite COM e altri meccanismi, si riflette anche un subset di chiavi del Registro di sistema reindirizzate. Il processo di reflection del Registro di sistema copia le chiavi del Registro di sistema e i valori tra due visualizzazioni del Registro di sistema per mantenerli sincronizzati. La reflection del Registro di sistema è stata rimossa a partire da Windows 7 e Windows Server 2008 R2. Per altre informazioni, vedere Reflection del Registro di sistema.

Lo scenario seguente illustra l'uso di queste viste logiche:

  • Un'applicazione x86 a 32 bit verifica l'esistenza della chiave del Registro di sistema seguente: HKEY_LOCAL_MACHINE\Software\Hello. Se la chiave non esiste, l'applicazione la crea con un valore predefinito "Hello 32-bit x86 world"; in caso contrario, legge e visualizza il valore.
  • La stessa applicazione viene modificata per scrivere "Hello 64-bit world" anziché "Hello 32-bit x86 world" e ricompilata come applicazione x64 a 64 bit o ARM64.
  • Windows 10 in ARM: la stessa applicazione viene modificata per scrivere "Hello 32 bit ARM world" e ricompilata come applicazione ARM a 32 bit.
  • Quando l'applicazione x86 a 32 bit viene eseguita in Windows a 64 bit, visualizza "Hello 32-bit x86 world". Quando viene eseguita l'applicazione a 64 bit, viene visualizzato "Hello 64-bit world". Windows 10 in ARM: quando l'applicazione ARM a 32 bit viene eseguita in Windows ARM64 a 64 bit, viene visualizzato "Hello 32-bit ARM world". Tutte le applicazioni chiamano le stesse funzioni del Registro di sistema con lo stesso handle predefinito e lo stesso nome della chiave; la differenza è che ogni applicazione opera sulla visualizzazione logica del Registro di sistema e ogni visualizzazione viene mappata a una posizione fisica separata del Registro di sistema, che mantiene intatte tutte le versioni della stringa.

Le chiavi reindirizzate vengono mappate a posizioni fisiche in Wow6432Node. Ad esempio, HKEY_LOCAL_MACHINE\Software viene reindirizzato a HKEY_LOCAL_MACHINE\Software\Wow6432Node. Tuttavia, la posizione fisica delle chiavi reindirizzate deve essere considerata riservata dal sistema. Le applicazioni non devono accedere direttamente alla posizione fisica di una chiave, perché questa posizione può cambiare. Per altre informazioni, vedere Accesso a una visualizzazione registro alternativo.

Windows 10 in ARM: le chiavi ARM reindirizzate a 32 bit vengono mappate a posizioni fisiche in WowAA32Node.

Per aiutare le applicazioni a 32 bit che scrivono REG_SZ o REG_EXPAND_SZ dati contenenti %ProgramFiles% o %commonprogramfiles% nel Registro di sistema, WOW64 intercetta queste operazioni di scrittura e le sostituisce con "%ProgramFiles(x86)%" e "%commonprogramfiles(x86)%". Ad esempio, se la directory Programmi si trova nell'unità C, "%ProgramFiles(x86)%" si espande su "C:\Programmi (x86)". La sostituzione si verifica solo se vengono soddisfatte le condizioni seguenti:

  • La stringa deve iniziare con %ProgramFiles% o %commonprogramfiles%. Se la stringa inizia con uno spazio o qualsiasi carattere diverso da %, non viene sostituita.
  • Il caso di %ProgramFiles% o %commonprogramfiles% deve essere esattamente come illustrato perché il confronto tra stringhe è distinzione tra maiuscole e minuscole. Ad esempio, se la stringa inizia con %CommonProgramFiles% anziché %commonprogramfiles%, non viene sostituita.
  • La stringa non può superare MAX_PATH*2+15 caratteri. Se supera questa lunghezza, non viene sostituita.
  • Impossibile aprire la chiave con KEY_WOW64_64KEY. Questo flag specifica che le operazioni sulla chiave devono essere eseguite nella visualizzazione del Registro di sistema a 64 bit, quindi non viene sostituita. Per altre informazioni, vedere Accesso a una visualizzazione registro alternativo.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Il flag di KEY_WOW_64_64KEY non influisce sul fatto che una chiave venga sostituita. Questo flag influisce sulla sostituzione a partire da Windows 7 e Windows Server 2008 R2.

Inoltre, REG_SZ o chiavi di REG_EXPAND_SZ contenenti system32 vengono sostituite con syswow64. La stringa deve iniziare con il percorso che punta a o in %windir%\system32. Il confronto tra stringhe non è distinzione tra maiuscole e minuscole. Le variabili di ambiente vengono espanse prima di corrispondere al percorso, quindi tutti i percorsi seguenti vengono sostituiti: %windir%\system32, %SystemRoot%\system32 e C:\windows\system32. Questa patch viene applicata solo alle chiavi riflesse prima di Windows 7.

Per altre informazioni, vedere gli argomenti seguenti: