32

私は次の電話をかけていました:

result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);

(C ++、Visual Studio 5、Vista 64ビット)。

regedit「 」はキーが存在することを示していますが、エラーコード2(「ファイルが見つかりません」)で失敗しています。このコードは常に32ビットXPで機能します。明らかに存在するのに、なぜ「ファイルが見つかりません」のですか?

4

5 に答える 5

61

次のように、 flag: を使用して問題を解決できることを発見し KEY_WOW64_64KEY ました。

result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);

詳細な説明:レジストリ内の 32 ビットおよび 64 ビットのアプリケーション データ

于 2008-10-31T00:58:59.987 に答える
26

Windows 64ビットシステムでは、レジストリは実際には2つの部分に分かれています。1つのセクションは64ビットプロセスで使用され、一部は32ビットプロセスで使用されます。

たとえば、32ビットアプリケーションがプログラムでHKLM \ SOFTWARE \ Company \ Applicationであると信じているものに書き込む場合、実際にはWoW64レイヤーによってHKLM \ SOFTWARE \ Wow6432Node \ Company\Applicationにリダイレクトされます。

したがって、32ビットアプリケーションを実行してRegOpenKeyExを呼び出すと、通常の\ SOFTWAREノードではなく、Wow6432Node\フォルダーに対して実際に機能します。

于 2008-11-14T19:15:08.493 に答える
1

「Use Multi-Byte Character Set」でコンパイルするか、コード内の文字列を (LPWSTR) にキャストする必要があります

于 2017-06-04T14:22:53.900 に答える
0

はい、win7 64B、さらにフラグ KEY_WOW64_64KEY を追加すると、動作します。動作しない場合は、 http://msdn.microsoft.com/en-us/library/ms724897( v=VS.85 ).aspx を参照してください。

于 2011-11-21T02:29:59.370 に答える
0

同様の問題がありました。私が使用していた:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   (LPWSTR)"SOFTWARE\\0test",
                                   0,
                                   WRITE_DAC ,
                                   &hKey);

それはうまくいきませんでした。私はこのように試してみましたが、うまくいきました:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   _T("SOFTWARE\\0test"),
                                   0,
                                   WRITE_DAC ,
                                   &hKey);
于 2010-06-23T18:52:11.893 に答える