2007年05月29日

ISO9660 その7 PVD

Primary Volume Descriptor (PVD)(基本ボリューム記述子)の構造は、次のとおりです。

位置大きさ名称内容
01unsigned charVolume Descriptor Type=1
1〜55char[5]Standard Identifier="CD001"
61unsigned charVolume Descriptor Version大抵 =1
71unsigned charUnused Field=0
8〜3932char[32]System identifierシステム識別子 (a文字)
40〜7132char[32]Volume Identifierボリュームラベル (d文字)
72〜798char[8]Unused Field=0
80〜834unsigned longVolume Space Sizeボリュームの大きさ [Blocks]
84〜874unsigned long (M)Volume Space Size上に同じ
88〜11932char[32]Escape Sequences=0
120〜1212unsigned shortVolume Set Sizeボリューム集合の大きさ
122〜1232unsigned short (M)Volume Set Size上に同じ
124〜1252unsigned shortVolume Sequence Numberボリューム順序番号
126〜1272unsigned short (M)Volume Sequence Number上に同じ
128〜1292unsigned shortLogical Block Size論理ブロックの大きさ [BYTE] 大抵2048
130〜1312unsigned short (M)Logical Block Size上に同じ
132〜1354unsigned longPath Table Sizeパステーブルの大きさ [BYTE]
136〜1394unsigned long (M)Path Table Size上に同じ
140〜1434unsigned longLocation of Occurrence of Type L Path TableL形パステーブルの先頭位置 [LBN]
144〜1474unsigned longLocation of Optional Occurrence of Type L Path Table任意L形パステーブルの先頭位置 [LBN]
148〜1514unsigned long (M)Location of Occurrence of Type M Path TableM形パステーブルの先頭位置 [LBN]
152〜1554unsigned long (M)Location of Optional Occurrence of Type M Path Table任意M形パステーブルの先頭位置 [LBN]
156〜18934struct directory_recordDirectory Record for Root Directoryルートディレクトリのディレクトリレコード
190〜317128char[128]Volume Set Identifierボリューム集合識別子 (d文字)
318〜445128char[128]Publisher Identifier出版者識別子 (a文字)
446〜573128char[128]Data Preparer Identifierデータ編集者識別子 (a文字)
504〜701128char[128]Application Identifier応用システム識別子 (a文字)
702〜73837char[37]Copyright File Identifier著作権ファイル識別子 (d文字)
739〜77537char[37]Abstract File Identifier抄録ファイル識別子 (d文字)
776〜81237char[37]Bibliographic File Identifier書誌ファイル識別子 (d文字)
813〜82917struct datetime_lVolume Creation Date and Timeボリューム作成日時
830〜84617struct datetime_lVolume Modification Date and Timeボリューム更新日時
847〜86317struct datetime_lVolume Expiration Date and Timeボリューム失効日時
864〜88017struct datetime_lVolume Effective Date and Timeボリューム発効日時
8811unsigned charFile Structure Versionファイル構造版数 =1
8821unsigned charReserved=0
883〜1394512unsigned char[512]Application Use=0
1395〜2047653unsigned char[653]Reserved=0

文字を入れる System identifier、Volume Identifier、 Volume Set Identifier、Publisher Identifier、Data Preparer Identifier、Application Identifier、 Copyright File Identifier、Abstract File Identifier、Bibliographic File Identifier は全て先詰で、 余った部分には半角スペース (0x20) を入れます。 使わない場合は全て半角スペース (0x20) です。
ただ、中には最後のバイトが 0 であったり、余った部分が 0 であるディスクもあったような気がします。

Volume Set Size と Volume Sequence Number は、 例えばCD-ROM何枚組の百科辞典があるとき、 辞典のディスク枚数を Volume Set Size に、そのディスク番号を Volume Sequence Number に それぞれ入れます。ただ複数枚組のゲームでも使われているのを見たことは無く、 どちらも大抵 0x01 が入っています。

Path Table Size はパステーブルの先端から終端までのバイト数です。 パステーブルでは一つのパステーブルレコードが論理ブロックを跨いでも大丈夫です。

任意パステーブルを使わない場合 Location of Occurrence of Type L/M Path Table に 0 を入れます。

Directory Record for Root Directory には、 ルートディレクトリのディレクトリレコード(後述)が丸ごと入っています。 ディレクトリ識別子は 0x00 で、識別子の長さは 1 バイトです。

Volume Set Identifier には、例えばCD-ROM何枚組の百科辞典があるとき、 その百科辞典名を入れます。 ただ使われているのを見たことはあまり無く、 ボリュームラベルと同じか、半角スペース(0x20)で埋まっています。NOT_SET と書かれるソフトもあったような気がします。

Publisher Identifier、Data Preparer Identifier、Application Identifier が使われる場合で、 最初のバイトがアンダーバー (0x5F '_') のとき、ファイル名が入っており、 そのファイルがルートディレクトリに置かれています。 その場合、ディレクトリレコードのファイル記述子と同じ構造です。他、普通の文字列が入っている場合もあります。

Copyright File Identifier、Abstract File Identifier、Bibliographic File Identifier が使われるとき、 ファイル名が入っており、 そのファイルがルートディレクトリに置かれています。

作成、更新、失効、発行日時の構造(datetime_l)は、次のとおりです。

位置大きさ名称内容
04char[4]Year from 1 to 9999 西暦年 (d文字)
42char[2]Month of the year from 1 to 12 月 (d文字)
62char[2]Day of the month from 1 to 31 日 (d文字)
82char[2]Hour of the day from 0 to 23 時 (d文字)
102char[2]Minute of the hour from 0 to 59 分 (d文字)
122char[2]Second of the minute from 0 to 59 秒 (d文字)
142char[2]Hundredths of a second 1/100 秒 (d文字)
161charOffset from Greenwich Mean Time in number of 15 min intervals from -48 (West) to +52 (East) グリニッジ標準時からの偏差(15分単位)

年月日時分秒1/100秒は、数値ではなくd文字です。1月の場合'0x30''0x31'、12月の場合'0x31''0x32'となります。偏差のみ数値です。 偏差は、日本の場合 0x24=36=9×4 になります。
使われていない場合、年月日時分秒1/100秒にd文字の 0 (0x30) 、偏差に数値の 0x00 がそれぞれ入っています。 たまに全て数値の 0x00 になっているディスクもあります。
なお、西暦1万年問題があります。

Application Use や 最後の Reserved には、プロテクトがかけられたディスクなどで 何かしらの文字などが入っている場合があります。

posted by 七癖 at 09:49| Comment(2) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
現在ISOイメージファイルを取り扱うアプリを造ろうとチャレンジしている最中なのですが、こちらのブログを大いに参考にさせていただいております。ありがとうございます <(_ _)>
えと、こちらの表で PVD の 88〜119 バイトの名称が Escape Sequences となっていますが、正確には Unused Field ではないでしょうか。
おそらく SVD/EVD の表をコピペした後の修正漏れだと思いますが、、、念のため
Posted by kc at 2008年05月05日 18:31
最近何人もの方がISOファイルを扱うプログラムに挑戦しているようで、ちまちまと書いたかいがあったというものです。
皆様の成果に期待しています。
ご指摘の点については、そのとおりです。
修正は、まあいいですよね。
実際に記述する場合は、88〜119 バイト全てを 00 にセットしてください。
Posted by 七癖 at 2008年05月05日 19:22
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。