私は次の電話をかけていました:
result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);
(C ++、Visual Studio 5、Vista 64ビット)。
regedit
「 」はキーが存在することを示していますが、エラーコード2(「ファイルが見つかりません」)で失敗しています。このコードは常に32ビットXPで機能します。明らかに存在するのに、なぜ「ファイルが見つかりません」のですか?
私は次の電話をかけていました:
result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);
(C ++、Visual Studio 5、Vista 64ビット)。
regedit
「 」はキーが存在することを示していますが、エラーコード2(「ファイルが見つかりません」)で失敗しています。このコードは常に32ビットXPで機能します。明らかに存在するのに、なぜ「ファイルが見つかりません」のですか?
次のように、 flag: を使用して問題を解決できることを発見し KEY_WOW64_64KEY
ました。
result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);
Windows 64ビットシステムでは、レジストリは実際には2つの部分に分かれています。1つのセクションは64ビットプロセスで使用され、一部は32ビットプロセスで使用されます。
たとえば、32ビットアプリケーションがプログラムでHKLM \ SOFTWARE \ Company \ Applicationであると信じているものに書き込む場合、実際にはWoW64レイヤーによってHKLM \ SOFTWARE \ Wow6432Node \ Company\Applicationにリダイレクトされます。
したがって、32ビットアプリケーションを実行してRegOpenKeyExを呼び出すと、通常の\ SOFTWAREノードではなく、Wow6432Node\フォルダーに対して実際に機能します。
「Use Multi-Byte Character Set」でコンパイルするか、コード内の文字列を (LPWSTR) にキャストする必要があります
はい、win7 64B、さらにフラグ KEY_WOW64_64KEY を追加すると、動作します。動作しない場合は、 http://msdn.microsoft.com/en-us/library/ms724897( v=VS.85 ).aspx を参照してください。
同様の問題がありました。私が使用していた:
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
(LPWSTR)"SOFTWARE\\0test",
0,
WRITE_DAC ,
&hKey);
それはうまくいきませんでした。私はこのように試してみましたが、うまくいきました:
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("SOFTWARE\\0test"),
0,
WRITE_DAC ,
&hKey);