急求ATA苹果序列号查询、授权号,vb的

VB&读取硬盘物理序列号源码!
'网上有很多获取硬盘序列号的代码,但大部分都只能取得逻辑分区的序列号,而不能取得硬盘的物理序列号。我们知道,逻辑分区的序列号是FORMAT时产生的,重新FORMAT将会改变。这对于要求唯一识别码的程式来说是致命的。这段代码利用API可以取得物理硬盘的很多特性,包括硬盘出厂时的唯一编号。这段代码我是从CSDN论坛获得,原作者不详。我将其稍做修改和增添,独立出两个常用的函数:GetDiskVolume
、GetHardDiskInfo ......
'============================================
'模块功能: 取得硬盘的信息
程:来自互联网,阿勇修改
'更新日期:
'调用方法:
'&& GetDiskVolume()
取得逻辑盘的序列号
'&& GetHardDiskInfo()
取得物理盘的型号或序列号
'============================================
Private Const MAX_IDE_DRIVES As Long =
4&& ' Max number of drives
assuming primary/secondary, master/slave topology
Private Const READ_ATTRIBUTE_BUFFER_SIZE As Long = 512
Private Const IDENTIFY_BUFFER_SIZE As Long = 512
Private Const READ_THRESHOLD_BUFFER_SIZE As Long = 512
Private Const DFP_GET_VERSION As Long =
Private Const DFP_SEND_DRIVE_COMMAND As Long =
Private Const DFP_RECEIVE_DRIVE_DATA As Long =
Private Type GETVERSIONOUTPARAMS
&&& bVersion As
Byte&&&&&&
' Binary driver version.
&&& bRevision As
' Binary driver revision.
&&& bReserved As
' Not used.
bIDEDeviceMap As Byte ' Bit map of IDE devices.
fCapabilities As Long ' Bit mask of driver capabilities.
dwReserved(3) As Long ' For future use.
Private Const CAP_IDE_ID_FUNCTION As Long =
1&&&&&&&&&&&&&&
' ATA ID command supported
Private Const CAP_IDE_ATAPI_ID As Long =
2&&&&&&&&&&&&&&&&&
' ATAPI ID command supported
Private Const CAP_IDE_EXECUTE_SMART_FUNCTION As Long =
4&&& ' SMART
commannds supported
Private Type IDEREGS
&&& bFeaturesReg
Byte&&&&&&
' Used for specifying SMART "commands".
bSectorCountReg As
Byte&&& ' IDE
sector count register
bSectorNumberReg As Byte&& ' IDE
sector number register
&&& bCylLowReg
Byte&&&&&&&&
' IDE low order cylinder value
&&& bCylHighReg
Byte&&&&&&&
' IDE high order cylinder value
bDriveHeadReg As
' IDE drive/head register
&&& bCommandReg
Byte&&&&&&&
' Actual IDE command.
&&& bReserved As
Byte&&&&&&&&&
' reserved for future use. Must be zero.
Private Type SENDCMDINPARAMS
&&& cBufferSize
Long&&&&&&&
' Buffer size in bytes
&&& irDriveRegs
IDEREGS&&&&
' Structure with drive register values.
&&& bDriveNumber
Byte&&&&&&
' Physical drive number to send
&&& ' command to
(0,1,2,3).
&&& bReserved(2)
Byte&&&&&&
' Reserved for future expansion.
dwReserved(3) As
' For future use.
&&& bBuffer(0)
Byte&&&&&&&&
' Input buffer.
Private Const IDE_ATAPI_ID As Long = &HA1 '
Returns ID sector for ATAPI.
Private Const IDE_ID_FUNCTION As Long = &HEC '
Returns ID sector for ATA.
Private Const IDE_EXECUTE_SMART_FUNCTION As Long =
&HB0 ' Performs SMART cmd.
Private Const SMART_CYL_LOW As Long = &H4F
Private Const SMART_CYL_HI As Long = &HC2
Private Type DRIVERSTATUS
&&& bDriverError
Byte&&&&&&
' Error code from driver,
&&& bIDEStatus
Byte&&&&&&&&
' Contents of IDE Error register.
&&& bReserved(1)
Byte&&&&&&
' Reserved for future expansion.
dwReserved(1) As
' Reserved for future expansion.
Private Const SMART_NO_ERROR As Long = 0 ' No error
Private Const SMART_IDE_ERROR As Long = 1 ' Error from IDE
controller
Private Const SMART_INVALID_FLAG As Long = 2 ' Invalid command
Private Const SMART_INVALID_COMMAND As Long = 3 ' Invalid command
Private Const SMART_INVALID_BUFFER As Long = 4 ' Bad buffer (null,
invalid addr..)
Private Const SMART_INVALID_DRIVE As Long = 5 ' Drive number not
Private Const SMART_INVALID_IOCTL As Long =
6&& ' Invalid IOCTL
Private Const SMART_ERROR_NO_MEM As Long = 7 ' Could not lock
user's buffer
Private Const SMART_INVALID_REGISTER As Long = 8 ' Some IDE
Register not valid
Private Const SMART_NOT_SUPPORTED As Long = 9 ' Invalid cmd flag
Private Const SMART_NO_IDE_DEVICE As Long = 10 ' Cmd issued to
device not present
Private Type SENDCMDOUTPARAMS
&&& cBufferSize
Long&&&&&&&
' Size of bBuffer in bytes
&&& drvStatus As
DRIVERSTATUS ' Driver status structure.
&&& bBuffer(0)
Byte&&&&&&&&
' Buffer of arbitrary length in which to store the data read from
the&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Private Const SMART_READ_ATTRIBUTE_VALUES As Long =
' ATA4: Renamed
Private Const SMART_READ_ATTRIBUTE_THRESHOLDS As Long =
' Obsoleted in ATA4!
Private Const SMART_ENABLE_DISABLE_ATTRIBUTE_AUTOSAVE As Long =
Private Const SMART_SAVE_ATTRIBUTE_VALUES As Long =
Private Const SMART_EXECUTE_OFFLINE_IMMEDIATE As Long =
Private Const SMART_ENABLE_SMART_OPERATIONS As Long =
Private Const SMART_DISABLE_SMART_OPERATIONS As Long =
Private Const SMART_RETURN_SMART_STATUS As Long =
Private Type DRIVEATTRIBUTE
&&& bAttrID As
Byte&&&&&&&
' Identifies which attribute
&&& wStatusFlags
As Integer&&& '
see bit definitions below
&&& bAttrValue
' Current normalized value
&&& bWorstValue
As Byte&&& ' How
bad has it ever been?
&&& bRawValue(5)
As Byte&& ' Un-normalized
&&& bReserved As
Private Type ATTRTHRESHOLD
&&& bAttrID As
Byte&&&&&&&&&&&
' Identifies which attribute
bWarrantyThreshold As Byte ' Triggering value
&&& bReserved(9)
Private Type IDSECTOR
&&& wGenConfig
As Integer
&&& wNumCyls As
&&& wReserved As
&&& wNumHeads As
wBytesPerTrack As Integer
wBytesPerSector As Integer
wSectorsPerTrack As Integer
wVendorUnique(2) As Integer
sSerialNumber(19) As Byte
&&& wBufferType
As Integer
&&& wBufferSize
As Integer
&&& wECCSize As
sFirmwareRev(7) As Byte
sModelNumber(39) As Byte
wMoreVendorUnique As Integer
wDoubleWordIO As Integer
wCapabilities As Integer
&&& wReserved1
As Integer
&&& wPIOTiming
As Integer
&&& wDMATiming
As Integer
&&& wBS As
wNumCurrentCyls As Integer
wNumCurrentHeads As Integer
wNumCurrentSectorsPerTrack As Integer
ulCurrentSectorCapacity(3) As
'这里只能用byte,因为VB没有无符号的LONG型变量
wMultSectorStuff As Integer
ulTotalAddressableSectors(3) As
'这里只能用byte,因为VB没有无符号的LONG型变量
wSingleWordDMA As Integer
wMultiWordDMA As Integer
bReserved(127) As Byte
Private Const ATTR_INVALID As Long = 0
Private Const ATTR_READ_ERROR_RATE As Long = 1
Private Const ATTR_THROUGHPUT_PERF As Long = 2
Private Const ATTR_SPIN_UP_TIME As Long = 3
Private Const ATTR_START_STOP_COUNT As Long = 4
Private Const ATTR_REALLOC_SECTOR_COUNT As Long = 5
Private Const ATTR_READ_CHANNEL_MARGIN As Long = 6
Private Const ATTR_SEEK_ERROR_RATE As Long = 7
Private Const ATTR_SEEK_TIME_PERF As Long = 8
Private Const ATTR_POWER_ON_HRS_COUNT As Long = 9
Private Const ATTR_SPIN_RETRY_COUNT As Long = 10
Private Const ATTR_CALIBRATION_RETRY_COUNT As Long = 11
Private Const ATTR_POWER_CYCLE_COUNT As Long = 12
Private Const PRE_FAILURE_WARRANTY As Long =
Private Const ON_LINE_COLLECTION As Long =
Private Const PERFORMANCE_ATTRIBUTE As Long =
Private Const ERROR_RATE_ATTRIBUTE As Long =
Private Const EVENT_COUNT_ATTRIBUTE As Long =
Private Const SELF_PRESERVING_ATTRIBUTE As Long =
Private Const NUM_ATTRIBUTE_STRUCTS As Long = 30
Private Const INVALID_HANDLE_VALUE As Long = -1
Private Const VER_PLATFORM_WIN32s As Long = 0
Private Const VER_PLATFORM_WIN32_WINDOWS As Long = 1
Private Const VER_PLATFORM_WIN32_NT As Long = 2
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
&&& dwPlatformId
&&& szCSDVersion
As String *
' Maintenance string for PSS usage
Private Const CREATE_NEW As Long = 1
Private Const GENERIC_READ As Long =
Private Const GENERIC_WRITE As Long =
Private Const FILE_SHARE_READ As Long = &H1
Private Const FILE_SHARE_WRITE As Long = &H2
Private Const OPEN_EXISTING As Long = 3
Private m_DiskInfo As IDSECTOR
Private Declare Function GetVersionEx Lib "kernel32" Alias
"GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As
Private Declare Function CreateFile Lib "kernel32" Alias
"CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As
Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As
Long, ByVal dwCreationDisposition As Long, ByVal
dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As
Private Declare Function DeviceIoControl Lib "kernel32" (ByVal
hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any,
ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal
nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped
As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject
As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"
(Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetVolumeInformation Lib "kernel32"
Alias "GetVolumeInformationA" (ByVal lpRootPathName As String,
ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long,
lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long,
lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String,
ByVal nFileSystemNameSize As Long) As Long
'信息类型枚举
Enum eumInfoType
&&& hdmodelsn =
&&& hdOnlyModel
&&& hdOnlySN =
'磁盘通道枚举
Enum eumDiskNo
hdPrimaryMaster = 0
hdPrimarySlave = 1
hdSecondaryMaster = 2
hdSecondarySlave = 3
'取得逻辑盘序列号 (非唯一)
Function GetDiskVolume(Optional ByVal strDiskName = "C") As
&&& Dim TempStr1
As String * 256, TempStr2 As String * 256
&&& Dim TempLon1
As Long, TempLon2 As Long, GetVal As Long
&&& Dim tmpVol
GetVolumeInformation(strDiskName & ":", TempStr1,
256, GetVal, TempLon1, TempLon2, TempStr2, 256)
&&& If GetVal =
tmpVol = ""
tmpVol = Hex(GetVal)
tmpVol = String(8 - Len(tmpVol), "0") &
tmpVol = Left(tmpVol, 4) & "-" &
Right(tmpVol, 4)
&&& End If
GetDiskVolume = tmpVol
End Function
'取得硬盘信息:型号/物理系列号(唯一)
Function GetHardDiskInfo(Optional ByVal numDisk As eumDiskNo =
hdPrimaryMaster, Optional ByVal numType As eumInfoType = hdOnlySN)
GetDiskInfo(numDisk) = 1 Then
Dim pSerialNumber As String, pModelNumber As String
pSerialNumber = StrConv(m_DiskInfo.sSerialNumber, vbUnicode)
pModelNumber = StrConv(m_DiskInfo.sModelNumber, vbUnicode)
Select Case numType
&&&&&&&&&&&
Case hdOnlyModel '仅型号
&&&&&&&&&&&&&&&
GetHardDiskInfo = Trim(pModelNumber)
&&&&&&&&&&&
Case hdOnlySN '仅系列号
&&&&&&&&&&&&&&&
GetHardDiskInfo = Trim(pSerialNumber)
&&&&&&&&&&&
Case Else&& '型号,系列号
&&&&&&&&&&&&&&&
GetHardDiskInfo = Trim(pModelNumber) & ","
& Trim(pSerialNumber)
End Select
End Function
Private Function OpenSMART(ByVal nDrive As Byte) As Long
Dim hSMARTIOCTL As Long
Dim hd As String
Dim VersionInfo As OSVERSIONINFO
hSMARTIOCTL = INVALID_HANDLE_VALUE
VersionInfo.dwOSVersionInfoSize = Len(VersionInfo)
&&& GetVersionEx
VersionInfo
&&& Select Case
VersionInfo.dwPlatformId
Case VER_PLATFORM_WIN32s
OpenSMART = hSMARTIOCTL
Case VER_PLATFORM_WIN32_WINDOWS
hSMARTIOCTL = CreateFile("", 0, 0, 0, CREATE_NEW, 0,
Case VER_PLATFORM_WIN32_NT
If nDrive & MAX_IDE_DRIVES Then
&&&&&&&&&&&
&&&&&&&&&&&
hSMARTIOCTL = CreateFile(hd, GENERIC_READ Or GENERIC_WRITE,
FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)
&&& OpenSMART =
hSMARTIOCTL
End Function
Private Function DoIDENTIFY(ByVal hSMARTIOCTL As Long, pSCIP As
SENDCMDINPARAMS, pSCOP() As Byte, ByVal bIDCmd As Byte, ByVal
bDriveNum As Byte, lpcbBytesReturned As Long) As Boolean
pSCIP.cBufferSize = IDENTIFY_BUFFER_SIZE
pSCIP.irDriveRegs.bFeaturesReg = 0
pSCIP.irDriveRegs.bSectorCountReg = 1
pSCIP.irDriveRegs.bSectorNumberReg = 1
pSCIP.irDriveRegs.bCylLowReg = 0
pSCIP.irDriveRegs.bCylHighReg = 0
pSCIP.irDriveRegs.bDriveHeadReg = &HA0 Or
((bDriveNum And 1) * 2 ^ 4)
pSCIP.irDriveRegs.bCommandReg = bIDCmd
pSCIP.bDriveNumber = bDriveNum
pSCIP.cBufferSize = IDENTIFY_BUFFER_SIZE
&& DoIDENTIFY =
CBool(DeviceIoControl(hSMARTIOCTL, DFP_RECEIVE_DRIVE_DATA, _
&&&&&&&&&&&&&&&&
pSCIP, 32, _
&&&&&&&&&&&&&&&&
pSCOP(0), 528, _
&&&&&&&&&&&&&&&&
lpcbBytesReturned, 0))
End Function
Private Function DoEnableSMART(ByVal hSMARTIOCTL As Long, pSCIP
As SENDCMDINPARAMS, pSCOP As SENDCMDOUTPARAMS, ByVal bDriveNum As
Byte, lpcbBytesReturned As Long) As Boolean
pSCIP.cBufferSize = 0
pSCIP.irDriveRegs.bFeaturesReg =
SMART_ENABLE_SMART_OPERATIONS
pSCIP.irDriveRegs.bSectorCountReg = 1
pSCIP.irDriveRegs.bSectorNumberReg = 1
pSCIP.irDriveRegs.bCylLowReg = SMART_CYL_LOW
pSCIP.irDriveRegs.bCylHighReg = SMART_CYL_HI
pSCIP.irDriveRegs.bDriveHeadReg = &HA0 Or
((bDriveNum And 1) * 2 ^ 4)
pSCIP.irDriveRegs.bCommandReg = IDE_EXECUTE_SMART_FUNCTION
pSCIP.bDriveNumber = bDriveNum
DoEnableSMART = CBool(DeviceIoControl(hSMARTIOCTL,
DFP_SEND_DRIVE_COMMAND, _
&&&&&&&&&&&&&&&&&&&
pSCIP, LenB(pSCIP) - 1, _
&&&&&&&&&&&&&&&&&&&
pSCOP, LenB(pSCOP) - 1, _
&&&&&&&&&&&&&&&&&&&
lpcbBytesReturned, 0))
End Function
'---------------------------------------------------------------------
'---------------------------------------------------------------------
Private Sub ChangeByteOrder(szString() As Byte, ByVal uscStrSize As
Dim i As Integer
Dim bTemp As Byte
&&& For i = 0
To uscStrSize - 1 Step 2
bTemp = szString(i)
szString(i) = szString(i + 1)
szString(i + 1) = bTemp
&&& Next i
Private Sub DisplayIdInfo(pids As IDSECTOR, pSCIP As
SENDCMDINPARAMS, ByVal bIDCmd As Byte, ByVal bDfpDriveMap As Byte,
ByVal bDriveNum As Byte)
ChangeByteOrder pids.sModelNumber, UBound(pids.sModelNumber) +
ChangeByteOrder pids.sFirmwareRev, UBound(pids.sFirmwareRev) +
ChangeByteOrder pids.sSerialNumber, UBound(pids.sSerialNumber) +
Public Function GetDiskInfo(ByVal nDrive As Byte) As Long
Dim hSMARTIOCTL As Long
Dim cbBytesReturned As Long
Dim VersionParams As GETVERSIONOUTPARAMS
Dim scip As SENDCMDINPARAMS
Dim scop() As Byte
Dim OutCmd As SENDCMDOUTPARAMS
Dim bDfpDriveMap As Byte
Dim bIDCmd As
Byte&&&&&&&&&&&&&&&&&&&
' IDE or ATAPI IDENTIFY cmd
Dim uDisk As IDSECTOR
m_DiskInfo = uDisk
&&& hSMARTIOCTL
= OpenSMART(nDrive)
hSMARTIOCTL && INVALID_HANDLE_VALUE
Call DeviceIoControl(hSMARTIOCTL, DFP_GET_VERSION, ByVal 0, 0,
VersionParams, Len(VersionParams), cbBytesReturned, 0)
If Not (VersionParams.bIDEDeviceMap \ 2 ^ nDrive And
&H10) Then
&&&&&&&&&&&
If DoEnableSMART(hSMARTIOCTL, scip, OutCmd, nDrive,
cbBytesReturned) Then
&&&&&&&&&&&&&&&
bDfpDriveMap = bDfpDriveMap Or 2 ^ nDrive
&&&&&&&&&&&
bIDCmd = IIf((VersionParams.bIDEDeviceMap \ 2 ^ nDrive And
&H10), IDE_ATAPI_ID, IDE_ID_FUNCTION)
ReDim scop(LenB(OutCmd) + IDENTIFY_BUFFER_SIZE - 1) As Byte
If DoIDENTIFY(hSMARTIOCTL, scip, scop, bIDCmd, nDrive,
cbBytesReturned) Then
&&&&&&&&&&&
CopyMemory m_DiskInfo, scop(LenB(OutCmd) - 4),
LenB(m_DiskInfo)
&&&&&&&&&&&
Call DisplayIdInfo(m_DiskInfo, scip, bIDCmd, bDfpDriveMap,
&&&&&&&&&&&
CloseHandle hSMARTIOCTL
&&&&&&&&&&&
GetDiskInfo = 1
&&&&&&&&&&&
Exit Function '&---& Bottom
CloseHandle hSMARTIOCTL
GetDiskInfo = 0
Else 'NOT HSMARTIOCTL...
GetDiskInfo = -1
&&& End If
End Function
Private Sub Form_Load()
Form1.Caption = GetHardDiskInfo()
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。ata demo盘考斯系统怎么注册啊?产品序列号和授权号怎么弄
ata demo盘考斯系统怎么注册啊?产品序列号和授权号怎么弄
?你是哪个考点的,他们没组织集体培训吗服务器和管理机建议分开装,题库装到管理机上服务器在启动状态下——打开管理机程序——插入加密狗(管理机必须可以访问外网,到ata公司注册的)教育部会自动识别出你的考点代码的,自动填写相应信息的如果还是有问题,咨询当地教育厅,或中英公司(技术支持)我以前也在教育部的考点工作过
不是。。马上要考ps高级证了,我只是想做下练习。。不是考点考试。
那个你是用不了的,只能装在考试下的
要授权考试批次才能打开的,个人是弄不了的
哦,那谢谢了,能给我介绍一些ps高级证的练习题嘛?
等待您来回答
操作系统领域专家求多个VB企业版序列号_百度知道
求多个VB企业版序列号
提问者采纳
123-1234567111-1111111
其他类似问题
序列号的相关知识
其他3条回答
111-1111111
VB的序列号都是1
准确地说盗版的都是一正版的我不知道
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁外墙玻璃清洁,专业团队,一流的服务

我要回帖

更多关于 序列号 的文章

 

随机推荐