>>141
推察どおりOS標準のファンクションコールではあるのですが、ドライバにこのATAコマンドをデバイスを投げてくれという形で投げてるはず。
USBもほぼ同様でUSB接続のストレージデバイスは大抵SCSIベースプロトコルです。
USB-ATA(IDE/SATA)のブリッジチップが相互変換を行うわけですが、大抵はSCSIデバイスとして種類と容量と名前とR/W辺りが出来れば最低ラインはクリアします。
そこに+αとして標準で求められないATAデバイスの詳細仕様読み出しやSMART読み出しの為のSCSI<>ATA変換機能を持っているか否か、
そして対応するための情報があるか否か、ひよひよさんが忙殺されてないかでCDIで対応できるか否かが決まります。(独自対応する場合も)
最初のUSB対応CDIではOS標準だが機器に直接SCSIコマンドを投げるファンクションコール(SCSI_PASS_THROUGH)を呼び出すようにしてます。(DIRECT無しでご迷惑をお掛けした模様)
InitioはSATと呼ばれるATAやSCSI規格を定める所で公開された規格を用いていたので対応出来ました。
Cypressも変換チップのサイトにATAコマンドをSCSIプロトコルでラップする方法と受信方法があったので比較的早期に対応出来ました。
他のチップの仕様を得る事が出来たのは不明ですが、すべてはひよひよさんの努力と身銭を切った賜物です。
# わたしも実は一部買ったりごにょごにょしたのですが、クリーンルームをしてくれそうな相方が見つかりませんでしたorz
# というか、Windows上で低レベル層へアクセスしようと思ったりアクセスする知識を豊富に持ったプログラマはほんと少ないと思います。
# 私は偶然、仕様書とMSDNを半分理解出来る程度のスキルと時間と実物が手元にあったからSAT対応出来ましたけど、
# 普段は下層レイヤなんぞと縁が無い人間です。少しATA仕様に理解が有りましたが。(HGST仕様書にはATA仕様が乗ってたり、ripper書くのに必要)

ATAコマンドベースのUSBストレージデバイスも過去極一部に存在したようです。(少なくとも規格上は)
その場合は何も考えずにATAコマンドを投げられるので対応は簡単なのですけどorz
古いBigDriveに対応してないPCでも(変換板さえOKなら)USB接続のHDDなら137GBの壁が存在しないのもSCSIプロトコルベースな為だったりします。
# 最初のUSB対応ソースコードを押し付けた後消息眩ましててごめんなさい。