如何获取硬盘序列号

您所在的位置:网站首页 bios怎么看硬盘序列号 如何获取硬盘序列号

如何获取硬盘序列号

2024-07-13 21:06:33| 来源: 网络整理| 查看: 265

如何获取硬盘序列号 精选 转载

徒步天下 2008-05-20 11:00:01 博主文章分类:技术学习

文章标签 VB 开发 源代码 休闲 硬盘序列号 文章分类 后端开发

如何获取硬盘序列号? 作者:cg1  摘自:access911.net  编辑:cg1  更新日期:2003-8-2  浏览人次: 2255 专题地址: [url]http://www.access911.net/?kbid;77FAB01E10DC[/url]   简述:如何获取硬盘序列号?   阅读前需掌握:   难度等级: 等级未评定     问题: 如何获取硬盘序列号?  方法一: 硬盘序列号有两种,一种是格式化以后产生的序列号,每个盘符有一个,再次格式话时会改变,另一种是硬盘硬件的序列号。我们所取的是第一种注意:分区序列号可不是一定要格式化才能修改的,我这里有一个命令可以直接修改硬盘分区序列号无需格式化硬盘 Private Declare Function 获得硬盘序列号 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 Private Sub Form_Load()On Error GoTo Err_Form_Load        Dim aa As Long    Dim VolName As String    Dim 硬盘序列号 As Long    Dim Maxlen As Long    Dim Sysflag As Long    Dim fsysName As String          aa = 获得硬盘序列号("c:\", VolName, 256, 硬盘序列号, Maxlen, Sysflag, fsysName, 256)    Exit SubErr_Form_Load:End Sub   方法二: 用 FSO 来获取硬盘扇区序列号 Dim fs, d, vSet fs = CreateObject("Scripting.FileSystemObject")Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName("c:\")))v = Hex(d.SerialNumber)msgbox "c 硬盘序列号(16制): " & v Sub ShowDriveInfo(drvpath)    Dim fs, d, s, t    Set fs = CreateObject("Scripting.FileSystemObject")    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))    Select Case d.DriveType    Case 0        t = "Unknown"    Case 1        t = "Removable"    Case 2        t = "Fixed"    Case 3        t = "Network"    Case 4        t = "CD-ROM"    Case 5        t = "RAM Disk"    End Select    s = "Drive " & d.DriveLetter & ": - " & t    s = s & vbCrLf & "SN: " & d.SerialNumber    MsgBox sEnd Sub      方法三: 以下是在Access相关站点从未公布过的通过wmi直接获取硬盘硬件id的方法注意:可不是所有的硬盘都有硬件id的! Function RunTest()    '提示第一个硬盘的序列号    MsgBox GetHDID_WMI(0)End Function 'Must References to the Microsoft WMI Scripting Library first.'必须引用 Microsoft WMI Scripting LibraryFunction GetHDID_WMI(Optional HDNo As Integer)'HDNo 参数表示硬盘的顺序号,如果有多个硬盘,本函数每次只返回一个硬盘的序列号     Dim HDSet As SWbemObjectSet    Dim HardDisk As SWbemObject    Dim strSN As String    Dim i As Long        '以下这段是返回本机上所有硬盘的型号及数量信息,可以删除    Set HDSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _                           InstancesOf("Win32_DiskDrive")    Debug.Print "共发现" & HDSet.Count & "个硬盘驱动器"        For Each HardDisk In HDSet        Debug.Print "硬盘" & i & "型号:" & HardDisk.Model        i = i + 1    Next       '从这里开始是返回硬盘的序列号    i = 0    Set HDSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _                           InstancesOf("Win32_PhysicalMedia")    For Each HardDisk In HDSet        If i = HDNo Then            strSN = Nz(HardDisk.SerialNumber,"")        End If        Debug.Print "硬盘" & i & "序列号:" & HardDisk.SerialNumber        i = i + 1    Next        If Trim(strSN) = "" Then        '注意,有时候使用移动硬盘,WMI 无法返回硬盘序列号,        '而有时候返回的序列号是外置硬盘盒USB控制器的序列号,        '如果该机器上另外有 SCSI 硬盘或者 SCSI RAID 磁盘阵列卡,        '那么返回的可能是阵列卡虚拟出来的序列号或者根本得不到序列号        GetHDID_WMI = "Unknown HD SerialNumber"    Else        GetHDID_WMI = Trim(strSN)    End If    End Function   方法四:   网上有很多获取硬盘序列号的代码,但大部分都只能取得逻辑分区的序列号,而不能取得硬盘的物理序列号。我们知道,逻辑分区的序列号是FORMAT时产生的,重新FORMAT将会改变。这对于要求唯一识别码的程式来说是致命的。这段代码利用API可以取得物理硬盘的很多特性,包括硬盘出厂时的唯一编号。这段代码我是从CSDN论坛获得,原作者不详。我将其稍做修改和增添,独立出两个常用的函数:GetDiskVolume 、GetHardDiskInfo  ...... '============================================'模块功能:取得硬盘的信息'编    程:来自互联网,阿勇修改'更新日期:2005/7/8'调用方法:'   GetDiskVolume() 取得逻辑盘的序列号'   GetHardDiskInfo() 取得物理盘的型号或序列号'============================================Private Const MAX_IDE_DRIVES As Long = 4   ' Max number of drives assuming primary/secondary, master/slave topologyPrivate Const READ_ATTRIBUTE_BUFFER_SIZE As Long = 512Private Const IDENTIFY_BUFFER_SIZE As Long = 512Private Const READ_THRESHOLD_BUFFER_SIZE As Long = 512Private Const DFP_GET_VERSION As Long = &H74080Private Const DFP_SEND_DRIVE_COMMAND As Long = &H7C084Private Const DFP_RECEIVE_DRIVE_DATA As Long = &H7C088 Private Type GETVERSIONOUTPARAMS    bVersion As Byte       ' Binary driver version.    bRevision As Byte      ' Binary driver revision.    bReserved As Byte      ' 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.End Type Private Const CAP_IDE_ID_FUNCTION As Long = 1               ' ATA ID command supportedPrivate Const CAP_IDE_ATAPI_ID As Long = 2                  ' ATAPI ID command supportedPrivate Const CAP_IDE_EXECUTE_SMART_FUNCTION As Long = 4    ' SMART commannds supported Private Type IDEREGS    bFeaturesReg As Byte       ' Used for specifying SMART "commands".    bSectorCountReg As Byte    ' IDE sector count register    bSectorNumberReg As Byte   ' IDE sector number register    bCylLowReg As Byte         ' IDE low order cylinder value    bCylHighReg As Byte        ' IDE high order cylinder value    bDriveHeadReg As Byte      ' IDE drive/head register    bCommandReg As Byte        ' Actual IDE command.    bReserved As Byte          ' reserved for future use.  Must be zero.End Type Private Type SENDCMDINPARAMS    cBufferSize As Long        ' Buffer size in bytes    irDriveRegs As IDEREGS     ' Structure with drive register values.    bDriveNumber As Byte       ' Physical drive number to send    ' command to (0,1,2,3).    bReserved(2) As Byte       ' Reserved for future expansion.    dwReserved(3) As Long      ' For future use.    bBuffer(0) As Byte         ' Input buffer.End Type 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 = &H4FPrivate Const SMART_CYL_HI As Long = &HC2 Private Type DRIVERSTATUS    bDriverError As Byte       ' Error code from driver,    bIDEStatus As Byte         ' Contents of IDE Error register.    bReserved(1) As Byte       ' Reserved for future expansion.    dwReserved(1) As Long      ' Reserved for future expansion.End Type Private Const SMART_NO_ERROR As Long = 0  ' No errorPrivate Const SMART_IDE_ERROR As Long = 1  ' Error from IDE controllerPrivate Const SMART_INVALID_FLAG As Long = 2  ' Invalid command flagPrivate Const SMART_INVALID_COMMAND As Long = 3  ' Invalid command bytePrivate Const SMART_INVALID_BUFFER As Long = 4  ' Bad buffer (null, invalid addr..)Private Const SMART_INVALID_DRIVE As Long = 5  ' Drive number not validPrivate Const SMART_INVALID_IOCTL As Long = 6   ' Invalid IOCTLPrivate Const SMART_ERROR_NO_MEM As Long = 7  ' Could not lock user's bufferPrivate Const SMART_INVALID_REGISTER As Long = 8  ' Some IDE Register not validPrivate Const SMART_NOT_SUPPORTED As Long = 9  ' Invalid cmd flag setPrivate Const SMART_NO_IDE_DEVICE As Long = 10 ' Cmd issued to device not present Private Type SENDCMDOUTPARAMS    cBufferSize As Long        ' Size of bBuffer in bytes    drvStatus As DRIVERSTATUS  ' Driver status structure.    bBuffer(0) As Byte         ' Buffer of arbitrary length in which to store the data read from the                                          ' drive.End Type Private Const SMART_READ_ATTRIBUTE_VALUES As Long = &HD0    ' ATA4: RenamedPrivate Const SMART_READ_ATTRIBUTE_THRESHOLDS As Long = &HD1    ' Obsoleted in ATA4!Private Const SMART_ENABLE_DISABLE_ATTRIBUTE_AUTOSAVE As Long = &HD2Private Const SMART_SAVE_ATTRIBUTE_VALUES As Long = &HD3Private Const SMART_EXECUTE_OFFLINE_IMMEDIATE As Long = &HD4    ' ATA4Private Const SMART_ENABLE_SMART_OPERATIONS As Long = &HD8Private Const SMART_DISABLE_SMART_OPERATIONS As Long = &HD9Private Const SMART_RETURN_SMART_STATUS As Long = &HDA Private Type DRIVEATTRIBUTE    bAttrID As Byte        ' Identifies which attribute    wStatusFlags As Integer    ' see bit definitions below    bAttrValue As Byte     ' Current normalized value    bWorstValue As Byte    ' How bad has it ever been?    bRawValue(5) As Byte   ' Un-normalized value    bReserved As Byte      ' ...End Type Private Type ATTRTHRESHOLD    bAttrID As Byte            ' Identifies which attribute    bWarrantyThreshold As Byte ' Triggering value    bReserved(9) As Byte      ' ...End Type Private Type IDSECTOR    wGenConfig As Integer    wNumCyls As Integer    wReserved As Integer    wNumHeads As Integer    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 Integer    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 Integer    wNumCurrentCyls As Integer    wNumCurrentHeads As Integer    wNumCurrentSectorsPerTrack As Integer    ulCurrentSectorCapacity(3) As Byte    '这里只能用byte,因为VB没有无符号的LONG型变量    wMultSectorStuff As Integer    ulTotalAddressableSectors(3) As Byte   '这里只能用byte,因为VB没有无符号的LONG型变量    wSingleWordDMA As Integer    wMultiWordDMA As Integer    bReserved(127) As ByteEnd Type Private Const ATTR_INVALID As Long = 0Private Const ATTR_READ_ERROR_RATE As Long = 1Private Const ATTR_THROUGHPUT_PERF As Long = 2Private Const ATTR_SPIN_UP_TIME As Long = 3Private Const ATTR_START_STOP_COUNT As Long = 4Private Const ATTR_REALLOC_SECTOR_COUNT As Long = 5Private Const ATTR_READ_CHANNEL_MARGIN As Long = 6Private Const ATTR_SEEK_ERROR_RATE As Long = 7Private Const ATTR_SEEK_TIME_PERF As Long = 8Private Const ATTR_POWER_ON_HRS_COUNT As Long = 9Private Const ATTR_SPIN_RETRY_COUNT As Long = 10Private Const ATTR_CALIBRATION_RETRY_COUNT As Long = 11Private Const ATTR_POWER_CYCLE_COUNT As Long = 12 Private Const PRE_FAILURE_WARRANTY As Long = &H1Private Const ON_LINE_COLLECTION As Long = &H2Private Const PERFORMANCE_ATTRIBUTE As Long = &H4Private Const ERROR_RATE_ATTRIBUTE As Long = &H8Private Const EVENT_COUNT_ATTRIBUTE As Long = &H10Private Const SELF_PRESERVING_ATTRIBUTE As Long = &H20 Private Const NUM_ATTRIBUTE_STRUCTS As Long = 30Private Const INVALID_HANDLE_VALUE As Long = -1 Private Const VER_PLATFORM_WIN32s As Long = 0Private Const VER_PLATFORM_WIN32_WINDOWS As Long = 1Private Const VER_PLATFORM_WIN32_NT As Long = 2 Private Type OSVERSIONINFO    dwOSVersionInfoSize As Long    dwMajorVersion As Long    dwMinorVersion As Long    dwBuildNumber As Long    dwPlatformId As Long    szCSDVersion As String * 128      '  Maintenance string for PSS usageEnd Type Private Const CREATE_NEW As Long = 1Private Const GENERIC_READ As Long = &H80000000Private Const GENERIC_WRITE As Long = &H40000000Private Const FILE_SHARE_READ As Long = &H1Private Const FILE_SHARE_WRITE As Long = &H2Private Const OPEN_EXISTING  As Long = 3 Private m_DiskInfo As IDSECTOR Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As LongPrivate 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 LongPrivate 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 LongPrivate Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate 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 = 0    hdOnlyModel = 1    hdOnlySN = 2End Enum '磁盘通道枚举Enum eumDiskNo    hdPrimaryMaster = 0    hdPrimarySlave = 1    hdSecondaryMaster = 2    hdSecondarySlave = 3End Enum '取得逻辑盘序列号(非唯一)Function GetDiskVolume(Optional ByVal strDiskName = "C") As String    Dim TempStr1 As String * 256, TempStr2 As String * 256    Dim TempLon1 As Long, TempLon2 As Long, GetVal As Long        Dim tmpVol As String        Call GetVolumeInformation(strDiskName & ":\", TempStr1, 256, GetVal, TempLon1, TempLon2, TempStr2, 256)    If GetVal = 0 Then        tmpVol = ""    Else        tmpVol = Hex(GetVal)        tmpVol = String(8 - Len(tmpVol), "0") & tmpVol        tmpVol = Left(tmpVol, 4) & "-" & Right(tmpVol, 4)    End If    GetDiskVolume = tmpVolEnd Function '取得硬盘信息:型号/物理系列号(唯一)Function GetHardDiskInfo(Optional ByVal numDisk As eumDiskNo = hdPrimaryMaster, Optional ByVal numType As eumInfoType = hdOnlySN) As String     If 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 If 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("\\.\SMARTVSD", 0, 0, 0, CREATE_NEW, 0, 0)      Case VER_PLATFORM_WIN32_NT        If nDrive  打赏 收藏 评论 分享 举报

上一篇:在单位捐了300元,微薄之力,帮助一下灾区的人民。

下一篇:[徒步天下原创]使用EXCEL VBA完成校验码生成算法(源代码)



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭