Серийный номер жесткого диска или жесткого диска - PullRequest
8 голосов
/ 15 апреля 2011

Поначалу может показаться, что это очень простой вопрос, и кто-то может попытаться дать мне совет попробовать Google, это может быть так. Но для меня очень тяжело попробовать Google, Stack Overflow и не могу найти хорошего решения.

Просто хочу получить серийный номер жесткого диска или жесткого диска, используя C #

Пожалуйста, внимательно прочитайте: серийный номер жесткого диска, но не серийный номер тома жесткого диска (например, C, D, E и т. Д.).

Для получения серийного номера тома жесткого диска я нашел решение в сети и он хорошо работает, но проблема в получении серийного номера жесткого диска.

Некоторые организации могут попытаться сделать этот вопрос в качестве возможной копии приведенного ниже вопроса о переполнении ставки или могут предложить ссылку на этот вопрос. Но это не

И ни один из приведенных ниже вопросов не дает хорошего решения этой проблемы в C #:

  1. Как получить серийный номер жесткого диска в C # (без WMI)?
  2. Как получить серийный номер прошивки жесткого диска в .net?
  3. Hdd Серийный номер

Ответы [ 5 ]

8 голосов
/ 18 апреля 2011

Это окончательное решение:

Получить серийный номер физического жесткого диска без WMI

написать этот код:

DriveListEx diskInfo = new DriveListEx();
diskInfo.Load();
string serialNo = diskInfo[0].SerialNumber;

Не делайтезабыла добавить ссылку на DriveInfoEx.dll.

4 голосов
/ 15 апреля 2011

см.

http://www.codeproject.com/KB/system/GetHardwareInformation.aspx

просто скачайте демонстрацию оттуда и выберите вкладку «хранилище данных» и выберите Win32_DiskDrive, из которой вы получите информацию обо всех дисках (HardDisk), упомянутых ниже, и увидите одно свойство «SerialNumber» после секторной дорожки и до свойства подписи ...

enter image description here

2 голосов
/ 29 сентября 2012

Лучший способ, который я нашел, это:

  1. Загрузите .dll из здесь

  2. Добавьте .dllк вашему проекту

  3. Добавьте этот код:

    [DllImportAttribute("HardwareIDExtractorC.dll")]public static extern String GetIDESerialNumber(byte DriveNumber);

  4. Вызовите идентификатор жесткого диска из того места, где он вам нужен:

    GetIDESerialNumber(0).Replace(" ", string.Empty);

Примечание. Перейтив свойствах dll в проводнике и установите Build Action в Embedded Resource.

1 голос
/ 18 сентября 2013

Я посмотрел с ILSpy (http://ilspy.net/) на класс System.IO.DriveInfo) и выяснил, что этот код работает нормально:

'------------------------------------------------------
' Declaration found in Microsoft.Win32.Win32Native
'------------------------------------------------------
Friend Declare Auto Function GetVolumeInformation Lib "kernel32.dll" (drive As String, <Out()> volumeName As StringBuilder, volumeNameBufLen As Integer, <Out()> ByRef volSerialNumber As Integer, <Out()> ByRef maxFileNameLen As Integer, <Out()> ByRef fileSystemFlags As Integer, <Out()> fileSystemName As StringBuilder, fileSystemNameBufLen As Integer) As Boolean

'------------------------------------------------------
' Test in my Form class
'------------------------------------------------------
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
    Try
        Dim volumeName As StringBuilder = New StringBuilder(50)
        Dim stringBuilder As StringBuilder = New StringBuilder(50)
        Dim volSerialNumber As Integer
        Dim maxFileNameLen As Integer
        Dim fileSystemFlags As Integer
        If Not GetVolumeInformation("C:\", volumeName, 50, volSerialNumber, maxFileNameLen, fileSystemFlags, stringBuilder, 50) Then
            Dim lastWin32Error As Integer = Marshal.GetLastWin32Error()
            MsgBox("Error number:" & lastWin32Error)
        Else
            MsgBox(volSerialNumber.ToString("X"))
        End If

    Catch ex As Exception
        MsgBox(ex.ToString())
    End Try
End Sub
1 голос
/ 01 марта 2013
// Function driveser (model)
// Returns the serial number of the drive specified in "model" or an empty string. 
// Please include this is you are going to use it.
// (C) By Zibri 2013
// Free for non commercial use.
// zibri AT zibri DOT org

public string driveser(string model)
{
    string functionReturnValue = null;
    string devid = "";
    functionReturnValue = "";
    try {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_DiskDrive WHERE Model LIKE '%" + model + "%'");
        foreach (ManagementObject queryObj in searcher.Get()) {
            if (!string.IsNullOrEmpty(queryObj("SerialNumber")))
                functionReturnValue = queryObj("SerialNumber");
            Debug.Print(queryObj("Model") + ":" + functionReturnValue);
        }
    } catch (ManagementException err) {
        Debug.Print("An error occurred while querying for WMI data: " + err.Message);
    }
    return functionReturnValue;
}
...