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 :

GetVolumeInformation & Seven


Sujet :

Windows

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 479
    Points : 267
    Points
    267
    Par défaut GetVolumeInformation & Seven
    Bjr

    je cherche à obtenir le numéro de série du disque système ce qui ne pose pas de pb particulier en associant GetEnvironmentVariable et GetVolumeInformation.

    Les tests en environnements Xp sont satisfaisant

    Sur un poste sous Seven en revanche, la chaine "c:" retournée par GetEnvironmentVariable("SystemDrive", déclenche l'erreur 123 (The filename, directory name, or volume label syntax is incorrect.)

    Chose étonnante, si le programme est exécuté depuis une clé USB sur le poste sous Vista, l'erreur n'apparait pas.

    Voici le code de la fonction incriminée
    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
    DWord  __fastcall   GetVolSerialNumber()
    {
    char VolName [MAXPATH];
    char FileSysName [MAXPATH];
    char Buffer [MAXPATH];
    DWord VolSerial;
    DWord FileMaxLen;
    DWord FileFlags;
    
    GetEnvironmentVariable("SystemDrive",Buffer,MAXPATH);    
    
    if (GetVolumeInformation(NULL,VolName,MAXPATH,&VolSerial,&FileMaxLen,&FileFlags,FileSysName,MAXPATH))
            return VolSerial;
            else
            return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    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 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GetEnvironmentVariable("SystemDrive",Buffer,MAXPATH);    
    
    if (GetVolumeInformation(NULL,VolName,MAXPATH,&VolSerial,&FileMaxLen,&FileFlags,FileSysName,MAXPATH))
    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 actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 479
    Points : 267
    Points
    267
    Par défaut
    Oui, en effet, j'ai copié une version de test dans le code. Il fallait lire bien sûr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    GetEnvironmentVariable("SystemDrive",Buffer,MAXPATH);    
    
    if (GetVolumeInformation(Buffer,VolName,MAXPATH,&VolSerial,&FileMaxLen,&FileFlags,FileSysName,MAXPATH))
            return VolSerial;
            else
            return 0;
    Il se trouve que GetVolumeInformation() retourne le SerialNum du disque du répertoire courant si le premier paramètre est NULL. Ce que j'ai testé aussi. D'ailleurs dans ce cas, le "bogue" ne se manifeste pas et la foncton retourne bien le numéro de série du lecteur courant même sous Seven. Mais ce n'est pas mon besoin. Je tiens absolument à obtenir le numéro de série du lecteur portant le système.

    Nota : je mélange aussi "Seven" et "Vista" dans mon premier post. Il s'agit bien d'une version Seven.

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 479
    Points : 267
    Points
    267
    Par défaut
    Problème résolu.

    Apparemment Windows XP la fonction GetVolumeInformation tolère que le premier paramètre "lpRootPathName" ne contienne que "C:" alors que sous Seven/Vista le PathDelimiter est obligatoire "C:\"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetVolumeInformation(Buffer,VolName,MAXPATH,&VolSerial,&FileMaxLen,&FileFlags,FileSysName,MAXPATH))
    je ne m'explique pas pourquoi le problème n'apparait que si l'application est exécutée sur le volume en question. Pas le temps de creuser... il reste donc un peu d'OS à ronger.

+ Répondre à la discussion
Cette discussion est résolue.

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