Vb.net 获取IDE和SATA的H/D序列号(非卷序列号)

Vb.net 获取IDE和SATA的H/D序列号(非卷序列号),vb.net,serial-number,Vb.net,Serial Number,如何在VB.NET中读取IDE和SATA驱动器的硬盘序列号? (我不想要卷序列号) 如果可能,应在没有管理权限的情况下收集XP和Vista的此信息。您可以像这样使用(Windows Management Instrumentation): Dim mos As New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia") For Each mo As ManagementObject In mos.Get() Dim

如何在VB.NET中读取IDE和SATA驱动器的硬盘序列号? (我不想要卷序列号)

如果可能,应在没有管理权限的情况下收集XP和Vista的此信息。

您可以像这样使用(Windows Management Instrumentation):

Dim mos As New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")

For Each mo As ManagementObject In mos.Get()
    Dim serial As String = mo("SerialNumber").ToString()
Next
尽管如此,我还是读过一些关于使用WMI不返回序列号的案例。实现这一点的另一种方法是通过平台调用服务(PInvoke)

本文包括一个下载,作者在其中实现并通过VB.NET中的互操作服务提取驱动器信息


要使用上述任何一种方法,您都需要管理员权限,可以找到一个似乎可以绕过此权限的实用程序。如果你喜欢冒险,你可以阅读C++/Win32。(查看函数“ReadPhysicalDrivinntWithZeroRights()”)

以下是获取硬盘序列号的代码

    Dim HDD_Serial As String

    Dim hdd As New ManagementObjectSearcher("select * from Win32_DiskDrive")

    For Each hd In hdd.Get

        HDD_Serial = hd("SerialNumber")
        MsgBox(HDD_Serial)
    Next

希望有帮助。

这被标记为低质量。请在您的代码上展开,回答解释代码的作用。
Public Function getHardDiskSerialNo()
    Dim serial As String

    Dim hd As New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
    For Each dvs As ManagementObject In hd.Get()
        serial = dvs("SerialNumber").ToString()

    Next
    Return serial

End Function