#pragma once #include // Lifted from Irb.h #pragma pack(push, 1) typedef struct _IDENTIFY_DEVICE_DATA { struct { USHORT Reserved1 : 1; USHORT Retired3 : 1; USHORT ResponseIncomplete : 1; USHORT Retired2 : 3; USHORT FixedDevice : 1; USHORT RemovableMedia : 1; USHORT Retired1 : 7; USHORT DeviceType : 1; } GeneralConfiguration; USHORT NumCylinders; USHORT SpecificConfiguration; USHORT NumHeads; USHORT Retired1[2]; USHORT NumSectorsPerTrack; USHORT VendorUnique1[3]; UCHAR SerialNumber[20]; USHORT Retired2[2]; USHORT Obsolete1; UCHAR FirmwareRevision[8]; UCHAR ModelNumber[40]; UCHAR MaximumBlockTransfer; UCHAR VendorUnique2; struct { USHORT FeatureSupported : 1; USHORT Reserved : 15; } TrustedComputing; struct { UCHAR CurrentLongPhysicalSectorAlignment : 2; UCHAR ReservedByte49 : 6; UCHAR DmaSupported : 1; UCHAR LbaSupported : 1; UCHAR IordyDisable : 1; UCHAR IordySupported : 1; UCHAR Reserved1 : 1; UCHAR StandybyTimerSupport : 1; UCHAR Reserved2 : 2; USHORT ReservedWord50; } Capabilities; USHORT ObsoleteWords51[2]; USHORT TranslationFieldsValid : 3; USHORT Reserved3 : 5; USHORT FreeFallControlSensitivity : 8; USHORT NumberOfCurrentCylinders; USHORT NumberOfCurrentHeads; USHORT CurrentSectorsPerTrack; ULONG CurrentSectorCapacity; UCHAR CurrentMultiSectorSetting; UCHAR MultiSectorSettingValid : 1; UCHAR ReservedByte59 : 3; UCHAR SanitizeFeatureSupported : 1; UCHAR CryptoScrambleExtCommandSupported : 1; UCHAR OverwriteExtCommandSupported : 1; UCHAR BlockEraseExtCommandSupported : 1; ULONG UserAddressableSectors; USHORT ObsoleteWord62; USHORT MultiWordDMASupport : 8; USHORT MultiWordDMAActive : 8; USHORT AdvancedPIOModes : 8; USHORT ReservedByte64 : 8; USHORT MinimumMWXferCycleTime; USHORT RecommendedMWXferCycleTime; USHORT MinimumPIOCycleTime; USHORT MinimumPIOCycleTimeIORDY; struct { USHORT ZonedCapabilities : 2; USHORT NonVolatileWriteCache : 1; USHORT ExtendedUserAddressableSectorsSupported : 1; USHORT DeviceEncryptsAllUserData : 1; USHORT ReadZeroAfterTrimSupported : 1; USHORT Optional28BitCommandsSupported : 1; USHORT IEEE1667 : 1; USHORT DownloadMicrocodeDmaSupported : 1; USHORT SetMaxSetPasswordUnlockDmaSupported : 1; USHORT WriteBufferDmaSupported : 1; USHORT ReadBufferDmaSupported : 1; USHORT DeviceConfigIdentifySetDmaSupported : 1; USHORT LPSAERCSupported : 1; USHORT DeterministicReadAfterTrimSupported : 1; USHORT CFastSpecSupported : 1; } AdditionalSupported; USHORT ReservedWords70[5]; USHORT QueueDepth : 5; USHORT ReservedWord75 : 11; struct { USHORT Reserved0 : 1; USHORT SataGen1 : 1; USHORT SataGen2 : 1; USHORT SataGen3 : 1; USHORT Reserved1 : 4; USHORT NCQ : 1; USHORT HIPM : 1; USHORT PhyEvents : 1; USHORT NcqUnload : 1; USHORT NcqPriority : 1; USHORT HostAutoPS : 1; USHORT DeviceAutoPS : 1; USHORT ReadLogDMA : 1; USHORT Reserved2 : 1; USHORT CurrentSpeed : 3; USHORT NcqStreaming : 1; USHORT NcqQueueMgmt : 1; USHORT NcqReceiveSend : 1; USHORT DEVSLPtoReducedPwrState : 1; USHORT Reserved3 : 8; } SerialAtaCapabilities; struct { USHORT Reserved0 : 1; USHORT NonZeroOffsets : 1; USHORT DmaSetupAutoActivate : 1; USHORT DIPM : 1; USHORT InOrderData : 1; USHORT HardwareFeatureControl : 1; USHORT SoftwareSettingsPreservation : 1; USHORT NCQAutosense : 1; USHORT DEVSLP : 1; USHORT HybridInformation : 1; USHORT Reserved1 : 6; } SerialAtaFeaturesSupported; struct { USHORT Reserved0 : 1; USHORT NonZeroOffsets : 1; USHORT DmaSetupAutoActivate : 1; USHORT DIPM : 1; USHORT InOrderData : 1; USHORT HardwareFeatureControl : 1; USHORT SoftwareSettingsPreservation : 1; USHORT DeviceAutoPS : 1; USHORT DEVSLP : 1; USHORT HybridInformation : 1; USHORT Reserved1 : 6; } SerialAtaFeaturesEnabled; USHORT MajorRevision; USHORT MinorRevision; struct { USHORT SmartCommands : 1; USHORT SecurityMode : 1; USHORT RemovableMediaFeature : 1; USHORT PowerManagement : 1; USHORT Reserved1 : 1; USHORT WriteCache : 1; USHORT LookAhead : 1; USHORT ReleaseInterrupt : 1; USHORT ServiceInterrupt : 1; USHORT DeviceReset : 1; USHORT HostProtectedArea : 1; USHORT Obsolete1 : 1; USHORT WriteBuffer : 1; USHORT ReadBuffer : 1; USHORT Nop : 1; USHORT Obsolete2 : 1; USHORT DownloadMicrocode : 1; USHORT DmaQueued : 1; USHORT Cfa : 1; USHORT AdvancedPm : 1; USHORT Msn : 1; USHORT PowerUpInStandby : 1; USHORT ManualPowerUp : 1; USHORT Reserved2 : 1; USHORT SetMax : 1; USHORT Acoustics : 1; USHORT BigLba : 1; USHORT DeviceConfigOverlay : 1; USHORT FlushCache : 1; USHORT FlushCacheExt : 1; USHORT WordValid83 : 2; USHORT SmartErrorLog : 1; USHORT SmartSelfTest : 1; USHORT MediaSerialNumber : 1; USHORT MediaCardPassThrough : 1; USHORT StreamingFeature : 1; USHORT GpLogging : 1; USHORT WriteFua : 1; USHORT WriteQueuedFua : 1; USHORT WWN64Bit : 1; USHORT URGReadStream : 1; USHORT URGWriteStream : 1; USHORT ReservedForTechReport : 2; USHORT IdleWithUnloadFeature : 1; USHORT WordValid : 2; } CommandSetSupport; struct { USHORT SmartCommands : 1; USHORT SecurityMode : 1; USHORT RemovableMediaFeature : 1; USHORT PowerManagement : 1; USHORT Reserved1 : 1; USHORT WriteCache : 1; USHORT LookAhead : 1; USHORT ReleaseInterrupt : 1; USHORT ServiceInterrupt : 1; USHORT DeviceReset : 1; USHORT HostProtectedArea : 1; USHORT Obsolete1 : 1; USHORT WriteBuffer : 1; USHORT ReadBuffer : 1; USHORT Nop : 1; USHORT Obsolete2 : 1; USHORT DownloadMicrocode : 1; USHORT DmaQueued : 1; USHORT Cfa : 1; USHORT AdvancedPm : 1; USHORT Msn : 1; USHORT PowerUpInStandby : 1; USHORT ManualPowerUp : 1; USHORT Reserved2 : 1; USHORT SetMax : 1; USHORT Acoustics : 1; USHORT BigLba : 1; USHORT DeviceConfigOverlay : 1; USHORT FlushCache : 1; USHORT FlushCacheExt : 1; USHORT Resrved3 : 1; USHORT Words119_120Valid : 1; USHORT SmartErrorLog : 1; USHORT SmartSelfTest : 1; USHORT MediaSerialNumber : 1; USHORT MediaCardPassThrough : 1; USHORT StreamingFeature : 1; USHORT GpLogging : 1; USHORT WriteFua : 1; USHORT WriteQueuedFua : 1; USHORT WWN64Bit : 1; USHORT URGReadStream : 1; USHORT URGWriteStream : 1; USHORT ReservedForTechReport : 2; USHORT IdleWithUnloadFeature : 1; USHORT Reserved4 : 2; } CommandSetActive; USHORT UltraDMASupport : 8; USHORT UltraDMAActive : 8; struct { USHORT TimeRequired : 15; USHORT ExtendedTimeReported : 1; } NormalSecurityEraseUnit; struct { USHORT TimeRequired : 15; USHORT ExtendedTimeReported : 1; } EnhancedSecurityEraseUnit; USHORT CurrentAPMLevel : 8; USHORT ReservedWord91 : 8; USHORT MasterPasswordID; USHORT HardwareResetResult; USHORT CurrentAcousticValue : 8; USHORT RecommendedAcousticValue : 8; USHORT StreamMinRequestSize; USHORT StreamingTransferTimeDMA; USHORT StreamingAccessLatencyDMAPIO; ULONG StreamingPerfGranularity; ULONG Max48BitLBA[2]; USHORT StreamingTransferTime; USHORT DsmCap; struct { USHORT LogicalSectorsPerPhysicalSector : 4; USHORT Reserved0 : 8; USHORT LogicalSectorLongerThan256Words : 1; USHORT MultipleLogicalSectorsPerPhysicalSector : 1; USHORT Reserved1 : 2; } PhysicalLogicalSectorSize; USHORT InterSeekDelay; USHORT WorldWideName[4]; USHORT ReservedForWorldWideName128[4]; USHORT ReservedForTlcTechnicalReport; USHORT WordsPerLogicalSector[2]; struct { USHORT ReservedForDrqTechnicalReport : 1; USHORT WriteReadVerify : 1; USHORT WriteUncorrectableExt : 1; USHORT ReadWriteLogDmaExt : 1; USHORT DownloadMicrocodeMode3 : 1; USHORT FreefallControl : 1; USHORT SenseDataReporting : 1; USHORT ExtendedPowerConditions : 1; USHORT Reserved0 : 6; USHORT WordValid : 2; } CommandSetSupportExt; struct { USHORT ReservedForDrqTechnicalReport : 1; USHORT WriteReadVerify : 1; USHORT WriteUncorrectableExt : 1; USHORT ReadWriteLogDmaExt : 1; USHORT DownloadMicrocodeMode3 : 1; USHORT FreefallControl : 1; USHORT SenseDataReporting : 1; USHORT ExtendedPowerConditions : 1; USHORT Reserved0 : 6; USHORT Reserved1 : 2; } CommandSetActiveExt; USHORT ReservedForExpandedSupportandActive[6]; USHORT MsnSupport : 2; USHORT ReservedWord127 : 14; struct { USHORT SecuritySupported : 1; USHORT SecurityEnabled : 1; USHORT SecurityLocked : 1; USHORT SecurityFrozen : 1; USHORT SecurityCountExpired : 1; USHORT EnhancedSecurityEraseSupported : 1; USHORT Reserved0 : 2; USHORT SecurityLevel : 1; USHORT Reserved1 : 7; } SecurityStatus; USHORT ReservedWord129[31]; struct { USHORT MaximumCurrentInMA : 12; USHORT CfaPowerMode1Disabled : 1; USHORT CfaPowerMode1Required : 1; USHORT Reserved0 : 1; USHORT Word160Supported : 1; } CfaPowerMode1; USHORT ReservedForCfaWord161[7]; USHORT NominalFormFactor : 4; USHORT ReservedWord168 : 12; struct { USHORT SupportsTrim : 1; USHORT Reserved0 : 15; } DataSetManagementFeature; USHORT AdditionalProductID[4]; USHORT ReservedForCfaWord174[2]; USHORT CurrentMediaSerialNumber[30]; struct { USHORT Supported : 1; USHORT Reserved0 : 1; USHORT WriteSameSuported : 1; USHORT ErrorRecoveryControlSupported : 1; USHORT FeatureControlSuported : 1; USHORT DataTablesSuported : 1; USHORT Reserved1 : 6; USHORT VendorSpecific : 4; } SCTCommandTransport; USHORT ReservedWord207[2]; struct { USHORT AlignmentOfLogicalWithinPhysical : 14; USHORT Word209Supported : 1; USHORT Reserved0 : 1; } BlockAlignment; USHORT WriteReadVerifySectorCountMode3Only[2]; USHORT WriteReadVerifySectorCountMode2Only[2]; struct { USHORT NVCachePowerModeEnabled : 1; USHORT Reserved0 : 3; USHORT NVCacheFeatureSetEnabled : 1; USHORT Reserved1 : 3; USHORT NVCachePowerModeVersion : 4; USHORT NVCacheFeatureSetVersion : 4; } NVCacheCapabilities; USHORT NVCacheSizeLSW; USHORT NVCacheSizeMSW; USHORT NominalMediaRotationRate; USHORT ReservedWord218; struct { UCHAR NVCacheEstimatedTimeToSpinUpInSeconds; UCHAR Reserved; } NVCacheOptions; USHORT WriteReadVerifySectorCountMode : 8; USHORT ReservedWord220 : 8; USHORT ReservedWord221; struct { USHORT MajorVersion : 12; USHORT TransportType : 4; } TransportMajorVersion; USHORT TransportMinorVersion; USHORT ReservedWord224[6]; ULONG ExtendedNumberOfUserAddressableSectors[2]; USHORT MinBlocksPerDownloadMicrocodeMode03; USHORT MaxBlocksPerDownloadMicrocodeMode03; USHORT ReservedWord236[19]; USHORT Signature : 8; USHORT CheckSum : 8; } IDENTIFY_DEVICE_DATA, *PIDENTIFY_DEVICE_DATA; #pragma pack(pop)