Bonjour,
J'utilise l'API WinReg pour énumérer des clés de registres sur une machine distante. Cela fonctionne correctement pour certaines clés mais pas pour d'autres.
Tout d'abord, une vue du registre distant :
Je tente d'énumérer les 2 clés suivantes
- SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\EventCollector\\ConfigurationModes
- SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\EventCollector\\Subscriptions
Pour la 1ere clé (ConfigurationModes), j'ai un résultat correct et les 4 sous clés sont correctement affichées. Par contre pour la 2eme clé (Subscriptions), je n'ai pas de résultat. Il ne voit tout simplement pas les 2 sous clés (celles que j'ai "un peu" masquées sur la copie d'écran)
Ci dessous le programme de test écrit en C/C++ avec Qt
Je n'ai pas l'impression que ce soit lié à un problème de droits car les 2 clés (Subscriptions et ConfigurationModes) ont exactement les même ACL et j'ai les droits (au moins en lecture sur ces clés)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 const WCHAR * remote_host = TEXT("remote-host"); const WCHAR * remote_folder = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\EventCollector\\Subscriptions"); // open the HKLM remote registry HKEY hkey_remote; LONG res = RegConnectRegistry(remote_host, HKEY_LOCAL_MACHINE, &hkey_remote); if(res != ERROR_SUCCESS) { // something is wrong WINDOWS("RegConnectRegistry()", res); return; } // open the HKLM remote registry HKEY hkey_folder; res = RegOpenKeyEx(hkey_remote, remote_folder, 0, KEY_READ, &hkey_folder); if(res != ERROR_SUCCESS) { // something is wrong WINDOWS("RegOpenKeyEx()", res); return; } DWORD index = 0; for(;;) { WCHAR Data[256]; DWORD SizeData = sizeof(Data) / sizeof(Data[0]); long res = RegEnumKeyEx(hkey_folder, index, Data, &SizeData, NULL, NULL, NULL, NULL); if(res != ERROR_SUCCESS) { // something is wrong, probably the end of the list WINDOWS("RegEnumKeyEx()", res); break; } // add the key to the list INFO("Data [%S]", Data); index++; } // close folder res = RegCloseKey(hkey_folder); if(res != ERROR_SUCCESS) { // something is wrong WINDOWS("RegCloseKey()", res); } res = RegCloseKey(hkey_remote); if(res != ERROR_SUCCESS) { // something is wrong WINDOWS("RegCloseKey()", res); }
La machine locale (qui exécute le programme) : Windows 7 pro
La machine distante : Windows server 2012
Les 2 machines sont dans le même domaine AD
J'avoue que je commence à être en panne d'idées, si quelqu'un avait une idée de génie ...
Merci d'avance
Partager