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

Windows Discussion :

Comment donner le droit lecture/écriture au groupe "Tout le monde" en API Windows ?


Sujet :

Windows

  1. #1
    Membre du Club Avatar de masterx_goldman
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 51
    Points
    51
    Par défaut Comment donner le droit lecture/écriture au groupe "Tout le monde" en API Windows ?
    Bonjour tout le monde,
    J'ai un code qui vise donner le droit de contrôle total (ou à la limite "lecture/écriture" )au groupe "tout le monde" ( ou "Everyone" en anglais ). Le problème c'est que ce programme, après lancement en compte SYSTEM(j'utilise PSTools pour faire ça):
    1) OK: Réussit à ajouter le groupe "Tout le monde" aux groupes qui ont droit sur ce dossier
    2) KO: ne donne à ce groupe que "Autorisations spéciales" mais pas de lecture/écriture

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    #include "stdafx.h"
    #include "monProg.h"
    #include <windows.h>
    #include <AccCtrl.h>
    #include <Aclapi.h>
    #include <stdio.h>
    
    
    
    
    DWORD AddAceToObjectsSecurityDescriptor (
        LPTSTR pszObjName,          // name of object
        SE_OBJECT_TYPE ObjectType,  // type of object
        LPTSTR pszTrustee,          // trustee for new ACE
        TRUSTEE_FORM TrusteeForm,   // format of trustee structure
        DWORD dwAccessRights,       // access mask for new ACE
        ACCESS_MODE AccessMode,     // type of ACE
        DWORD dwInheritance         // inheritance flags for new ACE
    ) ;
    
    int APIENTRY _tWinMain(HINSTANCE ,
                         HINSTANCE ,
                         LPTSTR    ,
                         int       )
    {
    
    PSID pSIDEveryone = NULL;
    
    SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
    
    //Create a SID for the BUILTIN\Administrators group.
       
    if( !AllocateAndInitializeSid(&SIDAuthWorld, 1,
                                  SECURITY_WORLD_RID,
                                                              0,
                                            0, 0, 0, 0, 0, 0,
                                           &pSIDEveryone) )
        {
            printf( "Error %u\n",GetLastError() );
            
        }
    
    DWORD d=AddAceToObjectsSecurityDescriptor (
             "C:\\test\\",  // name of object
             SE_FILE_OBJECT,  // type of object
            (LPTSTR)pSIDEveryone,  // trustee for new ACE
             TRUSTEE_IS_SID,  // format of trustee structure
           GENERIC_ALL|GENERIC_READ|GENERIC_WRITE|GENERIC_EXECUTE,  //access mask for new ACE
        SET_ACCESS,  // type of ACE
        NO_INHERITANCE  // inheritance flags for new ACE
    ) ;
    
    return 0;
    }
    
    
    DWORD AddAceToObjectsSecurityDescriptor (
        LPTSTR pszObjName,          // name of object
        SE_OBJECT_TYPE ObjectType,  // type of object
        LPTSTR pszTrustee,          // trustee for new ACE
        TRUSTEE_FORM TrusteeForm,   // format of trustee structure
        DWORD dwAccessRights,       // access mask for new ACE
        ACCESS_MODE AccessMode,     // type of ACE
        DWORD dwInheritance         // inheritance flags for new ACE
    ) 
    {
    	DWORD dwRes = 0;
    	PACL pOldDACL = NULL, pNewDACL = NULL;
    	PSECURITY_DESCRIPTOR pSD = NULL;
    	EXPLICIT_ACCESS ea;
    
    	if (NULL == pszObjName) 
    		return ERROR_INVALID_PARAMETER;
    
    	// Get a pointer to the existing DACL.
    
    	dwRes = GetNamedSecurityInfo(pszObjName, ObjectType, 
    		  DACL_SECURITY_INFORMATION,
    		  NULL, NULL, &pOldDACL, NULL, &pSD);
    	if (ERROR_SUCCESS != dwRes) {
    		printf( "GetNamedSecurityInfo Error %u\n", dwRes );
    		goto Cleanup; 
    	}  
    
    	// Initialize an EXPLICIT_ACCESS structure for the new ACE. 
    
    	ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
    	ea.grfAccessPermissions = dwAccessRights;
    	ea.grfAccessMode = AccessMode;
    	ea.grfInheritance= dwInheritance;
    	ea.Trustee.TrusteeForm = TrusteeForm;
    	ea.Trustee.TrusteeType= TRUSTEE_IS_GROUP;
    	ea.Trustee.ptstrName = pszTrustee;
    	
    
    	// Create a new ACL that merges the new ACE
    	// into the existing DACL.
    
    	dwRes = SetEntriesInAcl(1,&ea, pOldDACL, &pNewDACL);
    	if (ERROR_SUCCESS != dwRes)  {
    		printf( "SetEntriesInAcl Error %u\n", dwRes );
    		goto Cleanup; 
    	}  
    
    	// Attach the new ACL as the object's DACL.
    
    	dwRes = SetNamedSecurityInfo(pszObjName, ObjectType, 
    		  DACL_SECURITY_INFORMATION,
    		  NULL, NULL, pNewDACL, NULL);
    	if (ERROR_SUCCESS != dwRes)  {
    		printf( "SetNamedSecurityInfo Error %u\n", dwRes );
    		goto Cleanup; 
    	}  
    
    	Cleanup:
    
    		if(pSD != NULL) 
    			LocalFree((HLOCAL) pSD); 
    		if(pNewDACL != NULL) 
    			LocalFree((HLOCAL) pNewDACL); 
    
    		return dwRes;
    }
    Alors, ce qui paraît c'est que ces autorisations spéciales n'incluent pas l'écriture/lecture ( ou je me trompe ? )
    Je sais pas comment corriger ce code pour donner le droit lecture/écriture à ce groupe

    Merci d'avance pour toute indication

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Plutôt que les droits génériques, essaie les vrais droits:
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club Avatar de masterx_goldman
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Plutôt que les droits génériques, essaie les vrais droits:
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
    C'est quoi la différence entre les deux ?

  4. #4
    Membre du Club Avatar de masterx_goldman
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 51
    Points
    51
    Par défaut
    Pour info, j'ai utilisé les droits d'accès réels dans le lien qu'a cité Médinoc : http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

    Mais ça n'a pas marché le même problème :

    Le groupe Tout le monde s'ajoute à la liste des groupes mais avec des Autorisations Spéciales seulement qui est cochée.
    Certain disent qu'avoir la case des autorisations spéciales qui est cochée est équivalent à avoir le contrôle total sur le dossier, je sais pas si c'est vrai surtout que les cases lecture/écriture ne sont pas cochées ..

    voilà le code encore une fois avec la petite modif au niveau du dwAccessRights que j'ai mis à FILE_ALL_ACCESS :

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    #include "stdafx.h"
    #include "monProg.h"
    #include <windows.h>
    #include <AccCtrl.h>
    #include <Aclapi.h>
    #include <stdio.h>
    
    
    
    
    DWORD AddAceToObjectsSecurityDescriptor (
        LPTSTR pszObjName,          // name of object
        SE_OBJECT_TYPE ObjectType,  // type of object
        LPTSTR pszTrustee,          // trustee for new ACE
        TRUSTEE_FORM TrusteeForm,   // format of trustee structure
        DWORD dwAccessRights,       // access mask for new ACE
        ACCESS_MODE AccessMode,     // type of ACE
        DWORD dwInheritance         // inheritance flags for new ACE
    ) ;
    
    int APIENTRY _tWinMain(HINSTANCE ,
                         HINSTANCE ,
                         LPTSTR    ,
                         int       )
    {
    
    	PSID pSIDEveryone = NULL;
    
    	SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
    
    	 //Create a SID for the BUILTIN\Administrators group.
       
    	if( !AllocateAndInitializeSid(&SIDAuthWorld, 1,
                         SECURITY_WORLD_RID,
                         0,
                         0, 0, 0, 0, 0, 0,
                         &pSIDEveryone) )
        {
            printf( "Error %u\n",GetLastError() );
            
        }
    
    	DWORD d=AddAceToObjectsSecurityDescriptor (
        "C:\\test\\",          // name of object
        SE_FILE_OBJECT,  // type of object
        (LPTSTR)pSIDEveryone,          // trustee for new ACE
        TRUSTEE_IS_SID,   // format of trustee structure
        FILE_ALL_ACCESS,       // access mask for new ACE
        SET_ACCESS,     // type of ACE
        NO_INHERITANCE         // inheritance flags for new ACE
    ) ;
    
    return 0;
    }
    
    
    DWORD AddAceToObjectsSecurityDescriptor (
        LPTSTR pszObjName,          // name of object
        SE_OBJECT_TYPE ObjectType,  // type of object
        LPTSTR pszTrustee,          // trustee for new ACE
        TRUSTEE_FORM TrusteeForm,   // format of trustee structure
        DWORD dwAccessRights,       // access mask for new ACE
        ACCESS_MODE AccessMode,     // type of ACE
        DWORD dwInheritance         // inheritance flags for new ACE
    ) 
    {
    	DWORD dwRes = 0;
    	PACL pOldDACL = NULL, pNewDACL = NULL;
    	PSECURITY_DESCRIPTOR pSD = NULL;
    	EXPLICIT_ACCESS ea;
    
    	if (NULL == pszObjName) 
    		return ERROR_INVALID_PARAMETER;
    
    	// Get a pointer to the existing DACL.
    
    	dwRes = GetNamedSecurityInfo(pszObjName, ObjectType, 
    		  DACL_SECURITY_INFORMATION,
    		  NULL, NULL, &pOldDACL, NULL, &pSD);
    	if (ERROR_SUCCESS != dwRes) {
    		printf( "GetNamedSecurityInfo Error %u\n", dwRes );
    		goto Cleanup; 
    	}  
    
    	// Initialize an EXPLICIT_ACCESS structure for the new ACE. 
    
    	ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
    	ea.grfAccessPermissions = dwAccessRights;
    	ea.grfAccessMode = AccessMode;
    	ea.grfInheritance= dwInheritance;
    	ea.Trustee.TrusteeForm = TrusteeForm;
    	ea.Trustee.TrusteeType= TRUSTEE_IS_GROUP;
    	ea.Trustee.ptstrName = pszTrustee;
    	
    	// Create a new ACL that merges the new ACE
    	// into the existing DACL.
    
    	dwRes = SetEntriesInAcl(1,&ea, pOldDACL, &pNewDACL);
    	if (ERROR_SUCCESS != dwRes)  {
    		printf( "SetEntriesInAcl Error %u\n", dwRes );
    		goto Cleanup; 
    	}  
    
    	// Attach the new ACL as the object's DACL.
    
    	dwRes = SetNamedSecurityInfo(pszObjName, ObjectType, 
    		  DACL_SECURITY_INFORMATION,
    		  NULL, NULL, pNewDACL, NULL);
    	if (ERROR_SUCCESS != dwRes)  {
    		printf( "SetNamedSecurityInfo Error %u\n", dwRes );
    		goto Cleanup; 
    	}  
    
    	Cleanup:
    
    		if(pSD != NULL) 
    			LocalFree((HLOCAL) pSD); 
    		if(pNewDACL != NULL) 
    			LocalFree((HLOCAL) pNewDACL); 
    
    		return dwRes;
    }
    Je répète le but de ce code, il s'agit de donner les droits de control total (ou au moins lecture/écriture)sur un dossier pour le groupe "Tout le monde".

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/08/2009, 15h55
  2. Comment donner des droits sur tous les objets d'un schéma
    Par farenheiit dans le forum Administration
    Réponses: 2
    Dernier message: 07/06/2007, 16h27
  3. [Conception] donner les droits d'écriture sur un répertoire
    Par Mat_DZ dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 22/05/2007, 10h46
  4. [Apache] donner les droits d'écriture pour PHP
    Par Torpedox dans le forum Apache
    Réponses: 4
    Dernier message: 07/01/2006, 15h01
  5. Comment donner les droits sysdba à un autre user ?
    Par willone dans le forum Débuter
    Réponses: 3
    Dernier message: 24/09/2004, 11h15

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