2015年08月27日
レジストリの Wow6432Node へのリダイレクト条件
64ビットOS上で実行される32ビット実行ファイルから見えるレジストリツリーは Wow6432Node 以下になるというのは、64ビット開発を始めた頃に知ったのだが、必ずしもそうとは限らない状況があることがわかった
たまたま、32ビットコンパイルした実行ファイルを Windows8.1 (64bit) 上でデバッグしていた際、レジストリから情報を取得するルーチンで、値が取れていないことが判明、よく見たら、32ビット環境から見える HKLM\SOFTWARE\Wow6432Node 以下には確かに値を設定していないことがわかった
例えば以下のコードを実行しようとすると
これと同じスキームで、HKCU にアクセスしている箇所のキーを、Wow6432Node 以下に作成したら、見つからないという現象に見舞われた
こんな仕様だったっけ?と思い調べなおしたら、以下の解説が見つかった
https://msdn.microsoft.com/en-us/library/aa384253%28v=vs.85%29.aspx
要するに、Wow6432Node にリダイレクトされるものとそうでないものが決まっているということだった
こうした情報を見逃していたのだった(恥ずかしい)
たまたま、32ビットコンパイルした実行ファイルを Windows8.1 (64bit) 上でデバッグしていた際、レジストリから情報を取得するルーチンで、値が取れていないことが判明、よく見たら、32ビット環境から見える HKLM\SOFTWARE\Wow6432Node 以下には確かに値を設定していないことがわかった
例えば以下のコードを実行しようとすると
HKEY hKey;実際には HKLM\Software\Wow6432Node\MyCompany\Information キーが開かれる
LONG lRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\MyCompany\\Information"), 0, KEY_QUERY_VALUE, &hKey);
これと同じスキームで、HKCU にアクセスしている箇所のキーを、Wow6432Node 以下に作成したら、見つからないという現象に見舞われた
HKEY hKey;コード上はおかしくないのだが、もしかしたらと思って、HKCU\Software\MyCompany\Information に値を設定したら正しく読み込めたのだった
LONG lRes = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\MyCompany\\Information"), 0, KEY_QUERY_VALUE, &hKey);
こんな仕様だったっけ?と思い調べなおしたら、以下の解説が見つかった
https://msdn.microsoft.com/en-us/library/aa384253%28v=vs.85%29.aspx
要するに、Wow6432Node にリダイレクトされるものとそうでないものが決まっているということだった
こうした情報を見逃していたのだった(恥ずかしい)
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/4112954
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック