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 récupérer des structures consécutives à partir d'un buffer


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 19
    Points
    19
    Par défaut Comment récupérer des structures consécutives à partir d'un buffer
    Bonjour à tous,

    J'ai un buffer qui est rempli avec des structures consécutives de différents types (USB_CONFIGURATION_DESCRIPTOR, USB_INTERFACE_DESCRIPTOR et USB_ENDPOINT_DESCRIPTOR). J'arrive à récupérer les valeurs de la première structure en castant le pointeur du buffer par le type approprié.

    PUSB_CONFIGURATION_DESCRIPTOR _conf = (PUSB_CONFIGURATION_DESCRIPTOR) OutBuffer;

    Ensuite, j'essaie de récupérer les autres de la manière suivante :
    PUSB_INTERFACE_DESCRIPTOR _inter= (PUSB_INTERFACE_DESCRIPTOR) (OutBuffer + _conf->bLength);

    Cependant, ça n'a pas l'air de fonctionner véritablement car même si pour cette interface j'ai les bonnes valeurs après pour le passage aux endpoints je n'ai plus rien de bon.

    Le buffer est retourné à partir d'un IOCTL qui utilise la fonction UsbBuildGetDescriptorRequest :
    UsbBuildGetDescriptorRequest(Urb, (USHORT) sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST),
    USB_CONFIGURATION_DESCRIPTOR_TYPE,
    0,
    0,
    Configuration,
    NULL,
    *Length,
    NULL);

    Le WDK me confirme bien que cette fonction me retourne à la fois la configuration mais aussi les interfaces et les endpoints, je devrais donc tout avoir dans mon buffer.

    Comment je pourrais être sur de bien pointer sur les bonnes structures ?

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Je ne sais pas trop comment USB marche, mais apparement on peut avoir plusieurs interfaces et plusieurs endpoints. Peut-être devrais-tu vérifier le bDescriptorType à chaque fois...

    Et aussi, utilise bien un pointeur de char à chaque ajout de bLength. Si tu fais un simple _inter+_inter->bLength, c'est sûr que tu partiras dans le décor.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 200
    Points : 12 354
    Points
    12 354
    Par défaut
    Il peut, peut-être, avoir des caractères de padding entre les structures. Etes-vous sûr que les structures sont contigües sans contraintes d'alignement ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Si j'en crois la doc, ça devrait être le cas. Mais si c'est le cas, penser à déclarer les pointeurs UNALIGNED si on veut porter un jour son code sur une architecture non-x86 (comme l'IA64)

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/07/2010, 10h01
  2. Réponses: 5
    Dernier message: 17/06/2008, 18h05
  3. [SQL] Comment récupérer des champs a partir d'un fichier de sauvegarde?
    Par baguira dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/03/2007, 19h23
  4. Comment récupérer des données de Outlook Express ?
    Par frenchsting dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 29/04/2005, 12h07
  5. Réponses: 6
    Dernier message: 28/09/2003, 18h49

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