|
|
|||||||||
|
|||||||||
|
|
DV 18 - CD-ROM の検出(更新日: 97 年 1 月 31 日)Q: 開発中のアプリケーションはハードディスクから実行しますが、特殊な CD-ROM がシステムにセットされている必要があります。ユーザによっては、ハードディスクのボリュームまたはフロッピーディスクがこの CD-ROM と同じ名前である可能性もあります。こうした状況をチェックするため、アプリケーションでは、特定の名前のファイルを含む特別な名前のロックされたボリュームを検索しますが、このプロセスを簡略化したいと考えています。マウントされているボリュームまたは SCSI アドレスが CD-ROM であるかどうかを判断するための最適な方法を教えてください。
A: これまで、Macintosh 上のボリュームが CD-ROM であるかどうかを判断する簡便な方法は存在しませんでした。このため、デベロッパはさまざまな方法を試みてきました。
しかし、.AppleCD (および .AppleCD 互換) ドライバのバージョン 5.2.x 以降、CD-ROM ドライバでは、DriverGestalt csCode がサポートされました。 これらのドライバを使って、メディアが挿入されている CD-ROM ドライブを検出するため、ドライブテーブルをスキャンし、ドライバに対して DriverGestalt コマンドを発行して、デバイスタイプを確定することができます。次のコードは、この方法を具体的に示しています。 #includeサンプル全体は、Macintosh Disk Driver Gestalt Sample というタイトルで DTS に用意されています。このサンプルプログラムの中では、デバイスのクエリーを行う方法が具体的に示されています。 マウントされていないドライブを検出するには、必要に応じて、SCSI または ATA マネージャのいずれかを使用する必要があります。"ATA demo" という DTS コードサンプルでは、ATA バスをスキャンし、使用可能なデバイスを特定する方法が具体的に示されています。 また、バージョン 5.2.X 以降の .AppleCD ドライバには、CD-ROM デバイスのタイプに関する情報を返す、ドライバのステータスを取得する呼び出しが用意されています。 次のパラメータを使って、.AppleCD ドライバのステータスを取得します。
csCode = 120
csParam[ 0 -1] will return a DeviceIdent of the form
typedef struct DeviceIdent{
uchar busType; // SCSI - 0 ATAPI = 7
uchar bus; // SCSI - Bus# ATAPI = 0
uchar targetID; // SCSI - Target SCSI ID ATAPI = Bus #
uchar partition ; // SCSI - LUN ATAPI = 0
}
注意すべき点: .AppleCD ドライバの古いバージョンを使用している場合、上の呼び出しは正常に動作しません。この場合は、前述の方法のいずれかを試みるか、ユーザに CD-ROM ドライバのアップデートを要求する必要があります。
Updated by Vinnie Moscaritolodevsupport@apple.com [ Technical Q&A's : Devices : DV18 ] |
|