Problem with Win32_PhysicalMedia SerialNumber property

I wrote the following code to get the serial number of a physical media, but one of my computers returns null instead. Does anyone know what the problem is? Thank.

var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
foreach( ManagementObject mo in searcher.Get() )
{
    Console.WriteLine("Serial: {0}", mo["SerialNumber"]);
}

      

+2


source to share


2 answers


The serial number is optional, determined by the manufacturer, and for your device it is either empty or not supported by the driver.



Almost all hard drives have a serial number, but most USB-style flash drives do not (usually a cost issue). I would guess that most of the unrepeatable CD / DVD / BDs will be unserialized as well.

+3


source


Here is the code I used, the serial number is somehow returned raw with every pair of characters canceled (weird) and using Win32_PhysicalMedia gives different results if I run the code as a user or administrator (weirder) - Windows 7 Ultimate, VS 2008 using VB only:



Function GetHDSerial() As String
    Dim strHDSerial As String = String.Empty
    Dim index As Integer = 0
    Dim Data As String
    Dim Data2 As String
    Dim ndx As Integer

    Dim query As New SelectQuery("Win32_DiskDrive")
    Dim search As New ManagementObjectSearcher(query)
    Dim info As ManagementObject
    Try
        For Each info In search.Get()
            Data = info("SerialNumber")
            Data2 = ""
            For ndx = 1 To Data.Length - 1 Step 2
                Data2 = Data2 & Chr(Val("&H" & Mid(Data, ndx, 2)))
            Next ndx
            Data = String.Empty
            For ndx = 1 To Data2.Length - 1 Step 2
                Data = Data & Mid(Data2, ndx + 1, 1) & Mid(Data2, ndx, 1)
            Next
            Data2 = Data
            If Len(Data) < 8 Then Data2 = "00000000" 'some drives have no s/n
            Data2 = Replace(Data2, " ", "") ' some drives pad spaces in the s/n
            'forget removeable drives
            If InStr(info("MediaType").ToString, "Fixed", CompareMethod.Text) > 0 Then
               strHDSerial = strHDSerial & "Drive " & index.ToString & " SN: " & Data2 & vbCrLf
               index += 1
            End If
        Next
    Catch ex As Exception
        strHDSerial = "Error retrieving SN for Drive " 
        msgbox(index.ToString)
    End Try
    Return strHDSerial
End Function

      

+1


source







All Articles