64bit 版のインストーラから 32bit 用レジストリ値を取得する

Inno Setup の 64bit 版用のインストーラから 32bit プログラム用のレジストリを見る必要があってどうやるのかなぁと探していたら,公式ドキュメントの最初に記述されていました.

The root key. This must be one of the following values:

HKCR	(HKEY_CLASSES_ROOT)
HKCU	(HKEY_CURRENT_USER)
HKLM	(HKEY_LOCAL_MACHINE)
HKU	(HKEY_USERS)
HKCC	(HKEY_CURRENT_CONFIG)

The values may have a suffix of 32 or 64. Root key values with a suffix of 32 (for example, HKLM32) map to the 32-bit view of the registry; root key values with a suffix of 64 (for example, HKLM64) map to the 64-bit view of the registry.

Root key values with a suffix of 64 can only be used when Setup is running on 64-bit Windows, otherwise an error will occur. On an installation supporting both 32- and 64-bit architectures, it is possible to avoid the error by adding a Check: IsWin64 parameter, which will cause the entry to be silently skipped when running on 32-bit Windows.

A root key value without a suffix (for example, HKLM) is equivalent to the value with a suffix of 32 (for example, HKLM32) unless the install is running in 64-bit mode, in which case it is equivalent to the value with a suffix of 64 (for example, HKLM64).

http://www.innosetup.com/ishelp/topic_registrysection.htm

ざっと要約すると,

  • レジストリのルートキーには 32/64 のサフィックスが付く.例えば,HKEY_LOCAL_MACHINE の場合だと HKLM32HKLM64 が存在する.
  • 64bit モードで動作している場合,32 サフィックスの付いているルートキーは 32bit 用のレジストリを閲覧する.例えば,HKLM32\Software\CubeSoft\CubePDF は HKEY_LOCAL_MACHINE\Software\Wow6432Node\CubeSoft\CubePDF を意味する(HKLM64 の場合は,指定したサブキーそのまま).
  • サフィックスなしのルートキーは,32bit モードの場合は 32 サフィックスが,64bit モードの場合は 64 サフィックスが付いたもののと同じルートキーを指す.
  • 32bit モードで HKLM64 など 64 サフィックスの付いているルートキーを参照しようとするとエラーが発生する.

と言う事のようです.プロセスの問題もそうですが,64bit Windows は 32bit/64bit が混在しているので扱いにくいです.