硬盘或硬盘驱动器的序列号

| 乍一看,这似乎是一个非常简单的问题,某些机构可能正在尝试给我一些尝试Google的建议,事实可能是如此。 但是对我来说,我很难尝试Google,Stack Overflow,却找不到任何好的解决方案。 只想使用C#获取硬盘或硬盘驱动器的序列号 请仔细阅读:硬盘序列号,而不是硬盘卷序列号(例如C,D,E等)。 为了获得硬盘数量的序列号,我在网上找到了解决方案,它的工作原理很好,但是问题是获取硬盘序列号。 某些机构可能会试图将此问题作为“权益溢出问题”下面的副本,或建议该问题的链接。但这不是 下面的任何问题都不能为C#中的这个问题提供良好的解决方案: 如何在C#中获取硬盘序列号(无WMI)? 如何在.net中检索HDD固件序列号? HDD序列号     
已邀请:
这是最终的解决方案: 在没有WMI的情况下获取物理硬盘序列号 写这么多代码:
DriveListEx diskInfo = new DriveListEx();
diskInfo.Load();
string serialNo = diskInfo[0].SerialNumber;
不要忘记添加对ѭ1的引用。     
看到这个
http://www.codeproject.com/KB/system/GetHardwareInformation.aspx
只需从那里下载演示并选择\“ data storage \”选项卡,然后选择Win32_DiskDrive,您将获得下面提到的所有磁盘驱动器(HardDisk)的信息,并在扇区跟踪和签名属性之前看到一个属性“ SerialNumber \”。     
我发现的最好方法是: 从这里下载.dll 将.dll添加到您的项目 添加此代码:
[DllImportAttribute(\"HardwareIDExtractorC.dll\")]
public static extern String GetIDESerialNumber(byte DriveNumber);
从需要的位置调用硬盘ID:
GetIDESerialNumber(0).Replace(\" \", string.Empty);
注意:在资源管理器中转到dll的属性,并将
Build Action
设置为
Embedded Resource
。     
// 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;
}
    
我查看了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
    

要回复问题请先登录注册