求一段VB.NET读取硬盘序列号详细代码

yy2008yy8 2008-10-20 08:45:15
求一段VB.NET读取硬盘序列号详细代码
...全文
211 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaoyinsu2006 2008-10-27
  • 打赏
  • 举报
回复

''' <param name="id">系统硬盘序号,0-255</param>
Private Shared Function Read(ByVal drive As Byte) As String
Dim driveName As String = String.Concat("\\.\PhysicalDrive", drive.ToString())
Dim device As Int32 = CreateFile( _
driveName, _
GENERIC_READ Or GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, _
0, _
OPEN_EXISTING, _
0, _
0)

If device = INVALID_HANDLE_VALUE Then
Return ""
End If

Dim verPara As New GETVERSIONOUTPARAMS()
Dim bytRv As Int32 = 0

If DeviceIoControl( _
device, _
DFP_GET_VERSION, _
0, _
0, _
verPara, _
Marshal.SizeOf(verPara), _
bytRv, _
0 _
) <> 0 Then

If verPara.bIDEDeviceMap > 0 Then
Dim bIDCmd As Byte = CByte(IIf((verPara.bIDEDeviceMap >> drive And &H10) <> 0, IDE_ATAPI_IDENTIFY, IDE_ATA_IDENTIFY))

Dim scip As New SENDCMDINPARAMS()
Dim scop As New SENDCMDOUTPARAMS()

With scip
.cBufferSize = IDENTIFY_BUFFER_SIZE
.bDriveNumber = drive
With .irDriveRegs
.bFeaturesReg = 0
.bSectorCountReg = 1
.bCylLowReg = 0
.bCylHighReg = 0
.bDriveHeadReg = CByte((&HA0 Or ((drive And 1) << 4)))
.bCommandReg = bIDCmd
End With
End With

If DeviceIoControl(device, DFP_RECEIVE_DRIVE_DATA, scip, Marshal.SizeOf(scip), scop, Marshal.SizeOf(scop), bytRv, 0) <> 0 Then
Dim s As New StringBuilder()
Dim i As Integer
For i = 20 To 40 - 2 Step 2
s.Append(ChrW(scop.bBuffer((i + 1))))
s.Append(ChrW(scop.bBuffer(i)))
Next i

CloseHandle(device)

Return s.ToString().Trim()
End If
End If
End If

CloseHandle(device)

Return ""
End Function
yanlongwuhui 2008-10-20
  • 打赏
  • 举报
回复
网上搜索下,很多资料的。
yy2008yy8 2008-10-20
  • 打赏
  • 举报
回复
刚注册,等下就有分了。不好意思呀
guoruixing 2008-10-20
  • 打赏
  • 举报
回复
没分 - -!

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧