Почему некоторые записи HKLM можно прочитать на 64-битных ПК, а некоторые — нет на VB6?

Почему некоторые записи HKLM можно прочитать на 64-битных ПК, а некоторые — нет на VB6?

Итак, наше программное обеспечение используется одним из наших клиентов на устаревших версиях Windows, потому что они находятся в промышленной среде с изоляцией от внешнего мира, и у них есть Windows XP и куча старых серверов, которые являются единственными, что у них работает. Некоторые из них 64-битные.

Читая реестр, я заметил, что в некоторых случаях наше 32-разрядное приложение может фактически напрямую прочитать следующую запись в 64-разрядной версии Windows, что теоретически не должно быть возможным:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorerи извлечь номер версии из строкового значения «Версия».

Однако если мы создадим ключ на том же ПК HKEY_LOCAL_MACHINE\SOFTWARE\Our Softwareи добавим строковое значение, например «Последнее обслуживание», его невозможно будет прочитать.

Разрешения и права собственности такие же, как у записи IE, когда мы пытаемся добавить ее туда, но безрезультатно.

Конечно, работать с \\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Our Software\Last Service Dateэтим можно, но почему, если некоторые другие вещи могут попасть в "нормальную" часть реестра и быть читаемыми, некоторые нет? Было бы проще и чище при извлечении данных из приложения, чтобы прочитать дату обслуживания, и критично, если она будет неправильно добавлена ​​в стандартный HKEY_LOCAL_MACHINE по неосторожности.

Я что-то пропустил?

решение1

Вы столкнулись с Реестр перенаправитель:

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

Некоторые ключи реестра приложений, такие как HKEY_LOCAL_MACHINE\Software всегда перенаправлены. Большинство кустов реестра не перенаправлены.

32/64-битная программа все равно может принудительно получить доступ к 64/32-битной версии реестра, включив в запрос специальные флаги, как описано в статье Доступ к альтернативному представлению реестра. Смотрите также Пример перенаправления реестра на WOW64.

Связанный контент