Warum ist RegOpenKeyEx () Rückkehr Fehlercode 2 auf Vista 64bit?
-
05-07-2019 - |
Frage
Ich mache den folgenden Aufruf:
result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);
(C ++, Visual Studio 5, Vista 64bit).
Es wird mit Fehlercode 2 ( „Datei nicht gefunden“), obwohl „regedit
“ zeigen Fehler, dass der Schlüssel vorhanden ist. Dieser Code hat immer auf 32-Bit-XP gearbeitet. Warum ist es „Datei nicht gefunden“, wenn es klar ist?
Lösung
Ich entdeckte, dass ich mein Problem mit der Flagge lösen könnte: KEY_WOW64_64KEY
, wie in:
result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);
Für eine vollständige Erklärung: 32-Bit- und 64- Bit-Anwendungsdaten in der Registrierung
Andere Tipps
Auf einem Windows-64-Bit-System wird die Registry tatsächlich in zwei Teile geteilt. Ein Teil wird von 64-Bit-Prozessen verwendet wird, und ein Teil von 32-Bit-Prozessen.
Wenn beispielsweise eine 32-Bit-Anwendung programmatisch schreibt, was es glaubt, ist HKLM \ SOFTWARE \ Unternehmen \ Application, ist es tatsächlich umgeleitet durch die WoW64-Schicht zu HKLM \ SOFTWARE \ Wow6432Node \ Unternehmen \ Anwendungs.
Also, wenn Sie führen Sie Ihre 32-Bit-Anwendung und rufen RegOpenKeyEx es funktioniert tatsächlich gegen den Wow6432Node \ Ordner und nicht der reguläre \ SOFTWARE Knoten.
Sie haben mit "Use Multi-Byte-Zeichensatz" oder Guss Zeichenfolge im Code (LPWSTR)
kompilierenIch hatte ein ähnliches Problem. Ich war mit:
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
(LPWSTR)"SOFTWARE\\0test",
0,
WRITE_DAC ,
&hKey);
, die nicht funktionierten. Ich habe versucht, es so und es hat funktioniert:
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("SOFTWARE\\0test"),
0,
WRITE_DAC ,
&hKey);
ja, win7 64B, fügen Sie weitere Flagge KEY_WOW64_64KEY, wird es funktionieren. wenn nicht, siehe http: // msdn. microsoft.com/en-us/library/ms724897(v=VS.85).aspx