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 CreateFile à l'ouverture du disque C: sous vista


Sujet :

Windows

  1. #1
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 81
    Points
    81
    Par défaut Probleme CreateFile à l'ouverture du disque C: sous vista
    En fait je suis en train de developper une application qui permet de lire et ecrire sur le disque. Pour cela, j'utilise les fonctions CreateFile, ReadFile et WriteFile.

    Sous XP cela marche tres bien. Mais sous Vista en mode User (avec le UAC activé) la fonction CreateFile me renvoie INVALID_HANDLE_VALUE et la fonction GetLastError me renvoie ERROR_ACCESS_DENIED.

    Je sais qu'il y a des restrictions au niveau de Vista mais d'aprés MSDN cela concerne que l'ecriture sur le disque alors que moi j'arrive meme pas à ouvrir le disque C:

    Voila la ligne de code que j'utilise pour l'ouverture de mon disque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    _HandleDuVolume = CreateFile("\\\\.\\C:",   GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 
    NULL, OPEN_EXISTING, 
    FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_SYSTEM| 
    FILE_FLAG_NO_BUFFERING|FILE_FLAG_WRITE_THROUGH| 
    FILE_FLAG_OPEN_REPARSE_POINT 
    , NULL);
    S'il vous plait il y a quelqu'un qui peut m'aider à regler ce probleme ?

    J'attend votre reponse avec impatience.

    Ksoft

  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 518
    Points
    41 518
    Par défaut
    Si tu demandes les droits en écriture, c'est normal que les restrictions fassent foirer.

    Par contre, il me semble qu'en fait, c'est censé foirer même en lecture: Apparemment, le privilège SE_MANAGE_VOLUME_NAME est nécessaire dans tous les cas.
    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
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    Je vous remercire pour votre reponse.

    En fait j'essaye de suivre votre conseil et d'utiliser la fonction LookupPrivilegeValue comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LUID luid;
    LookupPrivilegeValue(NULL, SE_MANAGE_VOLUME_NAME, &luid)
    1 - Qu'est ce que je doit mettre comme premier parametre à cette fonciton si je veux acceder à mon disque C: ?

    2 - Lors de la compilation le compilateur m'indisque cette erreur :

    error C2065: 'SE_MANAGE_VOLUME_NAME' : undeclared identifier
    comment je pourrai regler ca ?

    Merci

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    SE_MANAGE_VOLUME_NAME n'est défini que pour Windows 2000 et plus récents. Il faut définier _WIN32_WINNT à 0x0500 minimum pour l'utiliser. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #define _WIN32_WINNT 0x0500
    
    #include <windows.h>
    
    int main()
    {
        return 0;
    }

  5. #5
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 81
    Points
    81
    Par défaut
    J'ai le meme probleme,

    J'ai declaré SE_MANAGE_VOLUME_NAME comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define _WIN32_WINNT 0x0500
    Mais j'ai toujours ca lors de la compilation :

    error C2065: 'SE_MANAGE_VOLUME_NAME' : undeclared identifier
    En sachant que j'utilise Visual C++ 6.0

  6. #6
    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 518
    Points
    41 518
    Par défaut
    Possèdes-tu un Platform SDK assez récent?

    Il me semble que le dernier SDK officiellement compatible avec Visual 6 était celui de Février 2003...
    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
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 81
    Points
    81
    Par défaut
    J'ai toujours ce probleme :

    est ce que je peux utilisé ca à la place ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define SE_MANAGE_VOLUME_NAMETEXT "SeManageVolumePrivilege"
    J'attend votre reponse.

    Ksoft

  8. #8
    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 518
    Points
    41 518
    Par défaut
    Utilise ceci:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifndef SE_MANAGE_VOLUME_NAME /* Platform SDK too old ?*/
    #define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
    #endif
    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
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 81
    Points
    81
    Par défaut
    Voila le bout de code que j'utilise :


    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
    
    TOKEN_PRIVILEGES _Privilege;
    LUID _Luid;
    HANDLE  _HToken = NULL;
    
    _err = LookupPrivilegeValue(NULL, SE_MANAGE_VOLUME_NAME, &_Luid);
    
    if(_err != 0) 
    {
    
    _Privilege.PrivilegeCount     = 1;
    _Privilege.Privileges[0].Luid = _Luid;
    _Privilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    
    OpenProcessToken(GetCurrentProcess(),  TOKEN_READ, &_HToken);
    
    _err = AdjustTokenPrivileges(_HToken, FALSE, &_Privilege, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL);
    
    if(_err == 0) 
    {
     _err = GetLastError();
    }
    }
    Maintenant le probleme c'est que GetLastError() que j'appelle apres la fonction AdjustTokenPrivileges me retourne ERROR_ACCESS_DENIED.

    Je peux deduire que soit je troune en rond soit j'ai pas su comment exploiter ces fonctions

  10. #10
    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 518
    Points
    41 518
    Par défaut
    Tu n'as pas demandé de droits suffisants dans OpenProcessToken().

    PS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    _err = AdjustTokenPrivileges(_HToken, FALSE, &_Privilege, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL);
    
    if(_err == 0) 
    {
     _err = GetLastError();
    }
    Ton emploi de _err est très mauvais: _err est soit un BOOL (pour les fonctions qui en retournent un), soit un HRESULT, soit une valeur d'erreur, mais ne doit pas changer de signification au cours de sa vie. Cela rend le code illisible.
    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.

  11. #11
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 81
    Points
    81
    Par défaut
    Quels sont les droits que je dois demandé selon vous ?

  12. #12
    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 518
    Points
    41 518
    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.

  13. #13
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 81
    Points
    81
    Par défaut
    Maintenant la fonction ne me retourne pas d'erreur

    Je l'appele de cette maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		
    BOOL _errBool = TRUE;
    
    _errBool = OpenProcessToken(GetCurrentProcess(),  TOKEN_ADJUST_PRIVILEGES | TOKEN_ALL_ACCESS, &_HToken);
    
    _errBool = AdjustTokenPrivileges(_HToken, FALSE, &_Privilege, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL);
    et le GetLastError qui suis la fonction AdjustTokenPrivileges me retourne ERROR_NOT_ALL_ASSIGNED

    et puis j'appele la focntion CreateFile comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    _HandleDuVolume = CreateFile(_NomVolume,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_SYSTEM|FILE_FLAG_NO_BUFFERING| FILE_FLAG_WRITE_THROUGH|FILE_FLAG_OPEN_REPARSE_POINT, NULL);
    Cette fonction CreateFile me retourne INVALID_HANDLE_VALUE et le GetLastError qui suit me retourne ERROR_ACCESS_DENIED

  14. #14
    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 518
    Points
    41 518
    Par défaut
    Citation Envoyé par ksoft Voir le message
    le GetLastError qui suis la fonction AdjustTokenPrivileges me retourne ERROR_NOT_ALL_ASSIGNED
    C'est parce qu'en Utilisateur, le privilège t'est refusé. Il faut être administrateur pour l'avoir.

    La fonction AdjustTokenPrivileges() ne sert qu'à activer ou désactiver (ou complètement supprimer pour le processus et ses fils) des privilèges que tu possèdes déjà. Elle ne permet pas d'ajouter un privilège à quelqu'un qui n'en a pas.
    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.

  15. #15
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 81
    Points
    81
    Par défaut
    Mais mon probleme est de ne pas avoir ces privileges alors que je dois les avoir et je connais pas comment je pourrais les avoir.

    Avec quelle fonction je pourrai les obtenir mes previleges ?

  16. #16
    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 518
    Points
    41 518
    Par défaut
    Sous Vista, je ne sais pas trop, car je ne sais pas comment marche l'UAC.

    En clair, je sais quelle fonction un admin doit utiliser pour donner un privilège à un utilisateur particulier (et si tu as un Vista Pro, tu dois aussi avoir une interface graphique pour ça), mais j'ignore si ça suffira à faire fonctionner ton programme sans élévation de privilège. Mais on peut essayer.

    As-tu un Vista professionnel?
    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.

  17. #17
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 81
    Points
    81
    Par défaut
    Oui j'ai un Vista Professionnel

  18. #18
    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 518
    Points
    41 518
    Par défaut
    Dans ce cas, tu dois avoir des options pour régler les privilèges, dans les Group Policies (démarrer -> exécuter -> gpedit.msc)

    En Anglais, j'ai ça:
    Local computer policy -> computer configuration -> Windows settings -> Security settings -> Local policies -> User rights assignment -> Valeur "Perform volume maintenance tasks"
    Dans les propriétés de cette valeur, tu as un bouton pour ajouter un utilisateur qui possédera alors ce privilège.

    Attention, c'est un privilège extrêmement puissant. Ce n'est pas pour rien si seuls les administrateurs l'ont...
    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.

  19. #19
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 81
    Points
    81
    Par défaut
    OK c'est verifié touca j'ai "administrator"

    alors que dois-je faire maitenant ?

  20. #20
    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 518
    Points
    41 518
    Par défaut
    Es-tu sûr que tu as "Administrator" ?
    N'as-tu pas plutôt "Administrators" ?

    Il y a une grosse différence ici. En mode User, un utilisateur ne fait plus partie du groupe Administrators. Donc, tu dois ajouter à la liste le nom de l'utilisateur auquel tu veux donner ce privilège en particulier.
    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. Probleme avec NTI CD/DVD-Maker 7 sous Vista
    Par Hatchepsout dans le forum Windows Vista
    Réponses: 1
    Dernier message: 11/06/2009, 10h57
  2. acces disque dur sous vista
    Par jerem721 dans le forum Général Java
    Réponses: 0
    Dernier message: 06/06/2009, 20h16
  3. Probleme automatisation d'ouverture un site web sous IE
    Par eziminski dans le forum VBScript
    Réponses: 0
    Dernier message: 25/04/2009, 09h17
  4. partitionner le disque dur sous vista
    Par kroukse dans le forum Windows Vista
    Réponses: 15
    Dernier message: 03/04/2008, 00h57
  5. patitionner mon disque dur sous vista
    Par vacknov dans le forum Windows Vista
    Réponses: 7
    Dernier message: 02/08/2007, 14h16

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