| )) End Function ''''--------------------------------------------------------------------- ''''--------------------------------------------------------------------- Private Sub ChangeByteOrder(szString() As Byte, ByVal uscStrSize As Integer) 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 End Sub 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) + 1 ChangeByteOrder pids.sFirmwareRev, UBound(pids.sFirmwareRev) + 1 ChangeByteOrder pids.sSerialNumber, UBound(pids.sSerialNumber) + 1 End Sub 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) If hSMARTIOCTL <> INVALID_HANDLE_VALUE Then 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 End If End If 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, nDrive) CloseHandle hSMARTIOCTL GetDiskInfo = 1 Exit Function ''''>---> Bottom End If CloseHandle hSMARTIOCTL GetDiskInfo = 0 Else ''''NOT HSMARTIOCTL... GetDiskInfo = -1 End If End Function
上一页 [1] [2] [3] |