IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Fichiers] Changer les droits NTFS d'un fichier


Sujet :

C++

  1. #1
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut [Fichiers] Changer les droits NTFS d'un fichier
    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

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 580
    Points
    41 580
    Par défaut
    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...

  3. #3
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    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 :
    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();
    	}
    mais manque de bol, j'ai dwError = 122 : taille de buffer insuffisante, bizarre !!
    Je continue à investiguer !

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 580
    Points
    41 580
    Par défaut
    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...

  5. #5
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    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 :
    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);
    mais SetFileSecurity me retourne 1305 : ERROR_UNKNOWN_REVISION

    Désolé, mon code de test commence à être de plus en plus déguelasse.


    à l'origine j'ai ca :
    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
    		);
    Sauf que le groupe "Utilisateurs" a un accès en lecture seul.

Discussions similaires

  1. Changer les droits d'un fichier en java multiplateforme
    Par titoun256 dans le forum Langage
    Réponses: 7
    Dernier message: 11/09/2009, 18h59
  2. Comment changer les droits d'ecriture de fichiers
    Par jeromesteffe dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/10/2007, 14h30
  3. Chmod Impossible de changer les droits des fichiers
    Par Franciske dans le forum Sécurité
    Réponses: 2
    Dernier message: 09/10/2006, 00h58
  4. Changer les droits d'un fichier sous windows
    Par lnikolanta dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 26/09/2005, 17h03
  5. Changer les droits d'un fichier downloadé
    Par aergil dans le forum ASP
    Réponses: 5
    Dernier message: 20/05/2005, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo