1 typedef struct _DRIVERSTATUS { 2 UCHAR bDriverError; 3 UCHAR bIDEError; 4 UCHAR bReserved[2]; 5 ULONG dwReserved[2]; 6 } DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS; 7 8 typedef struct _IDEREGS { 9 UCHAR bFeaturesReg; 10 UCHAR bSectorCountReg; 11 UCHAR bSectorNumberReg; 12 UCHAR bCylLowReg; 13 UCHAR bCylHighReg; 14 UCHAR bDriveHeadReg; 15 UCHAR bCommandReg; 16 UCHAR bReserved; 17 } IDEREGS, *PIDEREGS, *LPIDEREGS; 18 19 #define ATAPI_ID_CMD 0xA1 20 #define ID_CMD 0xEC 21 #define SMART_CMD 0xB0 22 23 #include <pshpack1.h> 24 typedef struct _SENDCMDOUTPARAMS { 25 ULONG cBufferSize; 26 DRIVERSTATUS DriverStatus; 27 UCHAR bBuffer[1]; 28 } SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS; 29 30 typedef struct _SENDCMDINPARAMS { 31 ULONG cBufferSize; 32 IDEREGS irDriveRegs; 33 UCHAR bDriveNumber; 34 UCHAR bReserved[3]; 35 ULONG dwReserved[4]; 36 UCHAR bBuffer[1]; 37 } SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS; 38 #include <poppack.h>