Bonjour,
Je galère avec la gestion des droits NTFS sur un fichier.
J'ai regardé GetFileSecurity & Co.
Je voudrais savoir s'il y a un moyen simple de donner l'accès total à mon fichier pour tout le monde.
Merci
Bonjour,
Je galère avec la gestion des droits NTFS sur un fichier.
J'ai regardé GetFileSecurity & Co.
Je voudrais savoir s'il y a un moyen simple de donner l'accès total à mon fichier pour tout le monde.
Merci
Pour ça, tu dois toujours utiliser GetFileSecurity(), puis le plus simple est de supprimer complètement la DACL (Discretionary Access Control List) dans le Security Descriptor. Passer NULL à la place.
Si je me souviens bien, il doit y avoir une fonction du genre SetSecurityDescriptorDacl() qui doit permettre de faire ça...
Ok,
je suis dans la bonne voie.
J'avais commencé par AddAccessAllowedAce & Co, mais je n'arrive à rien.
Il y a plein d'exemple sur le Net, mais il faut passer le nom de l'utilisateur, style "tout le monde", sympa mais bon, sur un OS anglais (voire chinois dans mon cas), ça risque de ne pas marcher.
Bref, j'ai trouvé une solution avec : SID_IDENTIFIER_AUTHORITY siaWorld = SECURITY_WORLD_SID_AUTHORITY;
qui a l'air d'etre "tout le monde".
Pour le moment, j'ai ca :
mais manque de bol, j'ai dwError = 122 : taille de buffer insuffisante, bizarre !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SECURITY_DESCRIPTOR SecDesc; DWORD lSizeNeeded; DWORD dwError; GetFileSecurity(szPath, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, 0, 0, &lSizeNeeded); if (GetFileSecurity(szPath, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, &SecDesc, lSizeNeeded, &lSizeNeeded)) { dwError = GetLastError(); }
Je continue à investiguer !
Plutôt que d'ajouter tous les droits pour "tous le monde", supprime carrément l'ACL, ça ira plus vite pour le même effet.
PS: Il manque l'allocation du buffer dans ton code...
Merci pour ton aide, entre temps j'ai corrigé le pb d'allocation.
Mais comment supprime-t-on l'ACL ?
Pour le moment, j'ai ca :
mais SetFileSecurity me retourne 1305 : ERROR_UNKNOWN_REVISION
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 SID_IDENTIFIER_AUTHORITY siaWorld = SECURITY_WORLD_SID_AUTHORITY; BOOL bRet = AllocateAndInitializeSid(&siaWorld, 1, SECURITY_WORLD_RID,0, 0, 0, 0, 0, 0, 0, &pSidEveryone); DWORD dwAclSize; dwAclSize = sizeof(ACL) + 3 * ( sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) ) + GetLengthSid(pSidEveryone); PACL pDacl = NULL; pDacl = (PACL)HeapAlloc(GetProcessHeap(), 0, dwAclSize); if(pDacl == NULL) { printf("ERROR: pDacl = NULL\n"); } if(!InitializeAcl(pDacl, dwAclSize, ACL_REVISION)) { printf("ERROS: Ini Acl\n"); } bRet = AddAccessAllowedAce(pDacl,ACL_REVISION,KEY_ALL_ACCESS,pSidEveryone) ; if (bRet == NULL) { int err = GetLastError(); return -2; } bRet = SetFileSecurity(szPath, DACL_SECURITY_INFORMATION,pDacl);
Désolé, mon code de test commence à être de plus en plus déguelasse.
à l'origine j'ai ca :
Sauf que le groupe "Utilisateurs" a un accès en lecture seul.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 HANDLE hRet = CreateFile(szPath, 0, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL );
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