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 :

Droit de lecture/écriture dans un répertoire


Sujet :

Windows

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut Droit de lecture/écriture dans un répertoire
    Salut,

    J'ai un problème pour obtenir l'autorisation en écriture à l'intérieur d'un répertoire (au sens de l'administration Windows). J'essaye d'utiliser GetFileAttributes sur un répertoire dont j'ai autorisé uniquement la "lecture", l'"affichage du contenu" et la "lecture et exécution" dans l'onglet "Sécurité" des propriétés.

    Le résultat du GetFileAttributes sur ce répertoire est 0x00000010 c'est à dire que seul le flag FILE_ATTRIBUTE_DIRECTORY est levé et pas FILE_ATTRIBUTE_READONLY. Pourtant si j'essaye de créer quelque chose dans ce même répertoire Windows me dit bien "Accès refusé".

    Est-ce que j'utilise la bonne fonction ? Et dans tous les cas y a t-il un moyen d'obtenir l'info que je veux ?

    Merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    La fonction GetFileAttributes() retourne des attributs FAT. Ce que tu vois dans l'onglet sécurité sont des attributs de sécurité NTFS.

    C'est pas les mêmes.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    La fonction GetFileAttributes() retourne des attributs FAT. Ce que tu vois dans l'onglet sécurité sont des attributs de sécurité NTFS.

    C'est pas les mêmes.
    C'est bien ce que je soupçonnais...mais alors dans ce cas quelle est la bonne fonction à appeler ???

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    GetFileSecurity() si tu peux le lire sans privilèges.
    Si tu veux lire les attributs de sécurité d'un fichier auquel tu n'as pas accès sans le privilège Backup, tu dois l'ouvrir avec CreateFile( ... , FILE_FLAG_BACKUP_SEMANTICS, ...) et utiliser GetKernelObjectSecurity() sur son handle.
    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.

  5. #5
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    GetFileSecurity() si tu peux le lire sans privilèges.
    Si tu veux lire les attributs de sécurité d'un fichier auquel tu n'as pas accès sans le privilège Backup, tu dois l'ouvrir avec CreateFile( ... , FILE_FLAG_BACKUP_SEMANTICS, ...) et utiliser GetKernelObjectSecurity() sur son handle.
    OK, merci déjà pour cette première indication. Mais en admettant que j'arrive à obtenir un PSECURITY_DESCRIPTOR avec GetFileSecurity() qu'est ce que je dois en faire pour savoir si j'aurais le droit d'écrire ou non ???

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Si c'est pour vérifier si TU as le droit d'écrire, tu devrais pouvoir utiliser OpenProcessToken() pour obtenir ton jeton d'accès et AccessCheck() pour tester...
    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.

  7. #7
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Si c'est pour vérifier si TU as le droit d'écrire, tu devrais pouvoir utiliser OpenProcessToken() pour obtenir ton jeton d'accès et AccessCheck() pour tester...
    Mon besoin c'est de savoir si en tant qu'utilisateur exécutant le programme j'ai les droits d'accès en écriture d'un fichier sur un répertoire (dont les propriétés peuvent être gérées individuellement au niveau de l'onglet Sécurité des propriétés). Je ne pense pas que les fonctions dont tu parle correspondent à ce besoin. GetFileSecurity semble mieux convenir mais il me reste un maillon manquant pour exploiter son résultat.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ben si, ça convient, mais ça s'utilise avec.

    AccessCheck() prend un descripteur de sécurité, un jeton d'accès et un masque de droits en paramètre.
    Donc, on utilise le descripteur de sécurité du fichier, le jeton d'accès du processus courant et le masque de droits désiré...

    (la structure GENERIC_MAPPING doit contenir les droits FILE_GENERIC_READ, etc.)
    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.

  9. #9
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ben si, ça convient, mais ça s'utilise avec.

    AccessCheck() prend un descripteur de sécurité, un jeton d'accès et un masque de droits en paramètre.
    Donc, on utilise le descripteur de sécurité du fichier, le jeton d'accès du processus courant et le masque de droits désiré...

    (la structure GENERIC_MAPPING doit contenir les droits FILE_GENERIC_READ, etc.)
    Ben dis moi 3 ou 4 appels différents pour obtenir l'info... y'a toutes les chances que ça me prenne un bon moment pour faire ça et résoudre tous les soucis qui ne manqueront pas de se poser. Ca me donne franchement envie de rester avec mon try...catch (...) tout miteux autour du code de création...

    Si quelqu'un qui a déjà fait veux bien prendre le temps de poster un exemple je suis évidemment très intéressé.

    Merci

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    En effet, les droits d'accès NTFS sont une chose compliquée.
    Mais ils sont bien plus polyvalents que les droits d'accès POSIX...
    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.

Discussions similaires

  1. Réponses: 11
    Dernier message: 20/09/2009, 15h44
  2. Réponses: 47
    Dernier message: 28/01/2007, 19h39
  3. lecture écriture dans un fichier
    Par poukill dans le forum C++
    Réponses: 9
    Dernier message: 23/05/2006, 11h02
  4. [VB6] Vérification des droits de lecture/écriture sur répert
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 01/02/2006, 18h41
  5. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15

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