Pourquoi RegOpenKeyEx() renvoie-t-il le code d'erreur 2 sur Vista 64bit?

Je faisais l'appel suivant:

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

(C++, Visual Studio 5, Vista 64 bits).

Il échoue avec le code d'erreur 2 ("Fichier introuvable") même si "regedit " montre que la clé existe. Ce code a toujours fonctionné sur 32bit XP. Pourquoi est-ce "fichier introuvable" quand il est clairement là?

26
demandé sur Kevin Panko 2008-10-31 03:58:24

5 réponses

J'ai découvert que je ne pouvais résoudre mon problème en utilisant le drapeau: KEY_WOW64_64KEY , comme dans

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

Pour une explication complète: Données D'Application 32 bits et 64 bits dans le Registre

54
répondu Tim Cooper 2011-07-29 17:44:50

Sur un système Windows 64 bits, le Registre est en fait divisé en deux parties. Une section est utilisée par les processus 64 bits, et une partie par les processus 32 bits.

Par exemple, si une application 32 bits écrit par programme dans ce qu'elle croit être HKLM\SOFTWARE\Company\Application, elle est en fait redirigée par la couche WoW64 vers HKLM\SOFTWARE\Wow6432Node\Company\Application.

Donc, lorsque vous exécutez votre application 32 bits et appelez RegOpenKeyEx, cela fonctionne réellement contre le Wow6432Node \ folder, et non le nœud \SOFTWARE régulier.

22
répondu Frode Lillerud 2008-11-14 19:15:08

Vous devez compiler avec "Utiliser un jeu de caractères multi-octets" ou convertir une chaîne dans le code en (LPWSTR)

1
répondu GMG 2017-06-04 14:22:53

J'ai eu un problème similaire. J'ai été en utilisant:

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

Ça n'a pas marché. Je l'ai essayé comme ça et ça a marché:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   _T("SOFTWARE\\0test"),
                                   0,
                                   WRITE_DAC ,
                                   &hKey);
0
répondu Alex 2010-12-02 12:12:33

Oui, win7 64B, ajouter d'autres drapeau KEY_WOW64_64KEY, il va travailler. si ce n'est pas le cas, reportez-vous à http://msdn.microsoft.com/en-us/library/ms724897 (v=vs.85).aspx

0
répondu yue 2011-11-21 02:29:59