Эксперт WindowsАвтор FAQ
17829 / 7564 / 889
Регистрация: 25.12.2011
Сообщений: 11,314
Записей в блоге: 17
1

Проверка ключей реестра на подверженность перенаправлению Wow6432 (redirected, shared, reflected)

28.05.2016, 13:38. Показов 12844. Ответов 2

Введение

Привет!
Для тех, кому все это в новинку поясню, что для 64-разрядных ОС некоторые ключи в реестре существуют в двух представлениях:
- для х64 битных приложений.
- для х32 битных приложений.

Пример:

1. Ключ HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\CLSID (и все его подразделы) - является 64-битным
2. Ключ HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\Wow6432Node\CLSID (и все его подразделы) - 32-битным.

Если вы попытаетесь в 64-битной ОС с помощью 32-разрядного приложения прочитать/записать/удалить и.т.п... ключ № 1, произойдет перенаправление, и действие выполнится с ключем № 2.

Это пример обычного перенаправления (redirected).

Виды перенаправлений

В плане переадресации существуют такие виды ключей реестра:
1. Перенаправляемые (redirected)
2. Общие (shared)
3. Отраженные (reflected)
4. Также выделю отдельной группой симлинки (symlink), связанные с механизмом registry redirector.

1. Перенаправляемые (redirected).

Пример таких ключей описан выше (см. Введение).

2. Общие (shared)

Возьмем для примера такие ключи:
а) HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVers ion\Policies (32-битное представление)
б) HKLM\Software\Microsoft\Window s\CurrentVersion\Policies (64-битное представление)

В виду особой важности, некоторые ключи в обеих представлениях (64 и 32) физически ссылаются на один и тот же ключ. Это означает, что если Вы измените ключ под Wow6432Node (ключ а.), то изменения будут видны и в ключе б. И наоборот.

3. Отраженные (reflected).

Такие ключи использовались в ОС Windows Server 2008 / Vista / Server 2003 / XP.
Начиная с Windows 7 они были заменены на Shared (общие ключи, см. выше).

Отличием от Shared ключей является то, что физически - это 2 разных ключа. Но, как только программа завершает запись в любой из этих ключей, он автоматически копируется в другое представление. Таким образом, их состояние синхронизируется между собой.

4. Симлинки, связанные с переадресацией под Wow64.

Microsoft не рекомендует использовать для доступа к 32-разрядным ключам жестко закодированные строки, проходящие через имя Wow6432Node. Вместо этого есть цивилизованные способы.

Однако, некоторые программисты все же используют такие пути. И это могло бы плохо закончится, потому что, начиная с Windows 7 (?) путь к Wow6432Node для некоторых ключей изменился, а для других было вообще отключено 32-битное представление.

Тем не менее, MS позаботилась о таких ситуациях и ввела поправочные симлинки.
Так, согласно офф. документации, известны такие симлинки, перенаправляющие запросы от одного ключа к другому (независимо от разрядности программы):
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wo w6432Node\Classes указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\Wow6432Node
  • HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\Wow6432Node\AppId указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\AppId
  • HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\Wow6432Node\PROTOCOLS указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\PROTOCOLS
  • HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\Wow6432Node\Typelib указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\Typelib
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wo w6432Node\Classes указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\Wow6432Node (для ОС Windows Server 2008 / Vista / Server 2003 / XP)
Это не исключительный список и со времен Win 7 было добавлено еще многое, но в документации об этом ничего нет.
Так что мы чуть-чуть умнее, и можем сами у себя посмотреть, какие еще есть симлинки, связанные с механизмом переадресации.

Возьмем замечательную утилиту ListRegistryLinks от Helge Klein, и выполним в командной строке, например, такое для улья HKLM:
Код
ListRegistryLinks-x64.exe HKLM | find /i "Wow6432Node"
Итог для Windows 7 x64

"HKLM\SOFTWARE\Classes\Wow6432 Node\AppID" -> "HKLM\SOFTWARE\Classes\AppID" (заметьте, что ключ больше не указывает на Wow6432Node, а значит в этой версии ОС просто отказались от 32-битного представления этого ключа и некоторых других (см. ниже аналогичные))
"HKLM\SOFTWARE\Classes\Wow6432 Node\PROTOCOLS" -> "HKLM\SOFTWARE\Classes\PROTOCO LS"
"HKLM\SOFTWARE\Classes\Wow6432 Node\TypeLib" -> "HKLM\SOFTWARE\Classes\TypeLib "
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Cryptography\Calais\Cur rent" -> "HKLM\SOFTWARE\Microsoft\Crypt ography\Calais\Current"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Cryptography\Calais\Rea ders" -> "HKLM\SOFTWARE\Microsoft\Crypt ography\Calais\Readers"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Cryptography\Services" -> "HKLM\SOFTWARE\Microsoft\Crypt ography\Services"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\CTF\SystemShared" -> "HKLM\SOFTWARE\Microsoft\CTF\S ystemShared"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\CTF\TIP" -> "HKLM\SOFTWARE\Microsoft\CTF\T IP"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Notepad\DefaultFonts" -> "HKLM\SOFTWARE\Microsoft\Notep ad\DefaultFonts"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Software\Microsoft\Shar ed Tools\Msinfo" -> "HKLM\SOFTWARE\Microsoft\Softw are\Microsoft\Shared Tools\Msinfo"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows\CurrentVersion\ Control Panel\Cursors\Schemes" -> "HKLM\SOFTWARE\Microsoft\Windo ws\CurrentVersion\Control Panel\Cursors\Schemes"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows\CurrentVersion\ explorer\AutoplayHandlers" -> "HKLM\SOFTWARE\Microsoft\Windo ws\CurrentVersion\Explorer\Aut oplayHandlers"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows\CurrentVersion\ explorer\DriveIcons" -> "HKLM\SOFTWARE\Microsoft\Windo ws\CurrentVersion\Explorer\Dri veIcons"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows\CurrentVersion\ explorer\KindMap" -> "HKLM\SOFTWARE\Microsoft\Windo ws\CurrentVersion\Explorer\Kin dMap"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows\CurrentVersion\ Telephony\Locations" -> "HKLM\SOFTWARE\Microsoft\Windo ws\CurrentVersion\Telephony\Lo cations"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows\CurrentVersion\ App Paths" -> "HKLM\SOFTWARE\Microsoft\Windo ws\CurrentVersion\App Paths"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows\CurrentVersion\ Group Policy" -> "HKLM\SOFTWARE\Microsoft\Windo ws\CurrentVersion\Group Policy"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows\CurrentVersion\ Policies" -> "HKLM\SOFTWARE\Microsoft\Windo ws\CurrentVersion\Policies"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows\CurrentVersion\ PreviewHandlers" -> "HKLM\SOFTWARE\Microsoft\Windo ws\CurrentVersion\PreviewHandl ers"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows\CurrentVersion\ Setup" -> "HKLM\SOFTWARE\Microsoft\Windo ws\CurrentVersion\Setup"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\Console" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\Console"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\FontDPI" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\FontDPI"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\FontLink" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\FontLink"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\FontMapper" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\FontMapper"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\Fonts" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\Fonts"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\FontSubstitu tes" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\FontSubstitu tes"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\GRE_Initiali ze" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\GRE_Initiali ze"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\Image File Execution Options" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\Image File Execution Options"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\LanguagePack " -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\LanguagePack "
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\NetworkCards " -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\NetworkCards "
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\Perflib" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\Perflib"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\Ports" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\Ports"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\Print" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\Print"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\ProfileList" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\ProfileList"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Windows NT\CurrentVersion\Time Zones" -> "HKLM\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\Time Zones"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\COM3" -> "HKLM\SOFTWARE\Microsoft\C OM3"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\DFS" -> "HKLM\SOFTWARE\Microsoft\D FS"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Driver Signing" -> "HKLM\SOFTWARE\Microsoft\Drive r Signing"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\EnterpriseCertificates" -> "HKLM\SOFTWARE\Microsoft\Enter priseCertificates"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\EventSystem" -> "HKLM\SOFTWARE\Microsoft\Event System"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\MSMQ" -> "HKLM\SOFTWARE\Microsoft\M SMQ"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Non-Driver Signing" -> "HKLM\SOFTWARE\Microsoft\N on-Driver Signing"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Ole" -> "HKLM\SOFTWARE\Microsoft\O le"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Ras" -> "HKLM\SOFTWARE\Microsoft\R as"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Rpc" -> "HKLM\SOFTWARE\Microsoft\R pc"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\SystemCertificates" -> "HKLM\SOFTWARE\Microsoft\Syste mCertificates"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\TermServLicensing" -> "HKLM\SOFTWARE\Microsoft\TermS ervLicensing"
"HKLM\SOFTWARE\Wow6432Node\Mic rosoft\Transaction Server" -> "HKLM\SOFTWARE\Microsoft\Trans action Server"
"HKLM\SOFTWARE\Wow6432Node\Cla sses" -> "HKLM\SOFTWARE\Classes\Wow6432 Node"
"HKLM\SOFTWARE\Wow6432Node\Cli ents" -> "HKLM\SOFTWARE\Clients"
"HKLM\SOFTWARE\Wow6432Node\Pol icies" -> "HKLM\SOFTWARE\Policies"
"HKLM\SOFTWARE\Wow6432Node\Reg isteredApplications" -> "HKLM\SOFTWARE\RegisteredAppli cations"



Перечень ключей реестра, подверженных переадресации

Такой перечень присутствует на сайте Microsoft, но он давно не обновлялся.
Я написал скрипт (батник), который позволяет проверить индивидуальный (введенный вами) ключ на предмет его перенаправления таких видов:
1) Shared
2) Redirected

Если ключ обычный - батник ничего не выведет.
Рекомендуется пользоваться батником на виртуальной машине, т.к. он оставляет мусор в виде пустых ключей в 32-битном представлении. Они специально не удаляются в целях безопасности (чтобы ничего лишнего не наудалять).
Также он не особо хорошо тестировался. Я на 100% не гарантирую, что он все правильно определит.
Тем не менее, по моим ручным тестам (с подтверждением) уже нашлись расхождения даже с официальной информацией, например, на Windows 7 ключ
HKEY_LOCAL_MACHINE\SOFTWARE\Cl asses\HCP
является обычным, а не Shared.
Код батника


Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@echo off
SetLocal EnableExtensions
 
echo Registry key redirection Tester by Dragokas
echo.
:: Random Data
set "Param=Wow_Test_345165894610759061862530751907892615"
set "Data=Dragokas-123"
set "x32_Reg=%SystemRoot%\SysWow64\reg.exe"
 
net session >NUL 2>NUL || (echo WARNING: Admin privileges required to test HKLM keys.& echo.)
 
:begin
set "key="
set /p "key=Enter key: "
echo.
if "%key%"=="" exit /B
echo "%key%" | find /i "\Wow6432Node" >NUL && (echo Wow6432Node is forbidden. &echo. & goto begin)
echo "%key%" | find /i "\SOFTWARE\Classes" >NUL && (
  set "key32=%key:\SOFTWARE\Classes\=\SOFTWARE\Classes\Wow6432Node\%"
) || (
  set "key32=%key:\SOFTWARE\=\SOFTWARE\Wow6432Node\%"
)
:: delete x64 data
reg delete "%key%" /v "%Param%" /f 2>NUL >&2
:: add x32 data
reg add "%key32%" /v "%Param%" /t REG_SZ /d %Data% /f >NUL
:: Checking Shared mode
reg query "%key%" /v "%Param%" 2>NUL >&2 && (
  echo Shared.
) || (
  rem Checking for redirection
  "%x32_Reg%" query "%key%" /v "%Param%" 2>NUL >&2 && echo Redirected.
)
:: Clean
reg delete "%key32%" /v "%Param%" /f 2>NUL 1>&2
echo.
echo ---------------------------
echo.
goto begin

Скрипт запускать правой кнопкой мыши "От имени администратора", если проверяете ключи HKLM.

Спасибо за чтение.
Надеюсь, Вам окажется полезной эта заметка.
Вложения
Тип файла: zip Get_Key_Redirect_Info.zip (743 байт, 6 просмотров)
8
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2016, 13:38
Ответы с готовыми решениями:

Проверка изменения ключей в разделов реестра
Помогите сделать проверку только уже выбранных разделов реестра: ссылка на программу для проверки...

Генерация и проверка на работоспособность ключей активации (регистрационных ключей)
Помогите придумать как можно осуществить сие деяние. Суть заключается в чем, первая программа...

Экспорт ключей реестра
Есть программка которая удаляет найденые ключи реестра, хочу добавить возможность экспортировать...

Удаление ключей реестра с исключением
//--------------------------------------------------------------------------- #include <vcl.h>...

2
киберпаразит
Эксперт Windows
9718 / 2782 / 188
Регистрация: 14.06.2011
Сообщений: 9,586
29.05.2016, 16:31 2
Dragokas, ОГРОМНЫЙ пасиб!!!

Не по теме:

(не лень же было разбираться :) )

0
Dragokas
29.05.2016, 16:57  [ТС]     Проверка ключей реестра на подверженность перенаправлению Wow6432 (redirected, shared, reflected)
  #3

Не по теме:


Разбираться особо не пришлось, так как постоянно с этим работаю.
Понадобилось сделать для постоянного использования скрипт-тестер.
А когда решил ним поделиться, то понял, что он не имеет смысла без описания механизма, так и написал шпаргалку.

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2016, 16:57

Изменение ключей реестра Windows
Мне необходимо в реестре поменять IpAdress В пути к соотв. переменной реестра есть ключ...

Вывод значения ключей реестра
Здравствуйте, как в С++ на форме можно вывести подключи какогото ключа реестра? например вводим в...

Удаление ключей реестра через Delphi
День добрый. Нужно удалить ключи реестра с неопределенными именами в Delphi. Например, данный код...

Чтение ключей реестра из определенного раздела
Здравствуйте! Есть код который читает запись ключа реестра Set Reg =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru