suite à la demande de mmsalem dans ce post j'ai essayé par l'intermediaire de la JWApi d'obtenir ce fameux n° de serie fournisseur mais je bloque un peu

voici une partie du 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
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls, Buttons, Cfg, CfgMgr32, JwaWinBase, JwaWinIoCtl, SetupApi ;
 
const   IOCTL_DISK_BASE     = FILE_DEVICE_DISK;
 
        MANUFACTUREID_INVALID = $01;
        SERIALNUM_INVALID=$02;
type
  PSTORAGE_IDENTIFICATION = ^STORAGE_IDENTIFICATION;
  _STORAGE_IDENTIFICATION = record
     dwSize: DWORD;
     dwFlags : DWORD;
     dwManufactureIDOffset : DWORD ;
     dwSerialNumOffset : DWORD ;
  end;
  STORAGE_IDENTIFICATION = _STORAGE_IDENTIFICATION;
  TStorageID = STORAGE_IDENTIFICATION;
  PStorageID = PSTORAGE_IDENTIFICATION;
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
procedure TForm1.GetStorageId(Drive : String);

var   CheminVolume : String;
      Hdrive : THandle;
      Status : Boolean ;
      IOCTL_DISK_GET_STORAGEID : DWord;
      si : STORAGE_IDENTIFICATION;
      dw : Cardinal;
begin
   IOCTL_DISK_GET_STORAGEID:=CTL_CODE(IOCTL_DISK_BASE, $00000709 ,METHOD_BUFFERED, FILE_ANY_ACCESS);

   CheminVolume:='\\.\'+Drive;
   hDrive:=CreateFile(Pchar(CheminVolume), 0,
                      FILE_SHARE_READ OR FILE_SHARE_WRITE,
                      Nil, OPEN_EXISTING, 0, 0);
   if Hdrive=INVALID_HANDLE_VALUE then
     begin
       DisplaySystemError;
       exit;
     end;
   Status := DeviceIoControl(hDrive,IOCTL_DISK_GET_STORAGEID,Nil,0,@si,SizeOf(si),@dw, Nil);
   if not Status  then DisplaySystemError
   else begin
     ShowMessage(format('Disque id %d-%d',[si.dwManufactureIDOffset,si.dwSerialNumOffset]));
   end;
   CloseHandle(Hdrive);
end;
le problème se situe certainement dans le définition de IOCTL_DISK_GET_STORAGEID je ne suis pas sur du tout de la valeur $00000709
en tout cas lorsque je test sous Vista
pour un HD j'ai l'erreur "fonction incorrecte"
pour une clé USB (hè oui je continu ) "Cette demande n'est pas prise en charge" mais là c'est peut être logique

Bref, Quelqu'un aurait-il une idée de la valeur à mettre, j'ai piqué celle-ci dans un source C mais pour un Palm qqChose