【发布时间】:2010-10-06 20:38:28
【问题描述】:
如何在 VB.NET 中读取 IDE 和 SATA 驱动器的硬盘序列号? (我不想要卷序列号)。
如果可能,应在没有管理权限的情况下为 XP 和 Vista 收集此信息。
【问题讨论】:
标签: vb.net serial-number
如何在 VB.NET 中读取 IDE 和 SATA 驱动器的硬盘序列号? (我不想要卷序列号)。
如果可能,应在没有管理权限的情况下为 XP 和 Vista 收集此信息。
【问题讨论】:
标签: vb.net serial-number
您可以像这样使用WMI (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)。
This文章包含一个下载,作者在VB.NET中实现CreateFile()和DeviceIoControl()通过Interop服务提取驱动信息。
要使用上述任何一种方法,您都需要管理员权限,可以在here 找到一个似乎可以规避此问题的实用程序。如果您喜欢冒险,C++/Win32 source code 可供您阅读。 (查看函数'ReadPhysicalDriveInNTWithZeroRights()')
【讨论】:
这里是获取硬盘序列号的代码
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
【讨论】: