module1.bas
来自「vb获取硬盘序列号,一个用VB获得硬盘序列号的方法」· BAS 代码 · 共 371 行 · 第 1/2 页
BAS
371 行
Attribute VB_Name = "Module1"
Public Const MAX_IDE_DRIVES As Long = 4 ' Max number of drives assuming primary/secondary, master/slave topology
Public Const READ_ATTRIBUTE_BUFFER_SIZE As Long = 512
Public Const IDENTIFY_BUFFER_SIZE As Long = 512
Public Const READ_THRESHOLD_BUFFER_SIZE As Long = 512
Public Const DFP_GET_VERSION As Long = &H74080
Public Const DFP_SEND_DRIVE_COMMAND As Long = &H7C084
Public Const DFP_RECEIVE_DRIVE_DATA As Long = &H7C088
Public 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
Public Const CAP_IDE_ID_FUNCTION As Long = 1 ' ATA ID command supported
Public Const CAP_IDE_ATAPI_ID As Long = 2 ' ATAPI ID command supported
Public Const CAP_IDE_EXECUTE_SMART_FUNCTION As Long = 4 ' SMART commannds supported
Public 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
Public 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
Public 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 = &H4F
Public Const SMART_CYL_HI As Long = &HC2
Public 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
Public Const SMART_NO_ERROR As Long = 0 ' No error
Public Const SMART_IDE_ERROR As Long = 1 ' Error from IDE controller
Public Const SMART_INVALID_FLAG As Long = 2 ' Invalid command flag
Public Const SMART_INVALID_COMMAND As Long = 3 ' Invalid command byte
Public Const SMART_INVALID_BUFFER As Long = 4 ' Bad buffer (null, invalid addr..)
Public Const SMART_INVALID_DRIVE As Long = 5 ' Drive number not valid
Public Const SMART_INVALID_IOCTL As Long = 6 ' Invalid IOCTL
Public Const SMART_ERROR_NO_MEM As Long = 7 ' Could not lock user's buffer
Public Const SMART_INVALID_REGISTER As Long = 8 ' Some IDE Register not valid
Public Const SMART_NOT_SUPPORTED As Long = 9 ' Invalid cmd flag set
Public Const SMART_NO_IDE_DEVICE As Long = 10 ' Cmd issued to device not present
Public 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
Public Const SMART_READ_ATTRIBUTE_VALUES As Long = &HD0 ' ATA4: Renamed
Public Const SMART_READ_ATTRIBUTE_THRESHOLDS As Long = &HD1 ' Obsoleted in ATA4!
Public Const SMART_ENABLE_DISABLE_ATTRIBUTE_AUTOSAVE As Long = &HD2
Public Const SMART_SAVE_ATTRIBUTE_VALUES As Long = &HD3
Public Const SMART_EXECUTE_OFFLINE_IMMEDIATE As Long = &HD4 ' ATA4
Public Const SMART_ENABLE_SMART_OPERATIONS As Long = &HD8
Public Const SMART_DISABLE_SMART_OPERATIONS As Long = &HD9
Public Const SMART_RETURN_SMART_STATUS As Long = &HDA
Public 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
Public Type ATTRTHRESHOLD
bAttrID As Byte ' Identifies which attribute
bWarrantyThreshold As Byte ' Triggering value
bReserved(9) As Byte ' ...
End Type
Public 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 Byte
End Type
Public Const ATTR_INVALID As Long = 0
Public Const ATTR_READ_ERROR_RATE As Long = 1
Public Const ATTR_THROUGHPUT_PERF As Long = 2
Public Const ATTR_SPIN_UP_TIME As Long = 3
Public Const ATTR_START_STOP_COUNT As Long = 4
Public Const ATTR_REALLOC_SECTOR_COUNT As Long = 5
Public Const ATTR_READ_CHANNEL_MARGIN As Long = 6
Public Const ATTR_SEEK_ERROR_RATE As Long = 7
Public Const ATTR_SEEK_TIME_PERF As Long = 8
Public Const ATTR_POWER_ON_HRS_COUNT As Long = 9
Public Const ATTR_SPIN_RETRY_COUNT As Long = 10
Public Const ATTR_CALIBRATION_RETRY_COUNT As Long = 11
Public Const ATTR_POWER_CYCLE_COUNT As Long = 12
Public Const PRE_FAILURE_WARRANTY As Long = &H1
Public Const ON_LINE_COLLECTION As Long = &H2
Public Const PERFORMANCE_ATTRIBUTE As Long = &H4
Public Const ERROR_RATE_ATTRIBUTE As Long = &H8
Public Const EVENT_COUNT_ATTRIBUTE As Long = &H10
Public Const SELF_PRESERVING_ATTRIBUTE As Long = &H20
Public Const NUM_ATTRIBUTE_STRUCTS As Long = 30
Public Const INVALID_HANDLE_VALUE As Long = -1
Public Const VER_PLATFORM_WIN32s As Long = 0
Public Const VER_PLATFORM_WIN32_WINDOWS As Long = 1
Public Const VER_PLATFORM_WIN32_NT As Long = 2
Public 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 usage
End Type
Public Const CREATE_NEW As Long = 1
Public Const GENERIC_READ As Long = &H80000000
Public Const GENERIC_WRITE As Long = &H40000000
Public Const FILE_SHARE_READ As Long = &H1
Public Const FILE_SHARE_WRITE As Long = &H2
Public Const OPEN_EXISTING As Long = 3
Public m_DiskInfo As IDSECTOR
Public Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Public 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 Long
Public 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
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public 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
'信息类型枚举
Public Enum eumInfoType
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?