API на WOW6432Node и RegOpenKeyEx

Регистърът за 64-битови версии на Windows е разделен на 32-битови и 64-битови ключове. Повечето 32-битови дялове имат същите имена като техните 64-битови двойници и обратно. По подразбиране 64-битовите версии на Windows използват 32-битово картографиране на дялове под WOW6432Node. Процесът на картографиране е прозрачен за 32-битови приложения, т.е. те имат достъп до ключовете на системния регистър, сякаш работят в 32-битова среда, въпреки че данните се съхраняват другаде.

Това поведение причинява проблеми, когато 32-битови приложения се опитват да осъществят достъп до WOW6432Node с помощта на Windows API функции (като RegOpenKeyEx и RegEnumKeyEx). При достъп до възела HKLM\Software\Wow6432Node възниква пренасочване и се появява безкраен цикъл под формата на HKLM\Software\Wow6432Node\Wow6432Node\Wow6432Node\. и т.н. Такива грешки често могат да се срещнат в различни помощни програми за 32-битов регистър, като например тук.

Започвайки с Windows Server 2008, възелът HKLM\Software\Wow6432Node е скрит от функцията RegEnumKeyEx, което не гарантира, че няма да има безкрайна рекурсия при опит за директен достъп до него.

Ако искате да работите с 64-битови ключове на системния регистър от 32-битова програма, тогава трябва да отворите възела HKLM\Software с помощта на ключа KEY_WOW64_64KEY. Но не се опитвайте да получите директен достъп до WOW6432Node и избягвайте създаването на нови възли на регистъра с това име.

Пример за грешка, свързана с WOW6432Node, е дефект в софтуерен пакет, състоящ се от взаимодействащи 32-битови и 64-битови модули, които използват различни представяния на системния регистър. В една от програмите, следнотолинията в 32-битовия модул стана неработеща:

За да направите тази програма приятели с други 64-битови части, трябва да въведете ключа KEY_WOW64_64KEY:

Библиографски списък

  • MSDN библиотека. дали HKLM\Software\Wow6432Node\Wow6432Node\Wow6432Node не е визуална c++ грешка?
  • MSDN библиотека. 32-битови и 64-битови данни за приложения в регистъра.

regopenkeyex

Намерете грешки във вашия C, C++, C# и Java код

Предлагаме да опитате да проверите кода на вашия проект с помощта на анализатора на код PVS-Studio. Една грешка, намерена в него, ще ви каже повече за предимствата на методологията за анализ на статичен код, отколкото дузина статии.