Как узнать, какие стандарты ATA поддерживаются жестким диском?

Как получить стандарты ATA, поддерживаемые жестким диском? Я использую С++, WINAPI. Я не могу использовать WMI.

Я имею в виду эти стандарты ATA: http://www.quepublishing.com/articles/article.aspx?p=2028834&seqNum=2

Я уже использую эту структуру в своем проекте: https://msdn.microsoft.com/en-us/library/windows/hardware/ff559006(v=vs.85).aspx , но нет информации о поддерживаемых стандартах ATA.

Я ищу любое программное решение, я думаю, что если нужно, я могу записать в файл поддерживаемые стандарты на другом языке, а затем прочитать их на С++.


person Nikita    schedule 17.09.2016    source источник


Ответы (1)


Вы можете отправить ATA-команду 0xEC на жесткий диск и получить структуру IDENTIFY_DEVICE_DATA, содержащую информацию о вашем жестком диске. Требуется irb.h библиотека из WDK (Windows Driver Kit).

BOOL getAtaCompliance() { 
  DWORD dwBytes;
  BOOL  bResult;

  CONST UINT bufferSize = 512;
  CONST BYTE identifyDataCommandId =  0xEC;

  UCHAR identifyDataBuffer[bufferSize
        + sizeof(ATA_PASS_THROUGH_EX)] = { 0 };

  ATA_PASS_THROUGH_EX & PTE = *(ATA_PASS_THROUGH_EX *) identifyDataBuffer;
  PTE.Length = sizeof(PTE);
  PTE.TimeOutValue = 10;
  PTE.DataTransferLength = 512;
  PTE.DataBufferOffset = sizeof(ATA_PASS_THROUGH_EX);

  IDEREGS * ideRegs = (IDEREGS *) PTE.CurrentTaskFile;
  ideRegs->bCommandReg = identifyDataCommandId;
  ideRegs->bSectorCountReg = 1;

  PTE.AtaFlags = ATA_FLAGS_DATA_IN | ATA_FLAGS_DRDY_REQUIRED;

  bResult = DeviceIoControl(hDevice, IOCTL_ATA_PASS_THROUGH, &PTE,
                      sizeof(identifyDataBuffer), &PTE,
                      sizeof(identifyDataBuffer), &dwBytes, 0);

  if (bResult == FALSE) {
    std::cout << "Oops, something went wrong, error code: "
              << GetLastError() << std::endl;
    return bResult;
  }

  WORD *data = (WORD *)(identifyDataBuffer + sizeof(ATA_PASS_THROUGH_EX));

  int16_t ataSupportBits = data[80];

  return bResult;
}

ataSupportBits будет содержать 16 бит о поддерживаемых стандартах ATA. Из Информационные технологии — Приложение 8 AT — Набор команд ATA/ATAPI ( ATA8-ACS)

word #80, растровое изображение соответствия ATA/ATAPI

person johnbrovi    schedule 01.10.2016