関心があってISO吸い出し挑戦したのですが、HFS/HFS+とのハイブリッドのディスク(Toastで言うカスタムハイブリッド)に対してReadFile()を使うと、ISOファイルシステムに含まれる領域しか読み出せないのですね。
# 正確にはドライブをCreateFile()で開いてReadFile()
SPTI経由でREAD(10)を発行すれば全て読み出せました。
やり方が悪いのか、IOCTL_CDROM_READ_TOC_EXがDVDだと通らないので、TOC取得の段階からSPTIに手を染めざるを得なかったりしますが。
WDKのapi/ntddscsi.hやddk/scsi.hに多少の定義がありますが、単純にunsigned charで定義したCDB配列、というよりSCSI_PASS_THROUGH構造体のCdbメンバに直接代入した方が楽なようです。
さてこのREAD(10)というコマンド、SCSIの初期から存在しているのだそうで。DVD規格が策定される10年以上前のコマンドで読み出せるのは、規格の素性と実装屋の頑張りと、最初の人と当時の人が思われて感動します。
さらにREAD(10)の原型になったREAD(6)コマンドは、SASIから取り込まれたものだそうで、悠久の時を感じる物語。SASIの最大40MBなんて容量は、今ではHDDのキャッシュです。
SASIはSCSIに移行し、そのSCSIも個人向けからは姿を消しましたが、コマンド体系はATAPIに流用され、こうして今も隣にいるのです。
# 正確にはドライブをCreateFile()で開いてReadFile()
SPTI経由でREAD(10)を発行すれば全て読み出せました。
やり方が悪いのか、IOCTL_CDROM_READ_TOC_EXがDVDだと通らないので、TOC取得の段階からSPTIに手を染めざるを得なかったりしますが。
WDKのapi/ntddscsi.hやddk/scsi.hに多少の定義がありますが、単純にunsigned charで定義したCDB配列、というよりSCSI_PASS_THROUGH構造体のCdbメンバに直接代入した方が楽なようです。
さてこのREAD(10)というコマンド、SCSIの初期から存在しているのだそうで。DVD規格が策定される10年以上前のコマンドで読み出せるのは、規格の素性と実装屋の頑張りと、最初の人と当時の人が思われて感動します。
さらにREAD(10)の原型になったREAD(6)コマンドは、SASIから取り込まれたものだそうで、悠久の時を感じる物語。SASIの最大40MBなんて容量は、今ではHDDのキャッシュです。
SASIはSCSIに移行し、そのSCSIも個人向けからは姿を消しましたが、コマンド体系はATAPIに流用され、こうして今も隣にいるのです。
コメントする