如何获得硬盘的8位SN号码 和 SN与 xxxx-xxxx-xxxx-xxxx-xxxx有啥关系?

wwh999 2010-06-15 01:16:59
1.如何获取硬盘的8位SN(如:5QM0TYLV 可从硬盘外壳和优化大师上看出),如何得出这个东东?
使用以下代码用WMI是得到的却是这么一个号:1275747876 ,不明白啥意思? 如何得到 5QM0TYLV 呢?
Dim cmicWmi As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
Dim Uint32 As UInt32
For Each cmicWmiObj As ManagementObject In cmicWmi.Get
Uint32 = cmicWmiObj("signature")
Next
TextBox1.Text = Uint32.ToString


2.看了很多共享软件的机器码(绑定硬盘的),生成的全是 xxxx-xxxx-xxxx-xxxx-xxxx这样的机器码(len(xxxx)=4 or 5),它是与硬盘的8位SN有啥关系,怎么生成的?


想尝试做一个机器码生成,水平不够,请教,谢谢。
...全文
2658 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwh999 2010-11-23
  • 打赏
  • 举报
回复
很久没有上网,sorry.
现在自己换了个用P/Invoke处理的方法,比较可靠。

TO:ddtkywg
你的回贴比较接近,来的比较晚了些,呵呵。
你的回贴的第一句话搞得我有点不知所措。

结贴。
msdn165168 2010-06-19
  • 打赏
  • 举报
回复
谢谢!!!
yanchenyu 2010-06-18
  • 打赏
  • 举报
回复
学习一下
ddtkywg 2010-06-18
  • 打赏
  • 举报
回复
另,提示一下,做序列号有得时候硬盘没有,可以用其他的一些,显卡,BIOS都会有一些固化信息,很易取到,不过稍微动点手脚,比较易于理解不用写字节汇编的方法不知现在网上还有没,其实写字节代码也易做到,用C或者汇编编写然后HEX复制。再就是.NET提供了一些加密算法(Cryptography空间),可以用在这方面,最后输出的格式只是你的意愿了,当然便于用户对照输入是传统的用分隔符分割的主要原因。

罗嗦一堆,其实我是赚分发帖的,呵呵
ddtkywg 2010-06-18
  • 打赏
  • 举报
回复
搞得我发帖就像为了骂人。

给你一份VB.NET取得硬盘序列号的代码,API操作,不要用WMI问题很多,一是用户是否开启服务让你用WMI,二是WMI取得的根本不是什么硬件序列号。

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Runtime.InteropServices

Public Class PhysicalDrive

'<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
' Friend Structure IDSECTOR
' Public wGenConfig As Int16
' Public wNumCyls As Int16
' Public wReserved As Int16
' Public wNumHeads As Int16
' Public wBytesPerTrack As Int16
' Public wBytesPerSector As Int16
' Public wSectorsPerTrack As Int16
' <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> _
' Public wVendorUnique() As Int16
' <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=20)> _
' Public sSerialNumber As String
' Public wBufferType As Int16
' Public wBufferSize As Int16
' Public wECCSize As Int16
' <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=8)> _
' Public sFirmwareRev As String
' <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=40)> _
' Public sModelNumber As String
' Public wMoreVendorUnique As Int16
' Public wDoubleWordIO As Int16
' Public wCapabilities As Int16
' Public wReserved1 As Int16
' Public wPIOTiming As Int16
' Public wDMATiming As Int16
' Public wBS As Int16
' Public wNumCurrentCyls As Int16
' Public wNumCurrentHeads As Int16
' Public wNumCurrentSectorsPerTrack As Int16
' Public ulCurrentSectorCapacity As Int32
' Public wMultSectorStuff As Int16
' Public ulTotalAddressableSectors As Int32
' Public wSingleWordDMA As Int16
' Public wMultiWordDMA As Int16
' <MarshalAs(UnmanagedType.ByValArray, SizeConst:=128)> _
' Public bReserved() As Byte
'End Structure

<StructLayout(LayoutKind.Sequential)> _
Friend Structure DRIVERSTATUS
Public bDriverError As Byte
Public bIDEStatus As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
Public bReserved() As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
Public dwReserved() As Int32
End Structure

<StructLayout(LayoutKind.Sequential)> _
Friend Structure SENDCMDOUTPARAMS
Public cBufferSize As Int32
Public DriverStatus As DRIVERSTATUS
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=513)> _
Public bBuffer() As Byte
End Structure

'<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
' Friend Structure SRB_IO_CONTROL
' Public HeaderLength As Int32
' <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=8)> _
' Public Signature As String
' Public Timeout As Int32
' Public ControlCode As Int32
' Public ReturnCode As Int32
' Public Length As Int32
'End Structure

<StructLayout(LayoutKind.Sequential)> _
Friend Structure IDEREGS
Public bFeaturesReg As Byte
Public bSectorCountReg As Byte
Public bSectorNumberReg As Byte
Public bCylLowReg As Byte
Public bCylHighReg As Byte
Public bDriveHeadReg As Byte
Public bCommandReg As Byte
Public bReserved As Byte
End Structure

<StructLayout(LayoutKind.Sequential)> _
Friend Structure SENDCMDINPARAMS
Public cBufferSize As Int32
Public irDriveRegs As IDEREGS
Public bDriveNumber As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> _
Public bReserved() As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _
Public dwReserved() As Int32
Public bBuffer As Byte
End Structure

<StructLayout(LayoutKind.Sequential)> _
Friend Structure GETVERSIONOUTPARAMS
Public bVersion As Byte
Public bRevision As Byte
Public bReserved As Byte
Public bIDEDeviceMap As Byte
Public fCapabilities As Int32
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _
Public dwReserved() As Int32
End Structure

<DllImport("kernel32.dll", SetLastError:=True)> _
Private Shared Function CloseHandle( _
ByVal hObject As Int32 _
) As Integer
End Function

<DllImport("kernel32.dll")> _
Private Overloads Shared Function DeviceIoControl( _
ByVal hDevice As Int32, _
ByVal dwIoControlCode As Int32, _
ByRef lpInBuffer As SENDCMDINPARAMS, _
ByVal nInBufferSize As Integer, _
ByRef lpOutBuffer As SENDCMDOUTPARAMS, _
ByVal nOutBufferSize As Integer, _
ByRef lpbytesReturned As Int32, _
ByVal lpOverlapped As Integer _
) As Integer
End Function

<DllImport("kernel32.dll")> _
Private Overloads Shared Function DeviceIoControl( _
ByVal hDevice As Int32, _
ByVal dwIoControlCode As Int32, _
ByVal lpInBuffer As Integer, _
ByVal nInBufferSize As Integer, _
ByRef lpOutBuffer As GETVERSIONOUTPARAMS, _
ByVal nOutBufferSize As Integer, _
ByRef lpbytesReturned As Int32, _
ByVal lpOverlapped As Integer _
) As Integer
End Function

<DllImport("kernel32.dll")> _
Private Shared Function CreateFile( _
ByVal lpFileName As String, _
ByVal dwDesiredAccess As Int32, _
ByVal dwShareMode As Int32, _
ByVal lpSecurityAttributes As Integer, _
ByVal dwCreationDisposition As Int32, _
ByVal dwFlagsAndAttributes As Int32, _
ByVal hTemplateFile As Integer _
) As Int32
End Function

Private Const GENERIC_READ As Int32 = &H80000000
Private Const GENERIC_WRITE As Int32 = &H40000000
Private Const FILE_SHARE_READ As Int32 = &H1
Private Const FILE_SHARE_WRITE As Int32 = &H2
Private Const OPEN_EXISTING As Int32 = 3
Private Const INVALID_HANDLE_VALUE As Int32 = &HFFFFFFFF
Private Const DFP_GET_VERSION As Int32 = &H74080
Private Const IDE_ATAPI_IDENTIFY As Integer = &HA1
Private Const IDE_ATA_IDENTIFY As Integer = &HEC
Private Const IDENTIFY_BUFFER_SIZE As Integer = 512
Private Const DFP_RECEIVE_DRIVE_DATA As Int32 = &H7C088

''' <summary>
''' 获取物理序列号
''' </summary>
''' <param name="id">系统硬盘序号,0-255</param>
Public Shared Function GetSerialNumber(ByVal id As Byte) As String
Dim os As OperatingSystem = Environment.OSVersion
If os.Platform <> PlatformID.Win32NT Then
Throw New NotSupportedException("仅支持2000/XP/2003")
End If
If os.Version.Major < 5 Then
Throw New NotSupportedException("仅支持2000/XP/2003")
End If
Dim mid As String = Read(id)
If mid = "" Then
Throw New NotSupportedException("未找到硬盘序列号")
End If
Return Read(id)
End Function

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

End Class

测试代码

MsgBox(PhysicalDrive.GetSerialNumber(0))
贝隆 2010-06-16
  • 打赏
  • 举报
回复
a854468521 2010-06-16
  • 打赏
  • 举报
回复
最近在学习汇编,序列号、注册码这东西对单机软件的保护很有限。
please_call_me_J 2010-06-16
  • 打赏
  • 举报
回复
楼主的头像是个男人身上的,我看出来啦。哈哈
wwh999 2010-06-16
  • 打赏
  • 举报
回复
楼上的头像:晕
足球中国 2010-06-15
  • 打赏
  • 举报
回复
序列号这东西。随便你怎么做了。
wwh999 2010-06-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xys_777 的回复:]

引用 6 楼 wwh999 的回复:
问题1:如何获取硬盘的8位SN 已解决。参考了楼上2位的链接。谢谢。
'''

问题2:
2.看了很多共享软件的机器码(绑定硬盘的),生成的全是 xxxx-xxxx-xxxx-xxxx-xxxx这样的机器码(len(xxxx)=4 or 5),它是与硬盘的8位SN有啥关系,怎么生成的?

继续请教。

问题2:是通过硬盘序列号 + 网卡MA……
[/Quote]

我这测了几个共享软件,他们是和硬盘相关的,我原以为:那个xxxx-xxxx-xxxx-xxxx-xxxx,是直接硬盘串号做的一个编码转换,不是这样是吧?
永生天地 2010-06-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wwh999 的回复:]
问题1:如何获取硬盘的8位SN 已解决。参考了楼上2位的链接。谢谢。
'''

问题2:
2.看了很多共享软件的机器码(绑定硬盘的),生成的全是 xxxx-xxxx-xxxx-xxxx-xxxx这样的机器码(len(xxxx)=4 or 5),它是与硬盘的8位SN有啥关系,怎么生成的?

继续请教。
[/Quote]
问题2:是通过硬盘序列号 + 网卡MAC进行一系列的复杂 计算所得
wwh999 2010-06-15
  • 打赏
  • 举报
回复
问题1:如何获取硬盘的8位SN 已解决。参考了楼上2位的链接。谢谢。
'''

问题2:
2.看了很多共享软件的机器码(绑定硬盘的),生成的全是 xxxx-xxxx-xxxx-xxxx-xxxx这样的机器码(len(xxxx)=4 or 5),它是与硬盘的8位SN有啥关系,怎么生成的?

继续请教。
悔说话的哑巴 2010-06-15
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20040802/16/3234950.html
楼主以前的有人问的,你可以参考一下
悔说话的哑巴 2010-06-15
  • 打赏
  • 举报
回复
楼主你的头像太邪恶了
yanlongwuhui 2010-06-15
  • 打赏
  • 举报
回复
硬盘的SN长度不固定,不同厂家不一样
wwh999 2010-06-15
  • 打赏
  • 举报
回复
wuyq11,谢谢。我去看一看。
wuyq11 2010-06-15
  • 打赏
  • 举报
回复
获取硬盘序列号
再加密,生成用户号
GUID
http://topic.csdn.net/u/20091110/00/5c9c33e4-0b0f-4fb9-9e3a-ae46655bf774.html
内含SDK、开发文档 及Demo示例(C++、C#、Java) 设备网络SDK是基于设备私有网络通信协议开发的,为后端设备(嵌入式网络硬盘录像机、视频服务器)、前端设备(网络摄像机、网络球机、IP模块)等产品服务的配套模块,用于远程访问和控制设备软件的二次开发。 适用于但不仅限于以下产品型号: 1.编解码设备 DVR:DS-9100、DS-8100、DS-8000-S、DS-8800、DS-7800、DS-7300、DS-7200、DS-7100、DS-7000等系列,包括-ST、-SH、-SE、-SN、-RT、-RH、-XT等; NVR:DS-96000、DS-9600、DS-9500、DS-8600、DS-7900、DS-7800、DS-7700、DS-7600、DS-7100等系列,包括-I、-F、-K、-E、-H、-ST、-XT、-SN、-SE、-SNH、-SHT、-S、-SH、-RT等; XVR:DS-9000HQH-SH、DS-8100HQH(/HGH)-SH、DS-8000HQH-SH、DS-7300HQH(/HGH)-SH、DS-7200HQH(/HGH)-SH、DS-8800HQH(/HGH)(/HUH)-SH(/Fx)、DS-7900HQH(/HGH)(/HUH)-SH(/Fx)、DS-7800HQH(/HGH)(/HUH)-SH(/Ex/Fx)、DS-7100HGH-E1(/F1)等; HDVR(混合型DVR):DS-9000、DS-8000-ST、DS-7600H-ST/-S系列等; 编码器:DS-6700、DS-6600、DS-6500(-JX)、DS-6100、DS-6401HFH系列视频服务器、DS-6000系列编/解码器等; 解码器:DS-6300D(-JX)、DS-6400HD(-JX/-T)、DS-6500D(-T)等 2. 网络摄像机, 网络球机 网络摄像机:标清、高清、红外、热成像、鱼眼等,如DS-2CD7xx、DS-2CD71xx、DS-2CD72xx、DS-2CD8xx、DS-2CD81xx、DS-2CD82xx、DS-2CD84xx、DS-2CD83xx、DS-2CD11xx、DS-2CD12xx、DS-2CD13xx、DS-2CD20xx、DS-2CD21xx、DS-2CD22xx、DS-2CD23xx、DS-2CD24xx、DS-2CD25xx、DS-2CD26xx、DS-2CD27xx、DS-2CD28xx、DS-2CD29xx、DS-2CD2Axx、DS-2CD2Cxx、DS-2CD2Dxx、DS-2CD2Txx、DS-2CD2Qxx、DS-2CD30xx、DS-2CD31xx、DS-2CD32xx、DS-2CD33xx、DS-2CD34xx、DS-2CD39xx、DS-2CD3Txx、DS-2CD3Qxx、DS-2CD40xx、DS-2CD41xx、DS-2CD42xx、DS-2CD4Axx、DS-2CD62xx、DS-2CD63xx、DS-2CD65xx等 网络球机:标清、高清、红外等,如DS-2DF86xx、DS-2DF85xx、DS-2DF82xx、DS-2DF72xx、DS-2DF71xx、DS-2DE71xx、DS-2DE73xx、DS-2DE72xx、DS-2DM72xx、DS-2DM71xx、DS-2DF1-7xx、DS-2DF66xx、DS-2DF62xx、DS-2DF1-6xx、DS-2DE51xx、DS-2DE52xx、DS-2DE53xx、DS-2DM52xx、DS-2DF52xx、DS-2DC52xx、DS-2DC51xx、DS-2DF1-5xx、DS-2DE45xx、DS-2DE42xx、DS-2DE41xx、DS-2DF1-4xx、DS-2DM1-7xx、DS-2DM1-6xx、DS-2DM1-5xx等 一体化网络摄像机:DS-2ZCN3007、DS-2ZCN3006、DS-2DZ216MF、DS-2DZ2116、DS-2ZCN2006、DS-2ZCN2007、DS-2ZMN2007、DS-2ZMN2006等 3. 智能交通产品 出入口抓拍机:(i)DS-2CD95xx、(i)DS-2CD93xx、(i)DS-2CD92xx、(i)DS-2CD91xx、DS-2CD9xx、DS-TCGxxx、EVU-xxxx等 车位相机:DS-TCPxxx等 出入口控制机:DS-TMExxx等 诱导管理器:DS-TPMxxx等 4. 智能设备 行为分析、ATM防护、自动跟踪、客流量统计、人脸识别、智能交通事件、VQD视频质量诊断等 5. 其他IP设备 CVR、报警主机、门禁、可视对讲、LCD拼接屏、IP模块等

16,721

社区成员

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

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