Dela via


Omdirigering av register

Registeromdirigeringsdirigering isolerar 32-bitars- och 64-bitarsprogram genom att tillhandahålla separata logiska vyer av vissa delar av registret på WOW64. Registeromdirigeraren fångar upp 32- och 64-bitars registeranrop till respektive logiska registervyer och mappar dem till motsvarande fysiska registerplats. Omdirigeringsprocessen är transparent för programmet. Därför kan ett 32-bitarsprogram komma åt registerdata som om det kördes på 32-bitars Windows även om data lagras på en annan plats i 64-bitars Windows.

Windows 10 på ARM: Förutom 32-bitars logisk vy för x86-program innehåller Windows 10 på ARM en separat logisk vy för 32-bitars ARM-program.

En delmängd av nycklar under omdirigerade registersökvägar delas. 32-bitars registeranrop till delade nycklar omdirigeras inte. I stället mappas en fysisk kopia av nyckeln till varje logisk vy i registret. En lista över omdirigerade nycklar och delade nycklar finns i Registernycklar som påverkas av WOW64.

Windows Server 2008, Windows Vista, Windows Server 2003 och Windows XP: Om du vill aktivera programkompatibilitet via COM och andra mekanismer återspeglas även en delmängd av omdirigerade registernycklar . Processen för registerreflektion kopierar registernycklar och värden mellan två registervyer för att hålla dem synkroniserade. Registerreflektion togs bort från och med Windows 7 och Windows Server 2008 R2. Mer information finns i Registry Reflection.

Följande scenario illustrerar användningen av dessa logiska vyer:

  • Ett 32-bitars x86-program kontrollerar om det finns följande registernyckel: HKEY_LOCAL_MACHINE\Software\Hello. Om nyckeln inte finns skapar programmet den med standardvärdet "Hello 32-bitars x86 world". annars läser och visar den värdet.
  • Samma program ändras för att skriva "Hello 64-bitars värld" i stället för "Hello 32-bitars x86 world" och kompileras om som ett 64-bitars x64- eller ARM64-program.
  • Windows 10 på ARM: Samma program ändras för att skriva "Hello 32-bitars ARM World" och kompileras om som ett 32-bitars ARM-program.
  • När 32-bitars x86-programmet körs på 64-bitars Windows visas "Hello 32-bitars x86 world". När 64-bitarsprogrammet körs visas "Hello 64-bitars värld". Windows 10 på ARM: När 32-bitars ARM-programmet körs på 64-bitars ARM64 Windows visas "Hello 32-bitars ARM World". Alla program anropar samma registerfunktioner med samma fördefinierade handtag och samma nyckelnamn. Skillnaden är att varje program fungerar på den logiska vyn av registret, och varje vy mappas till en separat fysisk plats för registret, som håller alla versioner av strängen intakta.

Omdirigerade nycklar mappas till fysiska platser under Wow6432Nod. Till exempel omdirigeras HKEY_LOCAL_MACHINE\Software till HKEY_LOCAL_MACHINE\Software\Wow6432Node. Den fysiska platsen för omdirigerade nycklar bör dock betraktas som reserverad av systemet. Program bör inte komma åt en nyckels fysiska plats direkt, eftersom den här platsen kan ändras. Mer information finns i Åtkomst till en alternativ registervy.

Windows 10 på ARM: Omdirigerade 32-bitars ARM-nycklar mappas till fysiska platser under WowAA32Node.

För att hjälpa 32-bitarsprogram som skriver REG_SZ eller REG_EXPAND_SZ data som innehåller %ProgramFiles% eller %commonprogramfiles% till registret, fångar WOW64 upp dessa skrivåtgärder och ersätter dem med "%ProgramFiles(x86)%" och "%commonprogramfiles(x86)%". Om katalogen Programfiler till exempel finns på C-enheten expanderas "%ProgramFiles(x86)%" till "C:\Program Files (x86)". Ersättningen sker endast om följande villkor uppfylls:

  • Strängen måste börja med %ProgramFiles% eller %commonprogramfiles%. Om strängen börjar med ett blanksteg eller något annat tecken än %ersätts den inte.
  • Fallet med %ProgramFiles% eller %commonprogramfiles% måste vara exakt som det visas eftersom strängjämförelsen är skiftlägeskänslig. Om strängen till exempel börjar med %CommonProgramFiles% i stället för %commonprogramfiles%ersätts den inte.
  • Strängen får inte överskrida MAX_PATH*2+15 tecken. Om den överskrider den här längden ersätts den inte.
  • Det går inte att öppna nyckeln med KEY_WOW64_64KEY. Den här flaggan anger att åtgärder på nyckeln ska utföras i 64-bitars registervyn, så att den inte ersätts. Mer information finns i Åtkomst till en alternativ registervy.

Windows Server 2008, Windows Vista, Windows Server 2003 och Windows XP: Flaggan KEY_WOW_64_64KEY påverkar inte om en nyckel ersätts. Den här flaggan påverkar ersättning från och med Windows 7 och Windows Server 2008 R2.

Dessutom ersätts REG_SZ eller REG_EXPAND_SZ nycklar som innehåller system32 med syswow64. Strängen måste börja med sökvägen som pekar på eller under %windir%\system32. Strängjämförelsen är inte skiftlägeskänslig. Miljövariabler expanderas innan sökvägen matchas, så alla följande sökvägar ersätts: %windir%\system32, %SystemRoot%\system32 och C:\windows\system32. Den här korrigeringen tillämpas endast på de nycklar som återspeglades före Windows 7.

Mer information finns i följande avsnitt: