プロが教える店舗&オフィスのセキュリティ対策術

IOCTL_CDROM_RAW_RAEDを使ってCDDAの生データを読み取るプログラムを作成しましたが、エラー87「パラメータが間違っています」が発生して、データを読み取ることができません。プログラムは以下の通りです。

#define RAW_SECTOR_SIZE 2352

rawReadInfo.DiskOffset.QuadPart = startSector * RAW_SECTOR_SIZE;
rawReadInfo.SectorCount = 1;
rawReadInfo.TrackMode = CDDA;

DeviceIoControl (hCD, IOCTL_CDROM_RAW_READ,
&rawReadInfo, sizeof(RAW_READ_INFO), buf, sizeof(rawReadInfo.SectorCount * RAW_SECTOR_SIZE),
&dwNotUsed, NULL);

海外のサイトで検索してみたところ、ときどきエラー87が出る、オーディオCD(CDDA)ではOKだが、CD-ROMではダメなどのQ&Aはあったのですが、オーディオCDが全く読めないという例はなかったので、基本的には動作するはずです。パラメータもそれらの例と同様の使い方しているつもりなのですが、何故か全く動作しません。TracKModeをYellowMode2にして、CD-ROMで試してみましたが、結果は同じでした。IOCTL_CDROM_READ_TOCを用いたTOCの読み取りは問題ないので、ファイルのオープンは正しくできていると思います。

IOCTL_CDROM_RAW_RAEDを使えている人がいたら、どこに問題がありそうか教えてください。

開発環境はBorland C++Builder6で、対象はウィンドウズ
・アプリです。

A 回答 (1件)

もう解決済みかもしれませんが、レスがないようなのでご参考まで。


...RAW_READ ではありませんが、私も
IOCTL_CDROM_GET_DRIVE_GEOMETRY がうまく行かず、聞きましたら
9x では、ASPI, NT(xp) では、SPTI で scsi へ access した方がいいのではないかと教えてもらいました。
私は、2048 bytes 読めればよいので、16 sector を (xpでは) ReadFile() で読むことで geometry を得て
今のところ済ませています。
http://www.t10.org/ftp/t10/drafts/sbc2/sbc2r15.pdf
に ANSI の説明書があります。
ご覧になったらどうでしょうか。
また、これに従うには、nt4ddk が必要ですが、
お持ちでないなら、microsoft から nt4ddk.zip を落としてきて
中から header file を取り出す必要があります。
cdda を扱っている例は、spticdda.lzh でぐぐると
ソースがあります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!