Bonjour,

Je cherche a récupérer le numéro de série d'une clé usb (et non le numero du volume).

Je souhaite utiliser une fonction de l'api win32 qui se nomme
DEVICEIOCONTROL.

Voici le code

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
 
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <process.h>
#include <WinIoCtl.h>
#include <Winbase.h>
 
 
 
typedef struct _MEDIA_SERIAL_NUMBER_DATA
{
ULONG SerialNumberLength;
ULONG Result;
ULONG Reserved[2];
UCHAR SerialNumberData[];
} MEDIA_SERIAL_NUMBER_DATA,*PMEDIA_SERIAL_NUMBER_DATA;
 
void main()
{
HANDLE Handle = 0; // variable servant a stocker le handle pour l'acces au disque
unsigned int temp=0,temp1=0, temp2 = 0;
unsigned int *temporaire=&temp1;
unsigned long i = 0;
MEDIA_SERIAL_NUMBER_DATA val; // creation variable "val" de type MEDIA SERIAL NUMBER DATA
MEDIA_SERIAL_NUMBER_DATA *pVal = &val;
// initialisation de "val" pour le numéro de série
val.SerialNumberLength=0;
 
Handle = CreateFile("\\\\.\\I:",0,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0);// creation du Handle du disque souhaité ici lecteur I
i=DeviceIoControl(Handle,IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER,NULL,0,pVal,sizeof(val),temporaire,NULL);
printf("valeur Handle %c fin\n",Handle); // permet de savoir si le HANDLE A BIEN FONCTIONNER
printf("valeur retour %d fin\n",i); // Permet de savoir si la fonction deviceiocontrol a bien fonctionner
printf("valeur serial %s fin\n",val.SerialNumberData); // affichage de la chaine numero de serie
printf("valeur serial %h fin\n",val.SerialNumberData);
printf("valeur nb de donne %d fin\n",temp1); // affichage du nombre d'octet renvoyé dans "val" par deviceiocontrol
printf("valeur longeur num serie %d fin\n",val.SerialNumberLength); // affichage de la longueur du numéro de serie renvoyé par la fonction
CloseHandle(Handle); // libère le handle
}
Le problème c'est que la fonction ne me renvoie pas de valeur correcte.

Je soupsonne la difficulté sur le fait que la structure utilise un tableau dynamique qui est autorisé dans C99.

La structure est un copier coller de msdn http://msdn.microsoft.com/en-us/library/aa363216.aspx
merci pour votre aide car depuis une semaine je bloque la dessus