//----------------------------------------------------------------------------
// Datentypen und Definitionen der SMART-Schnittstelle


// Alignment fr Sturkturen umstellen, 
// damit die Strukturgre jener des Treibers entspricht
#pragma pack(push,1)

// Funktionscode fr DeviceIOControl

const unsigned int SMART_RECEIVE_DRIVE_DATA = 0x0007C088;
                                              
// Registersatz des ATA-Hostadapter

typedef struct
  {
    BYTE bFeaturesReg;
    BYTE bSectorCountReg;
    BYTE bSectorNumberReg;
    BYTE bCylLowReg;
    BYTE bCylHighReg;
    BYTE bDriveHeadReg;
    BYTE bCommandReg;
    BYTE bReserved;
  } IDERegisters;

// Struktur zur Datenbergabe 

typedef struct
  {
    DWORD        cBufferSize;
    IDERegisters irDriveRegs;
    BYTE         bDriveNumber;
    BYTE         bReserved[3];
    DWORD        dwReserved[4];
    BYTE         bBuffer[1];
  } ATAInParam;

// Status- und Fehlermeldungen des SMART-Treibers

typedef struct
  {
    BYTE  bDriverError;
    BYTE  bIDEStatus;
    BYTE  bReserved[2];
    DWORD dwReserved[2];
  } DriverStat;

// Struktur der zurckgebenen Daten

typedef struct
  {
    DWORD      cBufferSize;
    DriverStat DriverStatus;
    BYTE       bBuffer[1];
  } ATAOutParam;


// Alignment zurckstellen 
#pragma pack(pop)

//----------------------------------------------------------------------------