【VB开源代码栏目提醒】:网学会员为需要VB开源代码的朋友们搜集整理了获取硬盘信息已验证VB源代码 - 其它资料相关资料,希望对各位网友有所帮助!
经验证可以使用!新建个模块:Module1.bas把上面的代码复制进去!使用方法:Private Sub Form_LoadText1.Text GetDiskVolume逻辑盘序列号Text2.Text GetHardDiskInfo型号/物理系列号End Sub代码如下:Public Const MAX_IDE_DRIVES As Long 4 Max number of drives assumingprimary/secondary master/slave topologyPublic Const READ_ATTRIBUTE_BUFFER_SIZE As Long 512Public Const IDENTIFY_BUFFER_SIZE As Long 512Public Const READ_THRESHOLD_BUFFER_SIZE As Long 512Public Const DFP_GET_VERSION As Long H74080Public Const DFP_SEND_DRIVE_COMMAND As Long H7C084Public Const DFP_RECEIVE_DRIVE_DATA As Long H7C088Public 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. dwReserved3 As Long For future use.End TypePublic Const CAP_IDE_ID_FUNCTION As Long 1 ATA ID command supportedPublic Const CAP_IDE_ATAPI_ID As Long 2 ATAPI ID commandsupportedPublic Const CAP_IDE_EXECUTE_SMART_FUNCTION As Long 4 SMART commanndssupportedPublic 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 TypePublic 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 0123. bReserved2 As Byte Reserved for future expansion. dwReserved3 As Long For future use. bBuffer0 As Byte Input buffer.End TypePublic Const IDE_ATAPI_ID As Long HA1 Returns ID sector for ATAPI.Public Const IDE_ID_FUNCTION As Long HEC Returns ID sector for ATA.Public Const IDE_EXECUTE_SMART_FUNCTION As Long HB0 Performs SMART cmd.Public Const SMART_CYL_LOW As Long H4FPublic Const SMART_CYL_HI As Long HC2Public Type DRIVERSTATUS bDriverError As Byte Error code from driver bIDEStatus As Byte Contents of IDE Error register. bReserved1 As Byte Reserved for future expansion. dwReserved1 As Long Reserved for future expansion.End TypePublic Const SMART_NO_ERROR As Long 0 No errorPublic Const SMART_IDE_ERROR As Long 1 Error from IDE controllerPublic Const SMART_INVALID_FLAG As Long 2 Invalid command flagPublic Const SMART_INVALID_COMMAND As Long 3 Invalid command bytePublic Const SMART_INVALID_BUFFER As Long 4 Bad buffer null invalid addr..Public Const SMART_INVALID_DRIVE As Long 5 Drive number not validPublic Const SMART_INVALID_IOCTL As Long 6 Invalid IOCTLPublic Const SMART_ERROR_NO_MEM As Long 7 Could not lock users bufferPublic Const SMART_INVALID_REGISTER As Long 8 Some IDE Register not validPublic Const SMART_NOT_SUPPORTED As Long 9 Invalid cmd flag setPublic Const SMART_NO_IDE_DEVICE As Long 10 Cmd issued to device not presentPublic Type SENDCMDOUTPARAMS cBufferSize As Long Size of bBuffer in bytes drvStatus As DRIVERSTATUS Driver status structure. bBuffer0 As Byte Buffer of arbitrary length in which to store thedata read from the drive.End TypePublic Const SMART_READ_ATTRIBUTE_VALUES As Long HD0 ATA4: RenamedPublic Const SMART_READ_ATTRIBUTE_THRESHOLDS As Long HD1 Obsoleted in ATA4Public Const SMART_ENABLE_DISABLE_ATTRIBUTE_AUTOSAVE As Long HD2Public Const SMART_SAVE_ATTRIBUTE_VALUES As Long HD3Public Const SMART_EXECUTE_OFFLINE_IMMEDIATE As Long HD4 ATA4Public Const SMART_ENABLE_SMART_OPERATIONS As Long HD8Public Const SMART_DISABLE_SMART_OPERATIONS As Long HD9Public Const SMART_RETURN_SMART_STATUS As Long HDAPublic 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 bRawValue5 As Byte Un-normalized value bReserved As Byte ...End TypePublic Type ATTRTHRESHOLD bAttrID As Byte Identifies which attribute bWarrantyThreshold As Byte Triggering value bReserved9 As Byte ...End TypePublic Type IDSECTOR wGenConfig As Integer wNumCyls As Integer wReserved As Integer wNumHeads As Integer wBytesPerTrack As Integer wBytesPerSector As Integer wSectorsPerTrack As Integer wVendorUnique2 As Integer sSerialNumber19 As Byte wBufferType As Integer wBufferSize As Integer wECCSize As Integer sFirmwareRev7 As Byte sModelNumber39 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 ulCurrentSectorCapacity3 As Byte 因 这里只能用 byte,为 VB 没有无符号的 LONG型变量 wMultSectorStuff As Integer ulTotalAddressableSectors3 As Byte 这里只能用 byte,因为 VB 没有无符号的LONG 型变量 wSingleWordDMA As Integer wMultiWordDMA As Integer bReserved127 As ByteEnd TypePublic Const ATTR_INVALID As Long 0Public Const ATTR_READ_ERROR_RATE As Long 1Public Const ATTR_THROUGHPUT_PERF As Long 2Public Const ATTR_SPIN_UP_TIME As Long 3Public Const ATTR_START_STOP_COUNT As Long 4Public Const ATTR_REALLOC_SECTOR_COUNT As Long 5Public Const ATTR_READ_CHANNEL_MARGIN As Long 6Public Const ATTR_SEEK_ERROR_RATE As Long 7Public Const ATTR_SEEK_TIME_PERF As Long 8Public Const ATTR_POWER_ON_HRS_COUNT As Long 9Public Const ATTR_SPIN_RETRY_COUNT As Long 10Public Const ATTR_CALIBRATION_RETRY_COUNT As Long 11Public Const ATTR_POWER_CYCLE_COUNT As Long 12Public Const PRE_FAILURE_WARRANTY As Long H1Public Const ON_LINE_COLLECTION As Long H2Public Const PERFORMANCE_ATTRIBUTE As Long H4Public Const ERROR_RATE_ATTRIBUTE As Long H8Public Const EVENT_COUNT_ATTRIBUTE As Long H10Public Const SELF_PRESERVING_ATTRIBUTE As Long H20Public Const NUM_ATTRIBUTE_STRUCTS As Long 30Public Const INVALID_HANDLE_VALUE As Long -1Public Const VER_PLATFORM_WIN32s As Long 0Public Const VER_PLATFORM_WIN32_WINDOWS As Long 1Public Const VER_PLATFORM_WIN32_NT As Long 2Public 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 TypePublic Const CREATE_NEW As Long 1Public Const GENERIC_READ As Long H80000000Public Const GENERIC_WRITE As Long H40000000Public Const FILE_SHARE_READ As Long H1Public Const FILE_SHARE_WRITE As Long H2Public Const OPEN_EXISTING As Long 3Public m_DiskInfo As IDSECTORPublic Declare Function GetVersionEx Lib kernel32 Alias GetVersionExAlpVersionInformation As OSVERSIONINFO As LongPublic Declare Function CreateFile Lib kernel32 Alias CreateFileA ByVallpFileName As String ByVal dwDesiredAccess As Long ByVal dwShareMode As Long ByVallpSecurityAttributes As Long ByVal dwCreationDisposition As Long ByValdwFlagsAndAttributes As Long ByVal hTemplateFile As Long As LongPublic Declare Function DeviceIoControl Lib kernel32 ByVal hDevice As Long ByValdwIoControlCode As Long lpInBuffer As Any ByVal nInBufferSize As Long lpOutBufferAs Any ByVal nOutBufferSize As Long lpBytesReturned As Long ByVal lpOverlappedAs Long As LongPublic Declare Function CloseHandle Lib kernel32 ByVal hObject As Long As LongPublic Declare Sub CopyMemory Lib kernel32 Alias RtlMoveMemory Destination AsAny Source As Any ByVal Length As LongPublic Declare Function GetVolumeInformation Lib kernel32 AliasGetVolumeInformationA ByVal lpRootPathName As String ByVal lpVolumeNameBufferAs String ByVal nVolumeNameSize As Long lpVolumeSerialNumber As LonglpMaximumComponentLength As Long lpFileSystemFlags As Long ByVallpFileSystemNameBuffer As String ByVal nFileSystemNameSize As Long As Long信息类型枚举Public Enum eumInfoType hdmodelsn 0 hdOnlyModel 1 hdOnlySN 2End Enum磁盘通道枚举Public Enum eumDiskNo hdPrimaryMaster 0 hdPrimarySlave 1 hdSecondaryMaster 2 hdSecondarySlave 3End Enum取得逻辑盘序列号 非唯一Public Function GetDiskVolumeOptional 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 GetVolumeInformationstrDiskName : TempStr1 256 GetVal TempLon1TempLon2 TempStr2 256 If GetVal 0 Then tmpVol Else tmpVol HexGetVal tmpVol String8 - LentmpVol 0 tmpVol tmpVol LefttmpVol 4 - RighttmpVol 4 End If GetDiskVolume tmpVolEnd Function取得硬盘信息:型号/物理系列号(唯一)Public Function GetHardDiskInfoOptional ByVal numDisk As eumDiskNo hdPrimaryMaster Optional ByVal numType As eumInfoType hdOnlySN As String If GetDiskInfonumDisk 1 Then Dim pSerialNumber As String pModelNumber As String pSerialNumber StrConvm_DiskInfo.sSerialNumber vbUnicode pModelNumber StrConvm_DiskInfo.sModelNumber vbUnicode Select Case numType Case hdOnlyModel 仅型号 MsgBox GetHardDiskInfo TrimpModelNumber Case hdOnlySN 仅系列号 GetHardDiskInfo TrimpSerialNumber Case Else 型号系列号 GetHardDiskInfo TrimpModelNumber TrimpSerialNumber End Select End IfEnd FunctionPublic Function OpenSMARTByVal nDrive As Byte As Long Dim hSMARTIOCTL As Long Dim hd As String Dim VersionInfo As OSVERSIONINFO hSMARTIOCTL INVALID_HANDLE_VALUE VersionInfo.dwOSVersionInfoSize LenVersionInfo 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 MAX_IDE_DRIVES Then hd .PhysicalDrive nDrive hSMARTIOCTL CreateFilehd GENERIC_READ Or GENERIC_WRITEFILE_SHARE_READ Or FILE_SHARE_WRITE 0 OPEN_EXISTING 0 0 End If End Select OpenSMART hSMARTIOCTLEnd FunctionPublic Function DoIDENTIFYByVal hSMARTIOCTL As Long pSCIP As SENDCMDINPARAMSpSCOP As Byte ByVal bIDCmd As Byte ByVal bDriveNum As Byte lpcbBytesReturnedAs 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 CBoolDeviceIoControlhSMARTIOCTL DFP_RECEIVE_DRIVE_DATA _ pSCIP 32 _ pSCOP0 528 _ lpcbBytesReturned 0End FunctionPublic Function DoEnableSMARTByVal hSMARTIOCTL As Long pSCIP As SENDCMDINPARAMSpSCOP As SENDCMDOUTPARAMS ByVal bDriveNum As Byte lpcbBytesReturned As Long AsBoolean 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 CBoolDeviceIoControlhSMARTIOCTL DFP_SEND_DRIVE_COMMAND _ pSCIP LenBpSCIP - 1 _ pSCOP LenBpSCOP - 1 _ lpcbBytesReturned 0End Function------------------------------------------------------------------------------------------------------------------------------------------Public Sub ChangeByteOrderszString As Byte ByVal uscStrSize As Integer Dim i As Integer Dim bTemp As Byte For i 0 To uscStrSize - 1 Step 2 bTemp szStringi szStringi szStringi 1 szStringi 1 bTemp Next iEnd SubPublic Sub DisplayIdInfopids As IDSECTOR pSCIP As SENDCMDINPARAMS ByVal bIDCmdAs Byte ByVal bDfpDriveMap As Byte ByVal bDriveNum As Byte ChangeByteOrder pids.sModelNumber UBoundpids.sModelNumber 1 ChangeByteOrder pids.sFirmwareRev UBoundpids.sFirmwareRev 1 ChangeByteOrder pids.sSerialNumber UBoundpids.sSerialNumber 1End SubPublic Function GetDiskInfoByVal 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 OpenSMARTnDrive If hSMARTIOCTL INVALID_HANDLE_VALUE Then Call DeviceIoControlhSMARTIOCTL DFP_GET_VERSION ByVal 0 0VersionParams LenVersionParams cbBytesReturned 0 If Not VersionParams.bIDEDeviceMap 2 nDrive And H10 Then If DoEnableSMARThSMARTIOCTL scip OutCmd nDrive cbBytesReturnedThen bDfpDriveMap bDfpDriveMap Or 2 nDrive End If End If bIDCmd IIfVersionParams.bIDEDeviceMap 2 nDrive And H10IDE_ATAPI_ID IDE_ID_FUNCTION ReDim scopLenBOutCmd IDENTIFY_BUFFER_SIZE - 1 As Byte If DoIDENTIFYhSMARTIOCTL scip scop bIDCmd nDrive cbBytesReturnedThen CopyMemory m_DiskInfo scopLenBOutCmd - 4 LenBm_DiskInfo Call DisplayIdInfom_DiskInfo scip bIDCmd bDfpDriveMap nDrive CloseHandle hSMARTIOCTL GetDiskInfo 1 Exit Function --- Bottom End If CloseHandle hSMARTIOCTL GetDiskInfo 0 Else NOT HSMARTIOCTL... GetDiskInfo -1 End IfEnd Function