2 votes

Le numéro de série du disque dur avec WMIService est-il CHANGEABLE ?

J'utilise la vérification du numéro de série du disque dur pour enregistrer mes produits.

Mais je vois que parfois, il est modifié. Deux semaines seulement après que le client ait activé le produit, le numéro de série du disque dur a changé.

Cette propriété est-elle modifiable ? et si oui, comment, quand et pourquoi est-elle modifiée ?

Voici le code que j'utilise en VB :

Dim WMIService As Object, Items As Object, SubItems As Object, temp

Set WMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
    Set Items = WMIService.ExecQuery("Select * from Win32_PhysicalMedia", , 48)
    For Each SubItems In Items
        temp = SubItems.SerialNumber
        If LenB(temp) Then Exit For
    Next

et la même chose que j'utilise en C#

using System.Management;

public string GetHDDSerial()
{
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

    foreach (ManagementObject wmi_HD in searcher.Get())
    {
        // get the hardware serial no.
        if (wmi_HD["SerialNumber"] != null)
            return wmi_HD["SerialNumber"].ToString();
    }

    return string.Empty;
}

0voto

jacob spitzer Points 83

Merci au commentaire de FunThomas et après un petit dépannage avec mon client, j'ai découvert qu'il utilise parfois un disque externe pour avoir plus d'espace, et quand le disque externe est branché - je reçois un numéro de série de disque dur différent.

Maintenant, j'ai trouvé comment obtenir le numéro de série à partir de la lettre du lecteur actuel.

Voici le code pour VB :

Dim WMIService As Object, DiskDrives As Object, Drive As Object, DiskPartitions As Object, Partition As Object, SerialNumber, currentDrive
currentDrive = Environ("HomeDrive")
Set WMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
Set DiskPartitions = WMIService.ExecQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" & currentDrive & "'} WHERE ResultClass=Win32_DiskPartition")

For Each Partition In DiskPartitions
Set DiskDrives = WMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & Partition.DeviceID & "'} WHERE ResultClass=Win32_DiskDrive")
    For Each Drive In DiskDrives
        Debug.Print "Caption: " & Drive.Caption, "Description: " & Drive.Description, "Name: " & Drive.Name, "Model: " & Drive.Model, "SerialNumber: " & Drive.SerialNumber
        SerialNumber = Drive.SerialNumber
    Next
Next

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X