Correcte oui mais elle est effectivement "vide" , tu viens à peine de la créer. Appelle SetEntriesInAcl pour lui ajouter des entrées.
Correcte oui mais elle est effectivement "vide" , tu viens à peine de la créer. Appelle SetEntriesInAcl pour lui ajouter des entrées.
Bah le but n'est pas de créer un ACL mais d'en lire un : je veux juste récupérer les informations contenues dans une DACL appartenant à n'importe quelle clé de registre.
Je te montre où j'en suis :
http://img222.imageshack.us/img222/677/acltest.jpg
J'ai presque terminé, mais j'aurais aimé récupérer la structure TRUSTEE et GetExplicitEntriesFromAcl et la seule fonction qui semble les retourner via les structures EA.
Donc ce n'est pas à moi de remplir la structure ACL, mais à la fonction GetSecurityDescriptorDacl. Je pense qu'à ce niveau c'est ok puisque comme tu le vois j'ai pu lire les ACE.
Je ne comprends donc pas pourquoi je n'arrive pas à obtenir les EA et pourquoi count vaut toujours 0 alors que la fonction renvoie ERROR_SUCCESS.
edit: Si j'ai dit une bêtise, c'est que j'ai pas compris quelque chose
Voici le morceau de code qui pose problème : j'ai fait le programme le plus petit possible afin de pouvoir cerner l'origine du problème. A noter que je fais mes tests sous Vista. A noter qu'une autre personne a testé et rencontre le même problème.
Si je mets juste NULL ou "Software" comme deuxième argument à RegOpenKeyEx, cela marche très bien. Mais si je mets "Software\\Microsoft", par exemple, count vaut toujours 0. Et à chaque fois GetExplicitEntriesFromAcl me renvoie ERROR_SUCCESS.
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 #include <windows.h> #include <Sddl.h> #include <stdio.h> #include <aclapi.h> int main () { HKEY hKey; DWORD retCode = 0; int a = 0, i = 0; retCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft", 0, KEY_READ, &hKey); if (retCode == ERROR_SUCCESS) { PSECURITY_DESCRIPTOR pSD = NULL; DWORD cbSD = 0; retCode = RegGetKeySecurity(hKey, DACL_SECURITY_INFORMATION, 0, &cbSD); pSD = malloc(cbSD); retCode = RegGetKeySecurity(hKey, DACL_SECURITY_INFORMATION, pSD, &cbSD); if (retCode == ERROR_SUCCESS) { // DACL informations BOOL bDaclPresent; PACL pAcl = NULL; BOOL bDaclDefaulted; retCode = GetSecurityDescriptorDacl(pSD, &bDaclPresent, &pAcl, &bDaclDefaulted); if (retCode != 0) { if(bDaclPresent == TRUE) printf("the security descriptor contains a DACL\n"); else printf("the security descriptor does not contain a DACL\n"); if(bDaclDefaulted == TRUE) printf("DACL was retrieved by a default mechanism\n\n"); else printf("the DACL was explicitly specified by a user\n\n"); ULONG count; PEXPLICIT_ACCESS pEA; retCode = GetExplicitEntriesFromAcl(pAcl, &count, &pEA); if (retCode != ERROR_SUCCESS) { printf("GetExplicitEntriesFromAcl() failed with STATUS = 0x%08x\n", retCode); } printf("count = %d\n", count); printf(" Number of ACE = %d \n", pAcl->AceCount); } else printf("ERROR !!\n"); } else printf("ERROR !!\n"); } else printf("ERROR !!\n"); system("pause"); exit(EXIT_SUCCESS); }
Il y a forcément une explication à cela, mais je n'arrive pas à la trouver.
J'espère que certains pourront m'aider
Merci.
Super, c'est ce que tu aurais du faire depuis longtemps. J'vais voir ça dès que j'en aurai le temps. A+.
Bonjour,
Je n'arrive toujours pas à trouver le problème...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager