// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. // If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. // Copyright (C) LibreHardwareMonitor and Contributors. // Partial Copyright (C) Michael Möller and Contributors. // All Rights Reserved. using System.Collections.Generic; using DiskInfoToolkit.Interop.Enums; namespace LibreHardwareMonitor.Hardware.Storage; internal static class SmartAttributeTranslator { const int SensorChannelStartIndex = 30; public static List GetAttributesFor(DiskInfoToolkit.Storage storage) { switch (storage.SmartKey) { case SmartKey.Smart: return GetSmart(storage); case SmartKey.SSD: return GetSSD(storage); case SmartKey.Mtron: return GetMtron(storage); case SmartKey.Indilinx: return GetIndilinx(storage); case SmartKey.JMicron60x: return GetJMicron60X(storage); case SmartKey.Intel: return GetIntel(storage); case SmartKey.Samsung: return GetSamsung(storage); case SmartKey.SandForce: return GetSandforce(storage); case SmartKey.JMicron61x: return GetJMicron61X(storage); case SmartKey.Micron: return GetMicron(storage); case SmartKey.MicronMU02: return GetMicronMU03(storage); case SmartKey.Ocz: return GetOcz(storage); case SmartKey.Plextor: return GetPlextor(storage); case SmartKey.SanDisk: return GetSandisk(storage); case SmartKey.OczVector: return GetOczVector(storage); case SmartKey.Corsair: return GetCorsair(storage); case SmartKey.Toshiba: return GetToshiba(storage); case SmartKey.SanDiskGb: return GetSandiskGB(storage); case SmartKey.Kingston: return GetKingston(storage); case SmartKey.NVMe: return GetNVME(storage); case SmartKey.Realtek: return GetRealtek(storage); case SmartKey.SKhynix: return GetSkhynix(storage); case SmartKey.Kioxia: return GetKioxia(storage); case SmartKey.WDC: return GetWdc(storage); case SmartKey.KingstonSuv: return GetKingstonSUV(storage); case SmartKey.KingstonKC600: return GetKingstonKC600(storage); case SmartKey.KingstonDC500: return GetKingstonDC500(storage); case SmartKey.KingstonSA400: return GetKingstonSA400(storage); case SmartKey.Ssstc: return GetSSSTC(storage); case SmartKey.IntelDc: return GetIntelDC(storage); case SmartKey.Apacer: return GetAPACER(storage); case SmartKey.SiliconMotion: return GetSiliconMotion(storage); case SmartKey.JMicron66x: return GetJMicron66X(storage); case SmartKey.Phison: return GetPhison(storage); case SmartKey.Seagate: return GetSeagate(storage); case SmartKey.SeagateIronWolf: return GetSeagateIronWolf(storage); case SmartKey.Marvell: return GetMarvell(storage); case SmartKey.Maxiotek: return GetMaxiotek(storage); case SmartKey.SeagateBarraCuda: return GetSeagateBarraCuda(storage); case SmartKey.Ymtc: return GetYMTC(storage); case SmartKey.Scy: return GetSCY(storage); case SmartKey.Recadata: return GetRecadata(storage); case SmartKey.SanDiskHP: return GetSandiskHP(storage); case SmartKey.SanDiskHPVenus: return GetSandiskHPVenus(storage); case SmartKey.SanDiskDell: return GetSandiskDell(storage); case SmartKey.SanDiskLenovo: return GetSandiskLenovo(storage); case SmartKey.SanDiskLenovoHelenVenus: return GetSandiskLenovoHelenVenus(storage); case SmartKey.MicronMU03: return GetMicronMU03(storage); case SmartKey.SanDiskCloud: return GetSandiskCloud(storage); case SmartKey.SiliconMotionCVC: return GetSiliconMotionCVC(storage); case SmartKey.AdataIndustrial: return GetAdataIndustrial(storage); default: return new(); } } private static List GetSmart(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ThroughputPerformance), Get(storage, SmartAttributeType.SpinUpTime), Get(storage, SmartAttributeType.StartStopCount), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.ReadChannelMargin), Get(storage, SmartAttributeType.SeekErrorRate), Get(storage, SmartAttributeType.SeekTimePerformance), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.SpinRetryCount), Get(storage, SmartAttributeType.RecalibrationRetries), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SoftReadErrorRateStab), Get(storage, SmartAttributeType.CurrentHeliumLevel), Get(storage, SmartAttributeType.EndToEndError), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.HighFlyWrites), Get(storage, SmartAttributeType.AirflowTemperature), Get(storage, SmartAttributeType.GSenseErrorRate), Get(storage, SmartAttributeType.PowerOffRetractCount), Get(storage, SmartAttributeType.LoadUnloadCycleCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.HardwareECCRecovered), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.UncorrectableSectorCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.WriteErrorRate), Get(storage, SmartAttributeType.SoftReadErrorRate), Get(storage, SmartAttributeType.DataAddressMarkError), Get(storage, SmartAttributeType.RunOutCancel), Get(storage, SmartAttributeType.SoftECCCorrection), Get(storage, SmartAttributeType.ThermalAsperityRate), Get(storage, SmartAttributeType.FlyingHeight), Get(storage, SmartAttributeType.SpinHighCurrent), Get(storage, SmartAttributeType.SpinBuzz), Get(storage, SmartAttributeType.OfflineSeekPerformance), Get(storage, SmartAttributeType.VibrationDuringWrite), Get(storage, SmartAttributeType.ShockDuringWrite), Get(storage, SmartAttributeType.DiskShift), Get(storage, SmartAttributeType.GSenseErrorRate), Get(storage, SmartAttributeType.LoadedHours), Get(storage, SmartAttributeType.LoadUnloadCycleCount), Get(storage, SmartAttributeType.LoadFriction), Get(storage, SmartAttributeType.LoadUnloadCycleCount), Get(storage, SmartAttributeType.LoadInTime), Get(storage, SmartAttributeType.TorqueAmplificationCount), Get(storage, SmartAttributeType.PowerOffRetractCount), Get(storage, SmartAttributeType.GMRHeadAmplitude), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.HeadFlyingHours), Get(storage, SmartAttributeType.ReadErrorRetryRate), Get(storage, SmartAttributeType.FreeFallProtection), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.HeliumConditionLower), Get(storage, SmartAttributeType.HeliumConditionUpper), Get(storage, SmartAttributeType.MAMRHealthMonitor), ]; } private static List GetSSD(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ThroughputPerformance), Get(storage, SmartAttributeType.SpinUpTime), Get(storage, SmartAttributeType.StartStopCount), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.ReadChannelMargin), Get(storage, SmartAttributeType.SeekErrorRate), Get(storage, SmartAttributeType.SeekTimePerformance), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.SpinRetryCount), Get(storage, SmartAttributeType.RecalibrationRetries), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SoftReadErrorRateStab), Get(storage, SmartAttributeType.UnsafeShutdownCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.UncorrectableSectorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), ]; } private static List GetMtron(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.TotalEraseCount), ]; } private static List GetIndilinx(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ProgramFailureBlockCount), Get(storage, SmartAttributeType.EraseFailureBlockCount), Get(storage, SmartAttributeType.ReadFailureBlockCount), Get(storage, SmartAttributeType.TotalCountReadSectors), Get(storage, SmartAttributeType.TotalCountWriteSectors), Get(storage, SmartAttributeType.TotalCountReadCommands), Get(storage, SmartAttributeType.TotalCountWriteCommands), Get(storage, SmartAttributeType.TotalCountErrorBitsFromFlash), Get(storage, SmartAttributeType.TotalCountReadSectorsWithCorrectableBitErrors), Get(storage, SmartAttributeType.BadBlockFullFlag), Get(storage, SmartAttributeType.MaximumPECountSpecification), Get(storage, SmartAttributeType.MinimumEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.RemainingLife), ]; } private static List GetIntel(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.SpinUpTime), Get(storage, SmartAttributeType.StartStopCount), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.PowerLossProtectionFailure), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.EndToEndError), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.UnsafeShutdownCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.TimedWorkloadMediaWear), Get(storage, SmartAttributeType.TimedWorkloadHostReadWriteRatio), Get(storage, SmartAttributeType.TimedWorkloadTimer), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.ThermalThrottleStatus), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetSamsung(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.UsedReservedBlockCount), Get(storage, SmartAttributeType.UsedReservedBlockCount), Get(storage, SmartAttributeType.UnusedReservedBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.RuntimeBadBlock), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.AirflowTemperature), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ECCErrorRate), Get(storage, SmartAttributeType.OfflineUncorrectableErrors), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.SuperCapStatus), Get(storage, SmartAttributeType.SSDModeStatus), Get(storage, SmartAttributeType.PORRecoveryCount), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.UnusedReservedBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ErrorDetection), Get(storage, SmartAttributeType.MediaWearoutIndicator), ]; } private static List GetSandforce(DiskInfoToolkit.Storage storage) { int sensorStart = SensorChannelStartIndex; return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.RetiredBlockCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SoftReadErrorRate), Get(storage, SmartAttributeType.GigabytesErased), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.WearRangeDelta), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.IOErrorDetectionCodeErrors), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.UncorrectableSectorCount), Get(storage, SmartAttributeType.SATARErrors), Get(storage, SmartAttributeType.SoftReadErrorRate), Get(storage, SmartAttributeType.SoftECCCorrection), Get(storage, SmartAttributeType.DriveLifeProtectionStatus), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.NandDataWritten, SensorType.Data, sensorStart++), Get(storage, SmartAttributeType.PowerFailBackupHealth), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), ]; } private static List GetMicron(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedNANDBlocks), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SoftReadErrorRate), Get(storage, SmartAttributeType.DeviceCapacity), Get(storage, SmartAttributeType.UserCapacity), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.RemainingSpareBlocks), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.UnusedReservedBlockCount), Get(storage, SmartAttributeType.UnalignedAccessCount), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.ErrorCorrectionCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ECCBitCorrectionCount), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.OfflineUncorrectableErrors), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.LifetimeUsed), Get(storage, SmartAttributeType.WriteErrorRate), Get(storage, SmartAttributeType.SuccessfulRAINRecoveryCount), Get(storage, SmartAttributeType.TotalBytesRead), Get(storage, SmartAttributeType.WriteProtectProgress), Get(storage, SmartAttributeType.ECCBitsCorrected), Get(storage, SmartAttributeType.ECCCumulativeThresholdEvents), Get(storage, SmartAttributeType.CumulativeProgramNANDPages), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostProgramPageCount), Get(storage, SmartAttributeType.BackgroundProgramPageCount), Get(storage, SmartAttributeType.TotalRefreshISPCount), Get(storage, SmartAttributeType.TotalDoRefCalCount), Get(storage, SmartAttributeType.TotalNANDReadPlaneCountLow), Get(storage, SmartAttributeType.TotalNANDReadPlaneCountHigh), Get(storage, SmartAttributeType.TotalBlockReMapPassCount), Get(storage, SmartAttributeType.TotalBackgroundScanOverLimitCount), Get(storage, SmartAttributeType.TotalBackgroundScan), ]; } private static List GetOcz(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.SpinUpTime), Get(storage, SmartAttributeType.StartStopCount), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.TotalCountWriteSectors), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.TotalBlocksErased), Get(storage, SmartAttributeType.SSDProtectMode), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.TotalNumberCorrectedBits), Get(storage, SmartAttributeType.MaxRatedPECounts), Get(storage, SmartAttributeType.MinimumEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.NandReadRetryCount), Get(storage, SmartAttributeType.SimpleReadRetryAttempts), Get(storage, SmartAttributeType.AdaptiveReadRetryAttempts), Get(storage, SmartAttributeType.OfflineUncorrectableErrors), Get(storage, SmartAttributeType.RAIDRecoveryCount), Get(storage, SmartAttributeType.PowerLossProtectionFailure), Get(storage, SmartAttributeType.NandDataRead), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetSeagate(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.RetiredBlockCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.RemainingSpareBlocks), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.WearRangeDelta), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.SoftReadErrorRate), Get(storage, SmartAttributeType.SoftECCCorrection), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.ReadFailureBlockCount), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataRead), ]; } private static List GetWdc(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedNANDBlocks), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.TotalNANDEraseCount), Get(storage, SmartAttributeType.MinimumPECycles), Get(storage, SmartAttributeType.MaximumBadBlocksPerDie), Get(storage, SmartAttributeType.MaximumPECycles), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.GrownBadBlocks), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AveragePECycles), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.EndToEndErrorsCorrected), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.ThermalThrottleStatus), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetPlextor(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ProgramFailCountWorstCase), Get(storage, SmartAttributeType.EraseFailCountWorstCase), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.UsedReservedBlockCountWorstCase), Get(storage, SmartAttributeType.UsedReservedBlockCount), Get(storage, SmartAttributeType.UnusedReservedBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.EndToEndErrorsCorrected), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.UnsafeShutdownCount), Get(storage, SmartAttributeType.ECCErrorRate), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.UncorrectableSectorCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), ]; } private static List GetSandisk(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReallocatedNANDBlocks), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.PercentOfTotalEraseCount), Get(storage, SmartAttributeType.RemainingSpareBlocks), Get(storage, SmartAttributeType.PercentOfTotalEraseCountBCBlocks), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), ]; } private static List GetOczVector(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.RuntimeBadBlock), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.TotalUncorrectableNANDReads), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.TotalReadFailures), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.TotalBlocksErased), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.TotalNumberCorrectedBits), Get(storage, SmartAttributeType.MaxRatedPECounts), Get(storage, SmartAttributeType.MinimumEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.NandReadRetryCount), Get(storage, SmartAttributeType.SimpleReadRetryAttempts), Get(storage, SmartAttributeType.AdaptiveReadRetryAttempts), Get(storage, SmartAttributeType.OfflineUncorrectableErrors), Get(storage, SmartAttributeType.RAIDRecoveryCount), Get(storage, SmartAttributeType.InWarranty), Get(storage, SmartAttributeType.DASPolarity), Get(storage, SmartAttributeType.PartialPfail), Get(storage, SmartAttributeType.WriteThrottlingActivationFlag), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataRead), ]; } private static List GetToshiba(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ThroughputPerformance), Get(storage, SmartAttributeType.SpinUpTime), Get(storage, SmartAttributeType.StartStopCount), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.SeekErrorRate), Get(storage, SmartAttributeType.SeekTimePerformance), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.SpinRetryCount), Get(storage, SmartAttributeType.RecalibrationRetries), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SSDProtectMode), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.UncorrectableSectorCount), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), ]; } private static List GetCorsair(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.RetiredBlockCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), ]; } private static List GetKingston(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ThroughputPerformance), Get(storage, SmartAttributeType.SpinUpTime), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.SeekErrorRate), Get(storage, SmartAttributeType.SeekTimePerformance), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.SpinRetryCount), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.BadClusterTableCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.UnsafeShutdownCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.WriteHead), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.TotalEraseCount), ]; } private static List GetMicronMU03(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedNANDBlocks), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.UnusedSpareNANDBlocks), Get(storage, SmartAttributeType.Non4KAlignedAccess), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.ErrorCorrectionCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.ErrorCorrectionCount), Get(storage, SmartAttributeType.OfflineUncorrectableErrors), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.WriteErrorRate), Get(storage, SmartAttributeType.SuccessfulRAINRecoveryCount), Get(storage, SmartAttributeType.HostProgramPageCount), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.HostProgramPageCount), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.CumulativeProgramNANDPages), Get(storage, SmartAttributeType.CumulativeProgramNANDPages), ]; } private static List GetNVME(DiskInfoToolkit.Storage storage) { int sensorStart = SensorChannelStartIndex; return [ Get(storage, SmartAttributeType.CriticalWarning), Get(storage, SmartAttributeType.CompositeTemperature), Get(storage, SmartAttributeType.AvailableSpare, SensorType.Level, sensorStart++), Get(storage, SmartAttributeType.AvailableSpareThreshold, SensorType.Level, sensorStart++), Get(storage, SmartAttributeType.PercentageUsed, SensorType.Level, sensorStart++), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostReadCommands), Get(storage, SmartAttributeType.HostWriteCommands), Get(storage, SmartAttributeType.ControllerBusyTime), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.UnsafeShutdownCount), Get(storage, SmartAttributeType.MediaAndDataIntegrityErrors), Get(storage, SmartAttributeType.NumberOfErrorInformationLogEntries), Get(storage, SmartAttributeType.WarningCompositeTemperatureTime), Get(storage, SmartAttributeType.CriticalCompositeTemperatureTime), Get(storage, SmartAttributeType.TemperatureSensor1), Get(storage, SmartAttributeType.TemperatureSensor2), Get(storage, SmartAttributeType.TemperatureSensor3), Get(storage, SmartAttributeType.TemperatureSensor4), Get(storage, SmartAttributeType.TemperatureSensor5), Get(storage, SmartAttributeType.TemperatureSensor6), Get(storage, SmartAttributeType.TemperatureSensor7), Get(storage, SmartAttributeType.TemperatureSensor8), Get(storage, SmartAttributeType.ThermalManagementTemperature1TransitionCount), Get(storage, SmartAttributeType.ThermalManagementTemperature2TransitionCount), Get(storage, SmartAttributeType.TotalTimeThermalManagementTemperature1), Get(storage, SmartAttributeType.TotalTimeThermalManagementTemperature2), ]; } private static List GetRealtek(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.RawDataErrorRate), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.GDN), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.MaximumPECycles), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.SSDProtectMode), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ECCFailRecord), Get(storage, SmartAttributeType.UnalignedAccessCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ECCBitCorrectionCount), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.MinimumEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetSkhynix(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.MinimumEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ProgramFailCountWorstCase), Get(storage, SmartAttributeType.EraseFailCountWorstCase), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.UsedReservedBlockCountWorstCase), Get(storage, SmartAttributeType.UsedReservedBlockCount), Get(storage, SmartAttributeType.UnusedReservedBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.EndToEndError), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.ShockEventCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ECCErrorRate), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.UncorrectableSectorCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.UncorrectableSoftReadErrorRate), Get(storage, SmartAttributeType.SoftECCCorrection), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataRead), ]; } private static List GetKioxia(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SSDProtectMode), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.HostDataWritten), ]; } private static List GetSSSTC(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedNANDBlocks), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ProgramFailCountWorstCase), Get(storage, SmartAttributeType.EraseFailCountWorstCase), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.UsedReservedBlockCountWorstCase), Get(storage, SmartAttributeType.UsedReservedBlockCount), Get(storage, SmartAttributeType.UnusedReservedBlockCount), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.EndToEndError), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ECCErrorRate), Get(storage, SmartAttributeType.OfflineUncorrectableErrors), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.PowerLossProtectionFailure), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetIntelDC(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedNANDBlocks), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.DeviceCapacity), Get(storage, SmartAttributeType.UserCapacity), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.RemainingSpareBlocks), Get(storage, SmartAttributeType.TotalBlockEraseFailure), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.PowerLossProtectionFailure), Get(storage, SmartAttributeType.ProgramFailureBlockCount), Get(storage, SmartAttributeType.EndToEndError), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.OfflineUncorrectableErrors), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.LifetimeUsed), Get(storage, SmartAttributeType.TimedWorkloadMediaWear), Get(storage, SmartAttributeType.TimedWorkloadHostReadWriteRatio), Get(storage, SmartAttributeType.TimedWorkloadTimer), Get(storage, SmartAttributeType.ThermalThrottleStatus), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetAPACER(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.SSDProtectMode), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.BadClusterTableCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.HostDataWritten), ]; } private static List GetSiliconMotion(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SLCTotalEraseCount), Get(storage, SmartAttributeType.SLCMaximumEraseCount), Get(storage, SmartAttributeType.SLCMinimumEraseCount), Get(storage, SmartAttributeType.SLCAverageEraseCount), Get(storage, SmartAttributeType.DRAM1BitErrorCount), Get(storage, SmartAttributeType.UncorrectableSectorCount), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.NumberOfCacheDataBlock), Get(storage, SmartAttributeType.NumberOfInvalidBlocks), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.MinimumEraseCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.MaxEraseCountOfSpec), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.ProgramFailCountInWorstDie), Get(storage, SmartAttributeType.EraseFailCountInWorstDie), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.RuntimeBadBlock), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.PowerOffRetractCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.HardwareECCRecovered), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.OfflineUncorrectableErrors), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.TotalCountWriteSectors), ]; } private static List GetPhison(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.HostDataWritten), ]; } private static List GetMarvell(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.MinimumEraseCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.PowerOffRetractCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), ]; } private static List GetMaxiotek(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SSDProtectMode), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.BadClusterTableCount), Get(storage, SmartAttributeType.ReadErrorRetryRate), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.MinimumEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.SLCMinimumEraseCount), Get(storage, SmartAttributeType.SLCMaximumEraseCount), Get(storage, SmartAttributeType.SLCAverageEraseCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataRead), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.BitErrorCount), ]; } private static List GetYMTC(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.MaximumBadBlocksPerDie), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.BadClusterTableCount), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.EndToEndErrorsCorrected), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.MinimumEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.SLCMinimumEraseCount), Get(storage, SmartAttributeType.SLCMaximumEraseCount), Get(storage, SmartAttributeType.SLCAverageEraseCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataRead), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NANDTemperature), Get(storage, SmartAttributeType.BitErrorCount), ]; } private static List GetSCY(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.SeekErrorRate), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.ReadErrorRetryRate), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.RuntimeBadBlock), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ECCBitCorrectionCount), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetJMicron60X(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.HaltSystemIDFlashID), Get(storage, SmartAttributeType.FirmwareVersion), Get(storage, SmartAttributeType.ECCFailRecord), Get(storage, SmartAttributeType.AverageEraseCountMaxEraseCount), Get(storage, SmartAttributeType.GoodBlockCountSystemBlockCount), ]; } private static List GetJMicron61X(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ThroughputPerformance), Get(storage, SmartAttributeType.SpinUpTime), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.SeekErrorRate), Get(storage, SmartAttributeType.SeekTimePerformance), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.SpinRetryCount), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.ECCFailRecord), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.TotalEraseCount), ]; } private static List GetJMicron66X(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ThroughputPerformance), Get(storage, SmartAttributeType.SpinUpTime), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.SeekErrorRate), Get(storage, SmartAttributeType.SeekTimePerformance), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.SpinRetryCount), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SSDProtectMode), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.BadClusterTableCount), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.WriteHead), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), ]; } private static List GetSeagateIronWolf(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.GigabytesErased), Get(storage, SmartAttributeType.LifetimePS4EntryCount), Get(storage, SmartAttributeType.LifetimePS3EntryCount), Get(storage, SmartAttributeType.GrownBadBlocks), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.WearRangeDelta), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.RAISEECCCorrectableCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.DriveLifeProtectionStatus), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.FreeSpace), ]; } private static List GetSeagateBarraCuda(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.RetiredBlockCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.RemainingSpareBlocks), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.WearRangeDelta), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.SoftReadErrorRate), Get(storage, SmartAttributeType.SoftECCCorrection), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.ReadFailureBlockCount), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataRead), ]; } private static List GetSandiskGB(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedNANDBlocks), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.TotalBlocksErased), Get(storage, SmartAttributeType.MinimumPECycles), Get(storage, SmartAttributeType.MaximumBadBlocksPerDie), Get(storage, SmartAttributeType.MaximumPECycles), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.GrownBadBlocks), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.PECycles), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.EndToEndErrorsCorrected), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.ThermalThrottleStatus), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetKingstonSUV(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ProgramFailCountInWorstDie), Get(storage, SmartAttributeType.EraseFailCountInWorstDie), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.UsedReservedBlockCountWorstDie), Get(storage, SmartAttributeType.UnusedReservedBlockCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ECCErrorRate), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.SoftECCCorrection), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataRead), ]; } private static List GetKingstonKC600(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedNANDBlocks), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.Reserved), Get(storage, SmartAttributeType.Reserved), Get(storage, SmartAttributeType.Reserved), Get(storage, SmartAttributeType.SLCAverageEraseCount), Get(storage, SmartAttributeType.DRAM1BitErrorCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.Reserved), Get(storage, SmartAttributeType.Reserved), Get(storage, SmartAttributeType.Reserved), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.Reserved), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.Reserved), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.HardwareECCRecovered), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.UnusedReservedBlockCount), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.HostDataWritten), ]; } private static List GetKingstonDC500(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SSDProtectMode), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.BadBlockFullFlag), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.ThermalThrottleStatus), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.TotalReadFailures), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.TotalEraseCount), ]; } private static List GetKingstonSA400(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.VendorUnique), Get(storage, SmartAttributeType.VendorUnique), Get(storage, SmartAttributeType.VendorUnique), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.VendorUnique), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.VendorUnique), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.VendorUnique), Get(storage, SmartAttributeType.VendorUnique), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.TotalEraseCount), ]; } private static List GetRecadata(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.SeekErrorRate), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.ReadErrorRetryRate), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.RuntimeBadBlock), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ECCBitCorrectionCount), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.PendingSectorCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetSandiskDell(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.UsedReservedBlockCountWorstCase), Get(storage, SmartAttributeType.UsedReservedBlockCount), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ECCErrorRate), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), ]; } private static List GetSandiskHP(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.EndToEndError), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.AirflowTemperature), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.ThrottleStatistics), Get(storage, SmartAttributeType.ThermalThrottleStatus), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetSandiskHPVenus(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.WearLevelingCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.EndToEndError), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.AirflowTemperature), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ReallocationEventCount), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.ThermalThrottleStatus), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetSandiskLenovo(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.MinimumPECycles), Get(storage, SmartAttributeType.MaximumBadBlocksPerDie), Get(storage, SmartAttributeType.MaximumPECycles), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.GrownBadBlocks), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AveragePECycles), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.RemainingSpareBlocks), Get(storage, SmartAttributeType.EndToEndErrorsCorrected), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.ThrottleStatistics), Get(storage, SmartAttributeType.ThermalThrottleStatus), ]; } private static List GetSandiskLenovoHelenVenus(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.MinimumPECycles), Get(storage, SmartAttributeType.MaximumBadBlocksPerDie), Get(storage, SmartAttributeType.MaximumPECycles), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.GrownBadBlocks), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AveragePECycles), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.UsedReservedBlockCount), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.EndToEndError), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.CommandTimeout), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.AvailableReservedSpace), Get(storage, SmartAttributeType.MediaWearoutIndicator), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.ThrottleStatistics), Get(storage, SmartAttributeType.ThermalThrottleStatus), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetSandiskCloud(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.RetiredBlockCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.WriteAmplificationMultipliedBy100), Get(storage, SmartAttributeType.WriteAmplificationFactor), Get(storage, SmartAttributeType.ReserveBlockCount), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.CleanShutdownCount), Get(storage, SmartAttributeType.UnsafeShutdownCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.ReallocatedNANDBlocks), Get(storage, SmartAttributeType.PercentOfTotalEraseCount), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.CapacitorHealth), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.ThermalThrottleStatus), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.SPITestsRemaining), ]; } private static List GetSiliconMotionCVC(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.ReallocatedSectorsCount), Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SLCCache), Get(storage, SmartAttributeType.GrownBadBlocks), Get(storage, SmartAttributeType.ProgramFailCount), Get(storage, SmartAttributeType.EraseFailCount), Get(storage, SmartAttributeType.AverageEraseCount), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.ProgramFailCountWorstCase), Get(storage, SmartAttributeType.SATADownshiftCount), Get(storage, SmartAttributeType.EndToEndError), Get(storage, SmartAttributeType.UncorrectableErrors), Get(storage, SmartAttributeType.MaximumEraseCount), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.MinimumEraseCount), Get(storage, SmartAttributeType.ReadErrorRate), Get(storage, SmartAttributeType.OfflineUncorrectableErrors), Get(storage, SmartAttributeType.CRCErrorCount), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.NandDataWritten), Get(storage, SmartAttributeType.HostDataWritten), Get(storage, SmartAttributeType.HostDataRead), Get(storage, SmartAttributeType.RAIDEventCount), Get(storage, SmartAttributeType.RAIDUncorrectableCount), Get(storage, SmartAttributeType.SSDProtectMode), Get(storage, SmartAttributeType.ReadErrorRetryRate), Get(storage, SmartAttributeType.NandDataWritten), ]; } private static List GetAdataIndustrial(DiskInfoToolkit.Storage storage) { return [ Get(storage, SmartAttributeType.PowerOnHours), Get(storage, SmartAttributeType.PowerCycleCount), Get(storage, SmartAttributeType.SSDProtectMode), Get(storage, SmartAttributeType.SATAPhysicalErrorCount), Get(storage, SmartAttributeType.BadBlockCount), Get(storage, SmartAttributeType.TotalEraseCount), Get(storage, SmartAttributeType.BadClusterTableCount), Get(storage, SmartAttributeType.SpareBlocksAvailable), Get(storage, SmartAttributeType.UnexpectedPowerLoss), Get(storage, SmartAttributeType.Temperature), Get(storage, SmartAttributeType.RemainingLife), Get(storage, SmartAttributeType.FlashWriteSectorCount), Get(storage, SmartAttributeType.FlashReadSectorCount), Get(storage, SmartAttributeType.TotalCountWriteSectors), Get(storage, SmartAttributeType.TotalCountReadSectors), ]; } private static SmartAttribute Get(DiskInfoToolkit.Storage storage, SmartAttributeType smartAttributeType, SensorType? sensorType = null, int sensorChannel = 0, string sensorName = null) { var attr = storage.Smart.SmartAttributes.Find(sa => sa.Info.Type == smartAttributeType); if (attr == null) { return null; } else { return new(attr, sensorType, sensorChannel, sensorName); } } }