Как получить доступ к 64-битному реестру из 32-битного процесса?

У меня есть программа, которая интегрируется с контекстным меню проводника. Он работает правильно в Win32, но не в Win64. Я скомпилировал расширение оболочки для Win64, но теперь я хочу зарегистрировать это

Файл DLL из основной программы является 32-разрядным, и я также хочу сохранить основную программу как 32-разрядную.

Я хочу получить доступ к ключу CLSID в Wow6432Node под HKEY_CLASS_ROOT, я использовал RegDisableRef но это не работает

-2

Решение

Так же, как файлы перенаправляются WoW64, доступ к реестру также перенаправляется

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

Переадресация реестра

Вам необходимо указать KEY_WOW64_64KEY на samDesired параметр при доступе к 64-битным ключам реестра с RegCreateKeyEx, RegDeleteKeyEx или же RegOpenKeyEx

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

Flag name        Value   Description
KEY_WOW64_64KEY  0x0100  Access a 64-bit key from either a 32-bit or 64-bit application.
KEY_WOW64_32KEY  0x0200  Access a 32-bit key from either a 32-bit or 64-bit application.
Windows 10 on ARM: This refers to the 32-bit ARM registry view
for 32-bit ARM processes and the 32-bit x86 registry view for
32-bit x86 and 64-bit ARM64 processes.

Доступ к альтернативному представлению реестра

Однако я думаю, что компиляция программы в отдельных 32- и 64-битных версиях будет проще. Большинство программ не нужно менять при перекомпиляции. Более того, вам все равно придется перекомпилировать расширение оболочки, потому что 64-битные процессы не могут загружать 32-битные DLL

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]