Numéro de série disque dur

Messages postés
53
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
11 juin 2010
- - Dernière réponse : cs_fauve
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
- 4 mars 2007 à 20:59
Bonjour,


Je recherche une méthode pour trouver le numéro de série du disque dur.

Il y a quelques codes sur le forum mais ces codes ne donnent pas le
vrai numéro de série du disque dur. Si on formate le disque, le numéro
change.


Moi je veux le vrai numéro de série, celui qui est "gravé" pour toujours sur le disque.


Merci
Afficher la suite 

20 réponses

Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Salut,

regarde le sommaire du site :

 Derniers Snippets sur Codyx pour Visual Basic, VB6, VB.NET, VB 2005
> 26/01/2007 [http://www.codyx.org/snippet_numero-serie-physique-disque-dur-wmi_291.aspx NUMÉRO DE SERIE (PHYSIQUE) DU DISQUE DUR PAR WMI [VB6]] [PCPT]


27/01/2007 [http://www.codyx.org/snippet_supprimer-bordure-controle_292.aspx Supprimer la bordure d'un contrôle [VB 2005, VB.NET 1.x]] [Charles Racaud]


27/01/2007 [http://www.codyx.org/snippet_supprimer-bordure-controle_292.aspx Supprimer la bordure d'un contrôle [VB6]] [Charles Racaud]


26/01/2007 [http://www.codyx.org/snippet_numero-serie-physique-disque-dur-wmi_291.aspx NUMÉRO DE SERIE (PHYSIQUE) DU DISQUE DUR PAR WMI [VB 2005]] [surfzoid]


17/11/2006 [http://www.codyx.org/snippet_masquer-curseur-souris_275.aspx Masquer le curseur de la souris [VB6, VBA]] [PCPT]

par contre je te garanti pas que ce soit le numéro gravé sur le DD

@++


  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
Messages postés
2377
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
16
0
Merci
Comme souvent pour les réponses récurrentes....suffit de faire une recherche
Commenter la réponse de cs_Willi
Messages postés
53
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
11 juin 2010
1
0
Merci
Mortalino, merci pour ta réponse. C'est Sympa.


Willi, j'ai cherché avant de poser la question, C'est ce que je fait
toujours. Mais les codes que j'ai trouvés ne donnent pas le numéro de
série physique.
Commenter la réponse de DD05
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Il y a en effet 2 Niméros identificateurs d'un Disque Dur :
- le numéro "affiché"
- le numéro "brut"

l'un s'obtient par utilisation de la fonction GetPhysicalDriveSerialNumber (lien donné plus haut)

il faut utiliser la fonction GetVolumeInformation& de la librairie kernel32" de l'API de Windows pour l'autre.
Commenter la réponse de jmfmarques
Messages postés
53
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
11 juin 2010
1
0
Merci
C'est bon, j'ai trouvé la solution sur le site suivant. Et ca marche nickel.


http://www.dreamincode.net/code/snippet429.htm
Commenter la réponse de DD05
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
0
Merci
Le numéro affiché étant le n° du disque logique (c,d,..). Disque étant ici un gros abus de langage induisant de grosses erreurs. On devrait definitivement adopter le terme de partition.

Le n° brut étant le n° de série attribué d'usine par le fabriquant au disque physique. Ce n° est accessible dans les infos SMART du disque. Et entre autre à travers l'interface WMI de Windows.

Attention si le n° de série d'une partition est toujours constitué de 2 nombres de 16bits dont la valeur est affichée en Hexa, le n° de série du disque physique est laissé à la discretion du fabricant. Ainsi on peute retrouver des nombre, du texte, ... Le format varie d'un fabricant à l'autre et même souvent d'une famille à l'autre chez le même fabriquant.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Presque celà, Casy !

Jusqte une correction infime : le n° "affiché" n'est jamais rien d'autre que le n° "brut" "formaté", d'une partition :

Ainsi :

Une Form, 2 boutons Command1 et Command2 et un label Label1

'La fonction GetVolumeInformation renseigne sur un système de fichiers et sur un volume dont on spécifie le
'répertoire racine. Elle renvoie une valeur différente de 0 en cas de succès et 0 en cas d'échec (on
'peut alors en connaître les raisons en appelant la fonction GetLastError)
'lpRootPathName : pointeur vers une chaine contenant le répertoire racine du volume à examiner (si ce paramètre
'                  est nul : répertoire en cours).
'lpVolumeNameBuffer : pointeur vers un buffer destiné à recevoir le nom du volume en cause
'nVolumeNameSize : spécifie la longueur (en caractères) du buffer ouvert pour le nom de volume.
'lpVolumeSerialNumber : pointeur vers une variable recevant le numéro de série du volume
'lpMaximumComponentLength : pointeur vers une valeur DWORD recevant la longueur maxi (en caractères)
'                       d'un composant (portion entre 2 "") de fichier supporté par le système invoqué.
'lpFileSystemFlags : pointeur vers un DWORD recevant les "flags" associés au système de fichiers en cause (peut
'            être une combinaison de FS_CASE_IS_PRESERVED, FS_CASE_SENSITIVE, FS_UNICODE_STORED_ON_DISK,
'            FS_PERSISTENT_ACLS, FS_FILE_COMPRESSION et FS_VOL_IS_COMPRESSED (exceptés FS_FILE_COMPRESSION
'            avec FS_VOL_IS_COMPRESSED car l'un exclut la possibilité de l'autre)
'lpFileSystemNameBuffer : pointeur vers un buffer recevant le nom du système de fichiers (par ex. FAT ou NTFS).
'nFileSystemNameSize : spécifie la longueur (en caractères), du buffer pour le nom du système de fichiers.
Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" _
   (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, _
    ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, _
    lpMaximumComponentLength As Long, lpFileSystemFlags As Long, _
    ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)
Const MaxNomFic = 256
Public Function NumeroSerie(sDrive As String) As Long
  'pour "extraire" le numéro de série (format brut) du lecteur spécifié par sDrive
  Dim ser As Long, I As Long, j As Long
  Dim z0 As String * MaxNomFic ' (maxnomfic = 256)
  Dim z As String * MaxNomFic ' (maxnomfic = 256)
  'il nous faut ajouter un "" et un nul à la chaine sDrive
  'et appeler la fonction pour extraire le numéro (ser) de série
  Call GetVolumeInformation(sDrive + ":" & Chr$(0), z0, MaxNomFic, ser, I, j, z, MaxNomFic)
  NumeroSerie = ser
End Function
Public Function NumeroSerieA(sDrive As String) As String
  'pour "extraire" le numéro de série (format affiché) du lecteur spécifié par sDrive
  Dim ser As Long, I As Long, j As Long
  Dim z0 As String * MaxNomFic ' (maxnomfic = 256)
  Dim z As String * MaxNomFic ' (maxnomfic = 256)
  'il nous faut ajouter un "" et un nul à la chaine sDrive
  'et appeler la fonction pour extraire le numéro (ser) de série, comme dans la fonction précédente
  Call GetVolumeInformation(sDrive + ":" & Chr$(0), z0, MaxNomFic, ser, I, j, z, MaxNomFic)
  'mais le transformer ctte fois-ci en format "afiché"
  Serie = Right(String(8, "0") + Hex$(ser), 8)
  serialnum = Left(Serie, 4) + "-" + Right$(Serie, 4)
  NumeroSerieA = serialnum
End Function


Private Sub Command1_Click()
   label1.Caption = NumeroSerieA("c")  'affiche le numéro de série "formaté(affiché)" du DD
End Sub


Private Sub Command2_Click()
   label1.Caption = NumeroSerie("c") 'affiche le numéro de série Brut du DD
End Sub

Mais notre ami a trouvé le lien qui convenait à ce qu'il cherchait.
Commenter la réponse de jmfmarques
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
0
Merci
salut,
jmfmarques -> tu peux donner un exemple d'utilisation (et déclaration) de GetPhysicalDriveSerialNumber stp

on peut utiliser WMI également.., voir premier lien fourni par mortalino

++
PCPT   [AFCK]
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Salut PCPT,

Tu es le dépositaire de cette fonction (qui n'est pas de Windows), à laquelle s'est référé Mortalino et tu l'as déposée là (la 2ème de la page) il y a à peine 3 jours ... Elle utilise WMI, d'ailleurs.

http://www.codyx.org/snippet_numero-serie-physique-disque-dur-wmi_291.aspx
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Voilà pour mémoire ce que j'ai écrit  plus haut, donc :

l'un s'obtient par utilisation de la fonction GetPhysicalDriveSerialNumber (lien donné plus haut)

il faut utiliser la fonction GetVolumeInformation& de la librairie kernel32" de l'API de Windows pour l'autre.
Commenter la réponse de jmfmarques
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
0
Merci
c'est bien ce qui me semblait....
je pensais que tu parlais d'une API nommée GetPhysicalDriveSerialNumber, inconnue pour moi en tout cas ^^

nb : en DotNet, le snippet fait ne fonctionne pas (retourne numéro logique), j'attends toujours le modifs de son auteur...
++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Je sais... (tu auras bien remarqué le distinguo fait entre la fonction définie dans un lien et une fonction de l'Api de Windows) .

Je ne l'ai d'ailleurs pas essayée...

Allez (pour ceux qui n'auraient rien à faire demain et si, surtout -ce qui ne sera pas le cas à Anglet où on annonce un temps printannier - il fait mauvais temps) :

Voilà mon numéro identificateur : ST340016A

On le trouve dans la base de registre ...

Je propose que l'on accorde 100 points d'un coup au premier qui trouvera cette clef (je me mets bien évidemment hors course)
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Ceci étant dit : ce "jeu" ne devra être considéré que comme tel : un "jeu" ....à mes yeux totalement inutile, surtout si l'on veut s'appuyer la-dessus pour sécuriser une appli .
On en reparlera complètement, si vous le voulez bien, une fois terminée cette "distraction"...
Je vous dirai alors dans quelles circonstances on peut se servir d'un identificateur/disque et pourquoi, dans de telles circonstances (et uniquement alors) , il importe peu que ce soit l'identificateur du fabricant du disque ou celui résultant d'un reformatage...et pourquoi toutes les autres "circonstances" ne devraient JAMAIS utiliser ce genre d'identificateur...
Il y aurait là matière à écrire des pages et des pages de "mauvaises raisons" ...
Bonne nuit à tous.
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Si pas de clients : solution ici à 14 heures, donc !
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
J'ai laissé pasqser l'heure !

Bon....

Les voilà, la clé et la valeur concernées (ce qui suit vient de ma machine)


[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0]
"Identifier"="ST340016A"
"Type"="DiskPeripheral"


En conséquence, ma foi (et en allant au plus court.. un peu bâclé.... ) :






Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
    (ByVal HKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
    (ByVal HKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
     lpType As Long, lpData As Any, lpcbData As Long) As Long





Private Sub Command1_Click()
  Dim maclef As String, mavaleur As String, id_physique_DD As String, bf As Long, ln As Long
  maclef = "HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0"
  mavaleur = "Identifier"
  bf = RegCreateKey(&H80000002, maclef, ln)
  If bf = 0 Then RegQueryValueEx ln, mavaleur, 0&, 1, 0&, bf
  If bf < 2 Then
    id_physique_DD = ""
    MsgBox "identifiant physique de votre DD non trouvé !"
    Exit Sub
  End If
  id_physique_DD = String(bf + 1, " ")
  RegQueryValueEx ln, mavaleur, 0&, 1, ByVal id_physique_DD, bf
  MsgBox "Le numéro physique identifiant votre disque dur est " & vbCrLf & Left(id_physique_DD, bf - 1)
End Sub



En apperlant votre attention sur le fait que vous pouvez "extirper" d'autres informations que le simple ID du Disque Dur....

Cet identificateur se trouive également, bien sur (Windows exige...), dans :


C:\WINNT\system32\config\system.sav
et dans
C:\WINNT\repair\system
et dans
C:\WINNT\system32\config\SYSTEM.BAK
tout de suite après le chaînage "#IDE#Disk" (donc sous la forme "#IDE#DiskAAAAAAA "
(dans ce qui précède, bien évidemment, remplacer C:\Winnt (sur mla machine), par ce qui convient à la machine client (facile...)
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
PS : s'agissant de la lecture d'une valeur d'une clef de la base de registre, la transposition sous VB.Net devrait être ultra-simple....
Commenter la réponse de jmfmarques
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
0
Merci
salut,
mais "ta clé" ne donnera pas le même résultat sur chaque PC
je ne parle pas du sérial (évidemment) mais de l'IDE lui-même.
chez moi elle pointe vers un lecteur dvd virtuel...

mauvaise piste ;)
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Sous quel OS es-tu ? (je suis sous Win 2000 temporairement) et quand j'étais sous XP (il y a peu), j'avais le même identificateur, qui est d'ailleurs celui que l'on terourve dans le panneau de configuration, dans mon BIOS et dans les fichiers de configuration et de déparation.
Commenter la réponse de jmfmarques
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
0
Merci
XP SP1
je peux vérifier sous W2K et W98 si tu veux, çà collera peut-être puisque pas de lecteur virtuel sous ces OS mais çà ne change rien au fait que ta clé ne sera (et n'est) jamais fiable, preuve en est ;)

ps : bon résultat dispo par WMI ^^

Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
0
Merci
Salut,

Tu peux aller jeter un coup à cette source, elle liste un très grand nombre d'infos sur les Disques Durs présent sur une machine peut être que tu trouveras ce que tu cherches.

http://www.vbfrance.com/codes/TOUTES-INFORMATIONS-CONCERNANT-VOS-HD-UTILISATION-WMI_21685.aspx

@+
Commenter la réponse de cs_fauve