Как определить, перенаправлен ли раздел реестра с помощью WOW64? - PullRequest
2 голосов
/ 22 апреля 2010

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

Моя проблема заключается в том, что я хочу перечислить разделы реестра как в 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.К сожалению, документация, по-видимому, подразумевает, что дочерний элемент перенаправленного ключа не обязательно перенаправлен, поэтому у маршрута также есть проблемы.

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

Ответы [ 2 ]

2 голосов
/ 22 апреля 2010

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

2 голосов
/ 22 апреля 2010

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

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

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

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

...