Как определить, перенаправлен ли ключ реестра WOW64?

Можно ли определить, перенаправлен ли данный раздел реестра?

Моя проблема в том, что я хочу перечислить ключи реестра как в 32-битном, так и в 64-битном представлениях реестра обычным образом из 32-битного приложения. Я мог бы просто открыть каждый ключ дважды, сначала с помощью KEY_WOW64_64KEY, а затем с помощью KEY_WOW64_32KEY. Однако, если ключ не перенаправлен, это дает вам точно такой же ключ, и вы в конечном итоге перечисляете одно и то же содержимое дважды; это то, чего я пытаюсь избежать.

Я нашел немного документации по нему, но похоже, что это единственный Способ состоит в том, чтобы изучить улей и выполнить несколько сравнений строк по ключу. Еще одна возможность, о которой я подумал, - это попытаться открыть Wow6432Node для каждого подключа; если он существует, то ключ необходимо перенаправить. Т.е. если я пытаюсь открыть HKCU \ Software \ Microsoft \ Windows, я бы попытался открыть следующие ключи: HKCU \ Wow6432Node, HKCU \ Software \ Wow6432Node, HKCU \ Software \ Microsoft \ Wow6432Node и HKCU \ Software \ Microsoft \ Windows \ Wow6432Node . К сожалению, в документации предполагается, что дочерний элемент перенаправленного ключа не обязательно перенаправляется, поэтому у маршрута также есть проблемы.

Итак, какие у меня здесь варианты?


person Luke    schedule 22.04.2010    source источник


Ответы (2)


Ваша цель не ясна. Зачем вам нужно перечислять ключи реестра как в 32-битном, так и в 64-битном представлениях реестра обычным образом из 32-битного приложения? Что вы хотите делать с 64-битными значениями в своем приложении? Что бы вы сделали, если бы для ключей x64 и x86 были разные значения? Это кажется странной или, скорее, неправильной идеей.

Ключи перенаправляются по важной причине: чтобы не нарушать поведение приложений x86. Например: CLSID используется COM для поиска правильной реализации для данного интерфейса. Среди прочего, «правильный» означает, что он может запускаться кодом вызывающего абонента, т.е. должен быть на той же платформе. Вот почему должны быть разные наборы записей для x64 и x86. Причины для других перенаправленных ключей аналогичны. Вообще говоря, эти перенаправленные ключи должны быть разными для приложений x86 и x64.

Как писал Рэймонд Чен, «в 64-битной Windows, 32- битовые программы работают на уровне эмуляции, и если вам это не нравится, не используйте эмулятор », и я полностью согласен с его советом. Так что мой лучший совет, если вам нужно что-то подобное, - делать это из приложения x64. Но сначала подумайте, действительно ли оно вам нужно.

РЕДАКТИРОВАТЬ: есть samDesired параметр RegOpenKeyEx что может оказаться полезным. Также ознакомьтесь с "Доступ к альтернативному реестру См. " статью MSDN.

person SergGr    schedule 22.04.2010
comment
В идеале мы хотели бы перестроить все это как x64, но для нас это еще далеко. А пока это своего рода временная мера. Приложение в основном представляет собой компонент системной информации / сканера. Например, проверка реестра, чтобы узнать, что находится в различных разделах «Выполнить». Я знаю, что эти конкретные ключи перенаправляются, но мне нужен общий метод для определения этого, поэтому мне не нужно знать заранее. - person Luke; 22.04.2010
comment
Как я уже сказал, я считаю, что правильный способ - это сделать приложение x64, но вы можете сделать это по-другому. Смотрите мое редактирование - person SergGr; 23.04.2010
comment
Я уже знаю, как получить доступ к различным представлениям; проблема в том, что нет способа определить, есть ли у данного ключа альтернативное представление. Попытка открыть альтернативное представление для ключа, у которого его нет, даст вам общий вид. - person Luke; 23.04.2010
comment
Мы выбрали другой подход. При работе на 64-битной машине мы ВСЕГДА будем работать с 64-битным представлением реестра. Поскольку мы заранее знаем, какие ключи перенаправляются, мы просто жестко закодируем эти конкретные ключи в приложении. Это намного проще и понятнее, чем пытаться понять это динамически. - person Luke; 28.04.2010
comment
@ Люк, спасибо за продолжение. Вроде единственное решение знаю. По крайней мере, я не знаю ничего лучше. - person SergGr; 29.04.2010

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

person Hans Passant    schedule 22.04.2010