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

API, COM et SDKs Delphi Discussion :

Numéro de série fournisseur d'un disque dur IOCTL_DISK_GET_STORAGEID


Sujet :

API, COM et SDKs Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 117
    Points : 41 249
    Points
    41 249
    Billets dans le blog
    63
    Par défaut Numéro de série fournisseur d'un disque dur IOCTL_DISK_GET_STORAGEID
    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

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Lorsque je regarde la documentation de DeviceIoControl sur la MSDN et surtout les Disk Management Control Codes supportés, je ne retrouves pas celui que tu veux utiliser ou un autre s'approchant du type d'information que l'on voudrait récupérer.

    Est-ce que solution de traduire le code C# proposé par mmsalem en Delphi ne serait-elle pas plus simple ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 117
    Points : 41 249
    Points
    41 249
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Est-ce que solution de traduire le code C# proposé par mmsalem en Delphi ne serait-elle pas plus simple ?
    Possible , mais je voudrais voir ce que je peux faire via les API , que je maitrise mieux ? disons un peu mieux . De plus , cela "correspond" mieux à ce que j'ai déjà fait pour l'éjection des clés USB.

    En fait je me suis appercu que IOCTL_DISK_GET_STORAGEID serait plus pour les flash card et Windows CE . La suite au prochain Post

    Bonne Journée

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour Sergio,

    ici un petit lien que j'ai trouvé et qui pourrait s'avérer intéressant.

    Par contre je n'ai pas pu trouver d'infos sur la MSDN concernant le control code DFP_RECEIVE_DRIVE_DATA que la personne utilise avec DeviceIoControl.

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 878
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 878
    Points : 15 310
    Points
    15 310
    Par défaut
    Yep !

    Un autre lien, en Delphi : prendre IdeSN2.zip. J'ai testé (l'exemple ne renvoie que le serial du 1er dur), c'est good
    DFP_RECEIVE_DRIVE_DATA y est défini et utilisé.
    (le code VB du lien précédent fonctionne également fort agréablement).

    Mes 2 cts,
    --
    jp

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 117
    Points : 41 249
    Points
    41 249
    Billets dans le blog
    63
    Par défaut
    merci pour vos liens , j'en avais trouvé certains . J'ai également trouvé un composant shareware URL http://www.devlib.net/download/tgetdiskserial.zip

    un tour plus approfondi , m'a également permis de trouver chez JEDI http://kent.dl.sourceforge.net/sourc...gManagerAPI.7zune demo+un compo fort interessants sur les USB permettant entre autres (apres quelques modifs ) d'obtenir le numero de série des clés (seul problème il me faudrait deux clés identiques pour pouvoir le verifier ) . j'y ai découvert plein de choses interessantes sur les port USB (@ero-sennin si tu me lis) mais aussi des reponses (qui ouvrent d'autres questions) sur les disques USB et imprimantes multifonctions (dont lecteur de cartes) .

    je comprends mieux mes problèmes d'éjection de peripheriques USB autres que les clés

Discussions similaires

  1. Numéro de Série Physic d'un Disque Dure
    Par demss dans le forum Visual C++
    Réponses: 2
    Dernier message: 05/12/2009, 05h46
  2. Numéro de série du disque dur
    Par h_kamel dans le forum Assembleur
    Réponses: 8
    Dernier message: 21/05/2007, 11h28
  3. Numéro de série du disque dur
    Par glouglou4485 dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/01/2007, 15h40
  4. Récuperer le numéro de série du disque dur et du CPU
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2006, 21h39
  5. Comment obtenir le numéro de série d'un disque dur?
    Par walidrachid dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/09/2005, 15h59

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