6

IOKit を調べてDADiskCopyDescription列挙しましたが、どちらも USB ハード ドライブのシリアル番号を教えてくれませんでした。IOUSBDevice後者は、ハード ドライブのシリアル番号とは異なる USB シリアル番号を提供します。どうすればそれを取得できますか(シェル経由ではなく、c/c++で)?

4

1 に答える 1

5

基本的に質問しているのは、「USB経由でハードドライブと直接通信するにはどうすればよいですか?」ということです。

答えは: USB コントローラに依存します。すべてのコントローラがリクエストをサポートしているわけではありません。

次の条件が存在する必要があります。

  1. USB ブリッジは ATA パススルーをサポートする必要があります (ATA の場合)
  2. ホスト OS で SCSI がサポートされている必要があります。
  3. OS は SCSI パススルー API を提供する必要があります (Windows および Linux でははい、MacOS X ではいいえ)

別の要因が発生します。一部のコントローラーはドライブの製造元に依存しないパススルーをサポートしていますが、一部のコントローラーは制御しているハード ドライブに基づいて異なるコマンドをサポートしています。これは、接続されているドライブが PATA、SATA/SAS、または SCSI のいずれであるかによっても異なります。

上記の少なくとも 1 つをサポートするコントローラーの例には、Sunplus SPIF215/6、SPIF225/6 が含まれます。JMicron JM20329、JM20335-39; およびサイプレス CY7C68300B/C (AT2LP)、CY7C68310 (ISD-300LP)。

あなたにとってもっと嬉しい知らせがあればいいのに。

于 2013-06-02T18:43:04.677 に答える