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 :

Probleme avec ACCESS_MASK


Sujet :

Windows

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 100
    Points : 77
    Points
    77
    Par défaut Probleme d'heritage
    Bonjour,

    Je cherche a developper une fonction qui creer un repertoire et qui lui attribut les droits adequates. Je me sers de la fonction:
    BOOL CreateDirectory(
    LPCTSTR lpPathName,
    LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );

    Mon probleme est que je n'arrive pas a attribuer les "permissions".
    EXPLICIT_ACCESS drt[1];
    -
    .
    .
    .
    -
    drt[0].Trustee.TrusteeForm = TRUSTEE_IS_NAME;
    drt[0].Trustee.TrusteeType = TRUSTEE_IS_USER;
    drt[0].Trustee.ptstrName = log;
    drt[0].grfAccessPermissions = FILE_GENERIC_READ;
    drt[0].grfAccessMode = SET_ACCESS;
    drt[0].grfInheritance = CONTAINER_INHERIT_ACE;



    Sa compile sans probléme, tout fonctionne correctement sauf que pour l'utilisateur "log", aucun droits n'est coché. Apparement, il ne tient pas compte de drt[0].grfAccessPermissions = FILE_GENERIC_READ;

    "FILE_GENERIC_READ" est du type "ACCESS_MASK" tres mal documenté sur la msdn, sauf erreur de ma part.

    J'espere être assez clair.
    Si qq peut m'aider a resoudre ce de problème, ou possede de la doc sur ACCESS_MASK.

    Merci d'avance.

  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 582
    Points
    41 582
    Par défaut
    Tu as essayé pour un fichier et non un répertoire, pour commencer ?

  3. #3
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Essaie avec GENERIC_READ, c'est ce que j'ai toujours utilisé avec des fichiers (je ne connaissais pas FILE_GENERIC_READ...), on ne sait jamais

  4. #4
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 100
    Points : 77
    Points
    77
    Par défaut
    Pour les fichiers, c'est le même principe que pour les repertoires.

    J'ai déjà essayer avec GENERIC_READ, sa "coche" que "autorisation speciale".

    Un exemple de code qui ne marche pas: (pour que l'utilisateur "log" soit ajouté il faut qu'il soit dans votre active directory)
    #include "stdafx.h"
    #include <iostream>
    #include <aclapi.h>

    int main()
    {
    USES_CONVERSION;
    DWORD rt;
    LPSTR log = "04228";
    EXPLICIT_ACCESS drt[2]; //The EXPLICIT_ACCESS structure defines access control information for a specified trustee
    PSECURITY_DESCRIPTOR secDescript = NULL;//structure contains the security information associated with an object
    PACL pAcl = NULL;
    SECURITY_ATTRIBUTES sa;
    PSID pAdminSID;
    SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY;


    ZeroMemory(&drt,sizeof(EXPLICIT_ACCESS));
    drt[0].Trustee.TrusteeForm = TRUSTEE_IS_NAME; //indicate type pointed by ptstrName, a null-terminated string indicate a user
    drt[0].Trustee.TrusteeType = TRUSTEE_IS_USER; //indicates whether the trustee is a user account/group account/unknown account type
    drt[0].Trustee.ptstrName = log;
    drt[0].grfAccessPermissions = GENERIC_READ;
    drt[0].grfAccessMode = SET_ACCESS;
    drt[0].grfInheritance = CONTAINER_INHERIT_ACE;


    AllocateAndInitializeSid(&SIDAuthNT, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0,&pAdminSID);
    drt[1].grfAccessPermissions = KEY_ALL_ACCESS;
    drt[1].grfAccessMode = SET_ACCESS;
    drt[1].grfInheritance= CONTAINER_INHERIT_ACE;
    drt[1].Trustee.TrusteeForm = TRUSTEE_IS_SID;
    drt[1].Trustee.TrusteeType = TRUSTEE_IS_GROUP;
    drt[1].Trustee.ptstrName = (LPTSTR) pAdminSID;


    std::cout << drt[0].Trustee.ptstrName << std::endl;
    rt = SetEntriesInAcl(2,drt,NULL,&pAcl); // Create a new ACL that contains the new ACEs.


    secDescript = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR,SECURITY_DESCRIPTOR_MIN_LENGTH);
    InitializeSecurityDescriptor(secDescript, SECURITY_DESCRIPTOR_REVISION);

    SetSecurityDescriptorDacl(secDescript,true,pAcl,false);
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.bInheritHandle = false;
    sa.lpSecurityDescriptor = secDescript;
    int test = CreateDirectory("C:\\test3",&sa);
    if( test =!0 ) printf("CreateDirectory error occured: %u\n",GetLastError());
    LocalFree(secDescript);
    system("pause");
    return 0;
    }

  5. #5
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 100
    Points : 77
    Points
    77
    Par défaut
    Le pb venait du fait que je gerais mal "X.grfInheritance".
    Si "X.grfInheritance" a comme valeur "SUB_CONTAINERS_AND_OBJECTS_INHERIT" , "GENERIC_READ" est correctement pris en compte, seulement le dossier n'herite pas des autorisations de l'objet parent...
    Comment faire pour qu'il herite des autorisations du dossier parent?



    ------------------------------------------
    l'autorisation parentale koa ;p ...

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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