раньше так было
if ( not( WinAPI_DeviceIoControl($hDevice, $SMART_RCV_DRIVE_DATA, ObjToStruct($cip), $mem.struct) ) ) then
return $ret
endif
$ret._isResult = true
Local $ptr = $mem.ptr + 16 + 2
Local $sii = 0
Local $i
for $i = 0 to 30 - 1
Local $smartRecordRaw = ObjReadMemory(SMART_RECORD, $ptr, true)
$ptr += SMART_RECORD()._size
if ( $smartRecordRaw.attribIndex <> 0 ) then
$smartInfoRawList[$sii] = $smartRecordRaw
Local $sir = SMART_INFO_RECORD()
$sir.attribIndex = $smartRecordRaw.attribIndex
$sir.attribValue = $smartRecordRaw.attribValue
$sir.attribWorst = $smartRecordRaw.attribWorst
$sir.attribRaw = $smartRecordRaw.attribRaw
$sir.threshold = 0xFFFF
$smartInfoMap[ $smartRecordRaw.attribIndex ] = $sir
$sii = $sii + 1
endif
next
а терь так
if ( not( WinAPI_DeviceIoControl($hDevice, $SMART_RCV_DRIVE_DATA, ObjToStruct($cip), $outStruct) ) ) then
return $ret
endif
$ret._isResult = true
local $smartAttributeMap[]
Local $smartAttributeRawList[0]
for $smartAttribute in ObjFromStruct(SMART_READ_DATA_OUTDATA, $outStruct).smartAttributeList
if ( $smartAttribute.Id <> 0 ) then
_ArrayAdd($smartAttributeRawList, $smartAttribute)
Local $sac = SMART_ATTRIBUTE_COMMON()
$sac.Id = $smartAttribute.Id
$sac.StatusFlags = $smartAttribute.StatusFlags
$sac.CurrentValue = $smartAttribute.CurrentValue
$sac.WorstValue = $smartAttribute.WorstValue
$sac.RawValue = $smartAttribute.RawValue
$sac.Reserved = $smartAttribute.Reserved
$sac.ThresholdValue = 0xFFFF
$sac.RawValueAsU8 = UIntNumberFromByteArray($sac.RawValue, 1)
$sac.RawValueAsU16 = UIntNumberFromByteArray($sac.RawValue, 2)
$sac.RawValueAsU32 = UIntNumberFromByteArray($sac.RawValue, 4)
$smartAttributeMap[ $sac.Id ] = $sac
endif
next