Проблема со свойством Win32_PhysicalMedia SerialNumber - PullRequest
2 голосов
/ 29 августа 2009

Я написал следующий код, чтобы получить серийный номер физического носителя, но на одном из моих компьютеров вместо него возвращается ноль. Кто-нибудь знает в чем проблема? Спасибо.

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

Ответы [ 2 ]

3 голосов
/ 29 августа 2009

Серийный номер является необязательным, определяется производителем, и для вашего устройства он либо пуст, либо не поддерживается драйвером.

Практически все жесткие диски имеют серийный номер, но большинство флеш-накопителей в стиле USB не имеют (как правило, проблема стоимости). Я полагаю, что большинство марочных дисков CD / DVD / BD также не будут сериализованы.

1 голос
/ 31 октября 2010

Вот код, который я использовал, серийный номер как-то возвращается необработанным с каждой обращенной парой символов (странно), и использование Win32_PhysicalMedia давало разные результаты, если я запускал код как пользователь или администратор (более странно) - Windows 7 Ultimate, VS 2008 с использованием только VB:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...