Numéro de série disque dur

DD05 Messages postés 53 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 juin 2010 - 2 févr. 2007 à 21:54
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

20 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
2 févr. 2007 à 21:59
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"
<!--
0
DD05 Messages postés 53 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 juin 2010 1
2 févr. 2007 à 22:18
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.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 févr. 2007 à 22:41
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.
0
DD05 Messages postés 53 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 juin 2010 1
2 févr. 2007 à 22:57
C'est bon, j'ai trouvé la solution sur le site suivant. Et ca marche nickel.


http://www.dreamincode.net/code/snippet429.htm
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 févr. 2007 à 22:58
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 #
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 févr. 2007 à 23:19
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.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 févr. 2007 à 16:38
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
3 févr. 2007 à 18:02
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
3 févr. 2007 à 18:12
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.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 févr. 2007 à 19:52
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
3 févr. 2007 à 20:35
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)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
3 févr. 2007 à 21:41
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.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 févr. 2007 à 11:38
Si pas de clients : solution ici à 14 heures, donc !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 févr. 2007 à 14:17
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...)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 févr. 2007 à 14:18
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....
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 févr. 2007 à 14:47
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 févr. 2007 à 15:00
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.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 févr. 2007 à 15:04
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
0
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
4 mars 2007 à 20:59
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

@+
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
2 févr. 2007 à 22:06
Comme souvent pour les réponses récurrentes....suffit de faire une recherche
-1
Rejoignez-nous