Bonjour,

Je cherche à écrire une fonction qui aurait pour but de supprimer toutes les sous-clés d'une clé, à condition bien sûr que les sous-clés ne contiennent pas elles-même des sous-clés.

Je n'y arrive que partiellement, je m'explique :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
void DeleteSubkeysOfOneKey(HKEY hKey, struct s_registre *ptr_registre)
{
  HKEY            hKeyDelSubkey;
  DWORD           retCode;
  DWORD           cSubKeys;
  int           i;
  DWORD           cbName;
  TCHAR           achKey[MAX_KEY_LENGTH];

  retCode = RegQueryInfoKey(hKey, NULL,
      NULL,
      NULL,
      &cSubKeys,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL,
      NULL);

    if (cSubKeys != 0)
      {
        for (i=0; i<cSubKeys; i++)
          {
            cbName = MAX_KEY_LENGTH;
            retCode = RegEnumKeyEx(hKey, i,
                     achKey,
                     &cbName,
                     NULL,
                     NULL,
                     NULL,
                     NULL);

            if (retCode == ERROR_SUCCESS)
              {
                retCode = RegDeleteKey(hKey, achKey);
                if (retCode != ERROR_SUCCESS)
                  {
                    printf("%s\\%s\n", ptr_registre->handle, achKey);
                    printf("  error : deletion of this subkey failed...\n");
                  }
                else
                  printf("Deleted !\n");
             }
            else
              printf("Subkey%d=%s\\%s\\%s\n\n\n", i, ptr_registre->handle, ptr_registre->path, achKey);
         }
     }
}
Je cherche à supprimer les cinq sous-clé a, b, c, d, e de la clé TEST :

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\a
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\b
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\c
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\d
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\e
Et j'obtiens ça comme résultat à l'écran :

Subkey0=Deleted !
Subkey1=Deleted !
Subkey2=Deleted !
Subkey3=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\e
Subkey4=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\e
Et donc deux sous-clés ne sont pas supprimées :

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\b
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\d
En gros, une sous-clé sur deux n'est pas supprimée... pourtant, lorsque je lis les clés, avec la même boucle for que ci-dessus, j'obtiens :

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\a
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\b
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\c
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\d
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\TEST\e
Je ne comprends pas comment la fonction RegEnumKeyEx peut changer de comportement alors que le code est strictement identique.

Merci par avance de votre aide.