Overview

在windows下可以透過

DeviceIoControl

對Device下ata cmd

可以使用win32提供的一組struct

ATA_PASS_THROUGH_DIRECT

直接傳遞指令格式

ATA Command目前區分28 bits and 48 bits

在這邊我介紹28bits的格式

此結構有許多設定其中28bits一定要設這組結構中的陣列,將ata cmd放進去:CurrentTaskFile

ATARegs_DirectRead.CurrentTaskFile[0] = cmd[0]; // feature reg
ATARegs_DirectRead.CurrentTaskFile[1] = cmd[1]; // sector cuont reg
ATARegs_DirectRead.CurrentTaskFile[2] = cmd[2]; // sector number reg
ATARegs_DirectRead.CurrentTaskFile[3] = cmd[3]; // cylinder low reg
ATARegs_DirectRead.CurrentTaskFile[4] = cmd[4]; // cylinder high reg
ATARegs_DirectRead.CurrentTaskFile[5] = cmd[5]; // Disk Head reg
ATARegs_DirectRead.CurrentTaskFile[6] = cmd[6]; // Cmd reg.

一般應用解析順序如下:

  1. 接收cmd[6]:ata cmd or vendor cmd
  2. 判斷cmd[0]:features, 當指令判斷正確, 可以提供許多組分類功能
  3. cmd[2][3][4]:LBA位置, 可以指定讀取或寫入位置, 如果有需要的話

也就是說, 0x00預設為 256 logical sectors