2024年4月11日发(作者:)

} Capabilities;

USHORT ObsoleteWords51[2];

USHORT TranslationFieldsValid :3;

USHORT Reserved3 :13;

USHORT NumberOfCurrentCylinders;

USHORT NumberOfCurrentHeads;

USHORT CurrentSectorsPerTrack;

ULONG CurrentSectorCapacity;

UCHAR CurrentMultiSectorSetting;

UCHAR MultiSectorSettingValid :1;

UCHAR ReservedByte59 :7;

ULONG UserAddressableSectors;

USHORT ObsoleteWord62;

USHORT MultiWordDMASupport :8;

USHORT MultiWordDMAActive :8;

USHORT AdvancedPIOModes :8;

USHORT ReservedByte64 :8;

USHORT MinimumMWXferCycleTime;

USHORT RecommendedMWXferCycleTime;

USHORT MinimumPIOCycleTime;

USHORT MinimumPIOCycleTimeIORDY;

USHORT ReservedWords69[6];

USHORT QueueDepth :5;

USHORT ReservedWord75 :11;

USHORT ReservedWords76[4];

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 Resrved3 :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 Reserved4 :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 :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 Reserved4 :2;

} CommandSetActive;

USHORT UltraDMASupport :8;

USHORT UltraDMAActive :8;

USHORT ReservedWord89[4];

USHORT HardwareResetResult;

USHORT CurrentAcousticValue :8;

USHORT RecommendedAcousticValue :8;

USHORT ReservedWord95[5];

ULONG Max48BitLBA[2];

USHORT StreamingTransferTime;

USHORT ReservedWord105;

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 WriteReadVerifySupported :1;

USHORT Reserved01 :11;

USHORT Reserved1 :2;

} CommandSetSupportExt;

struct {

USHORT ReservedForDrqTechnicalReport :1;

USHORT WriteReadVerifyEnabled :1;

USHORT Reserved01 :11;

USHORT Reserved1 :2;

} CommandSetActiveExt;

USHORT ReservedForExpandedSupportandActive[6];

USHORT MsnSupport :2;

USHORT ReservedWord1274 :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 MaximumCurrentInMA2 :12;

USHORT CfaPowerMode1Disabled :1;

USHORT CfaPowerMode1Required :1;

USHORT Reserved0 :1;

USHORT Word160Supported :1;

} CfaPowerModel;

USHORT ReservedForCfaWord161[8];

struct {

USHORT SupportsTrim :1;

USHORT Reserved0 :15;

} DataSetManagementFeature;

USHORT ReservedForCfaWord170[6];

USHORT CurrentMediaSerialNumber[30];

USHORT ReservedWord206;

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 ReservedWord220[35];

USHORT Signature :8;

USHORT CheckSum :8;

} IDENTIFY_DEVICE_DATA, *PIDENTIFY_DEVICE_DATA;

static void dump_buffer(const char* title, const unsigned char* buffer, int len)

{

int i = 0;

int j;

printf ("n-- %s --n", title);

if (len > 0)

{

printf ("%8.8s ", " ");

for (j = 0; j < 16; ++j)

{

printf (" %2X", j);

}

printf (" ");

for (j = 0; j < 16; ++j)

{

printf ("%1X", j);

}

printf ("n");

}

while (i < len)

{

printf("%08x ", i);

for (j = 0; j < 16; ++j)

{

if ((i + j) < len)

printf (" %02x", (int) buffer[i +j]);

else

printf (" ");

}

printf (" ");

for (j = 0; j < 16; ++j)

{

if ((i + j) < len)

printf ("%c", isprint (buffer[i + j]) ?

buffer [i + j] : '.');

else

printf (" ");

}

printf ("n");

i += 16;

}

printf ("-- DONE --n");

}