Форум программистов, компьютерный форум, киберфорум
Наши страницы
Windows
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Dragokas
Эксперт WindowsАвтор FAQ
16969 / 7054 / 856
Регистрация: 25.12.2011
Сообщений: 10,868
Записей в блоге: 16
#1

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

28.05.2016, 13:38. Просмотров 2243. Ответов 2

Введение

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

Пример:

1. Ключ HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID (и все его подразделы) - является 64-битным
2. Ключ HKEY_LOCAL_MACHINE\SOFTWARE\Classes\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\CurrentVersion\Policies (32-битное представление)
б) HKLM\Software\Microsoft\Windows\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\Wow6432Node\Classes указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node
  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\AppId указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppId
  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\PROTOCOLS указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PROTOCOLS
  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\Typelib указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Typelib
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes\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\Wow6432Node\AppID" -> "HKLM\SOFTWARE\Classes\AppID" (заметьте, что ключ больше не указывает на Wow6432Node, а значит в этой версии ОС просто отказались от 32-битного представления этого ключа и некоторых других (см. ниже аналогичные))
"HKLM\SOFTWARE\Classes\Wow6432Node\PROTOCOLS" -> "HKLM\SOFTWARE\Classes\PROTOCOLS"
"HKLM\SOFTWARE\Classes\Wow6432Node\TypeLib" -> "HKLM\SOFTWARE\Classes\TypeLib"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Current" -> "HKLM\SOFTWARE\Microsoft\Cryptography\Calais\Current"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers" -> "HKLM\SOFTWARE\Microsoft\Cryptography\Calais\Readers"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Services" -> "HKLM\SOFTWARE\Microsoft\Cryptography\Services"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\CTF\SystemShared" -> "HKLM\SOFTWARE\Microsoft\CTF\SystemShared"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\CTF\TIP" -> "HKLM\SOFTWARE\Microsoft\CTF\TIP"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Notepad\DefaultFonts" -> "HKLM\SOFTWARE\Microsoft\Notepad\DefaultFonts"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Software\Microsoft\Shared Tools\Msinfo" -> "HKLM\SOFTWARE\Microsoft\Software\Microsoft\Shared Tools\Msinfo"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\explorer\DriveIcons" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\explorer\KindMap" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\KindMap"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Telephony\Locations" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\App Paths" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Group Policy" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Policies" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\PreviewHandlers" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\PreviewHandlers"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Setup" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Console" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\FontDPI" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\FontLink" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\FontMapper" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Fonts" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\GRE_Initialize" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\LanguagePack" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanguagePack"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\NetworkCards" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Perflib" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Ports" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Print" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\ProfileList" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Time Zones" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\COM3" -> "HKLM\SOFTWARE\Microsoft\COM3"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\DFS" -> "HKLM\SOFTWARE\Microsoft\DFS"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Driver Signing" -> "HKLM\SOFTWARE\Microsoft\Driver Signing"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\EnterpriseCertificates" -> "HKLM\SOFTWARE\Microsoft\EnterpriseCertificates"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\EventSystem" -> "HKLM\SOFTWARE\Microsoft\EventSystem"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\MSMQ" -> "HKLM\SOFTWARE\Microsoft\MSMQ"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Non-Driver Signing" -> "HKLM\SOFTWARE\Microsoft\Non-Driver Signing"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Ole" -> "HKLM\SOFTWARE\Microsoft\Ole"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Ras" -> "HKLM\SOFTWARE\Microsoft\Ras"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Rpc" -> "HKLM\SOFTWARE\Microsoft\Rpc"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\SystemCertificates" -> "HKLM\SOFTWARE\Microsoft\SystemCertificates"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\TermServLicensing" -> "HKLM\SOFTWARE\Microsoft\TermServLicensing"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Transaction Server" -> "HKLM\SOFTWARE\Microsoft\Transaction Server"
"HKLM\SOFTWARE\Wow6432Node\Classes" -> "HKLM\SOFTWARE\Classes\Wow6432Node"
"HKLM\SOFTWARE\Wow6432Node\Clients" -> "HKLM\SOFTWARE\Clients"
"HKLM\SOFTWARE\Wow6432Node\Policies" -> "HKLM\SOFTWARE\Policies"
"HKLM\SOFTWARE\Wow6432Node\RegisteredApplications" -> "HKLM\SOFTWARE\RegisteredApplications"



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

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

Если ключ обычный - батник ничего не выведет.
Рекомендуется пользоваться батником на виртуальной машине, т.к. он оставляет мусор в виде пустых ключей в 32-битном представлении. Они специально не удаляются в целях безопасности (чтобы ничего лишнего не наудалять).
Также он не особо хорошо тестировался. Я на 100% не гарантирую, что он все правильно определит.
Тем не менее, по моим ручным тестам (с подтверждением) уже нашлись расхождения даже с официальной информацией, например, на Windows 7 ключ
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\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.

Спасибо за чтение.
Надеюсь, Вам окажется полезной эта заметка.
8
Вложения
Тип файла: zip Get_Key_Redirect_Info.zip (743 байт, 3 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2016, 13:38
Ответы с готовыми решениями:

После изменений прав и владельца ключей реестра некоторые функции перестали работать
Несколько дней назад из-за изменений прав и владельца разделов реестра, у меня...

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

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

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

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

2
ScrollLock
киберпаразит
Эксперт Windows
9662 / 2734 / 172
Регистрация: 14.06.2011
Сообщений: 9,409
29.05.2016, 16:31 #2
Dragokas, ОГРОМНЫЙ пасиб!!!

Не по теме:

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

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

Не по теме:


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

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2016, 16:57
Привет! Вот еще темы с ответами:

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

Удаление ключей реестра с исключением
//--------------------------------------------------------------------------- ...

Прочитать имена (пути?) ключей реестра
Добрый день, необходимо получить имена(так они подписаны в редакторе реестра)...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru