2007年11月15日

UDF1.02 3-1 Anchor Volume Descriptor Pointer

UDF ボリュームシステムの読み取りは、 Anchor Volume Descriptor Pointer (開始点) (AVDP) から始めます。

UDF1.02 では、AVDP は次の 3 箇所の内 2 箇所に記述します。
・256セクタ
・最終セクタ - 256セクタ
・最終セクタ
ただ、DVD プレーヤーは 256 セクタしか参照しません。 DVD-ROM は 256セクタに必ず記入します。


Anchor Volume Descriptor Pointer format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=2
16〜238struct extent_adMain Volume Descriptor Sequence Extent主ボリューム記述子列の場所
24〜318struct extent_adReserve Volume Descriptor Sequence Extent予備ボリューム記述子列の場所
32〜511480-Reserved=0

AVDP にはボリューム記述子列(主と予備)の場所が記されています。

posted by 七癖 at 10:19| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年11月13日

UDF1.02 2-5 NSR Descriptor

NSR Descriptor (NSR記述子) は、 このデータブロックのフォーマットが ECMA167 に沿っていることを示します。
NSR Descriptor には、ECMA167 のバージョンによって NSR02 と NSR03 があります。 UDF1.02 の基である ECMA-167/2 では NSR02 であり、 ECMA-167/3 では NSR03 です。 どちらか片方が一回だけ BEA と TEA の間に記録されます。

NSR Descriptor format
BP大きさ名称内容
01unsigned charStructure Type=0
1〜55char[5]Standard Identifier="NSR02"
61unsigned charStructure Version=1
71unsigned charReserved=0
8〜20472040-Structure Data=0


BP大きさ名称内容
01unsigned charStructure Type=0
1〜55char[5]Standard Identifier="NSR03"
61unsigned charStructure Version=1
71unsigned charReserved=0
8〜20472040-Structure Data=0


NSR03 は、UDF2.00 以降で使います。
なお、NSR は、"Non-Sequential Recording" の略だと思われます。

posted by 七癖 at 10:08| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年11月11日

UDF1.02 2-4 Boot Descriptor

Boot Descriptor (ブート記述子) は、使ったことが無いので、表のみ掲げておきます。

Boot Descriptor format
BP大きさ名称内容
01unsigned charStructure Type=0
1〜55char[5]Standard Identifier="BOOT2"
61unsigned charStructure Version=1
71unsigned charReserved=0
8〜3932regidArchitecture Type形式
40〜7132regidBoot Identifier起動ID
72〜754unsigned longBoot Extent Location起動情報のアドレス
76〜794unsigned longBoot Extent Length起動情報の大きさ[bytes]
80〜878unsigned int64Load Addressブート情報をコピーするメモリアドレス
88〜958unsigned int64Start Address制御を開始するメモリアドレス
96〜10712timestampDescriptor Creation Date and Time記録日時
108〜1092unsigned shortFlagsフラグ
bit 0 : 0なら有効 1なら無効
110〜14232unsigned char[32]Reserved=0
142〜20471906unsigned char[1906]Boot Use予約

posted by 七癖 at 09:40| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年11月09日

UDF1.02 2-3 Terminating Extended Area Descriptor

Terminating Extended Area Descriptor (拡張領域終端記述子) (TEA) は、 ECMA167 用のボリューム認識列の終端を示します。

Terminating Extended Area Descriptor format
BP大きさ名称内容
01unsigned charStructure Type=0
1〜55char[5]Standard Identifier="TEA01"
61unsigned charStructure Version=1
7〜20472041-Structure Data=0


posted by 七癖 at 10:19| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年11月07日

UDF1.02 2-2 Beginning Extended Area Descriptor

Beginning Extended Area Descriptor (拡張領域先頭記述子) (BEA) は、 ECMA167 用のボリューム認識列の先頭を示します。

Beginning Extended Area Descriptor format
BP大きさ名称内容
01unsigned charStructure Type=0
1〜55char[5]Standard Identifier="BEA01"
61unsigned charStructure Version=1
7〜20472041-Structure Data=0


posted by 七癖 at 09:24| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年11月05日

UDF1.02 2-1 ボリューム認識列

ボリューム認識列 (Volume Recognition Sequence) は、 いくつかのボリューム構造記述子で構成され、 ボリュームのフォーマットの種類や そのボリュームからコンピュータを起動するための場所を示します。 ここは ISO9660 のボリューム記述子群に相当し、 各ボリューム構造記述子の先頭 7 バイトは、ISO9660 のボリューム記述子と同じ構造です。

ボリューム認識列は、そのボリュームの先頭から 32767 バイトより後の最初のセクタから始まり、 数セクタ続きます。 1セクタが 2048 バイトならば、16セクタ目から始まります。

記述子はセクタの先頭から記述し、セクタ内の余ったバイトは 0 で埋めます。

各ボリューム構造記述子は、次のようになっています。

Generic Volume Structure Descriptor format
BP大きさ名称内容
01unsigned charStructure Typeボリューム記述子の種類
1〜55char[5]Standard Identifier規格識別子
61unsigned charStructure Versionバージョン
7〜20472041-Structure Data記述子の内容


ECMA167 では、次の種類を使います。

Volume Structure Descriptor interpretation
規格識別子内容
"BEA01"拡張領域先頭記述子
"BOOT2"ブート記述子
"CD001"ISO9660 用
"CDW02" 
"NSR02"NSR記述子 ECMA-167/2
"NSR03"NSR記述子 ECMA-167/3
"TEA01"拡張領域終端記述子


読み取る際には、まず規格識別子を調べ、次にボリューム記述子の種類を読んで区別します。

記述子を記録する順序は、ISO9660 など CD-ROM 用のシステムがある場合、 それらを先に記録します。 ISO9660 では、最低 PVD + TD の2セクタ、 joliet を含む場合 PVD + SVD + TD の 3 セクタを使います。
その後、UDF のボリューム認識列を記述していきます。 先頭に BEA01 (拡張領域先頭記述子) を記録し、 中身である NSR02 や NSR03、BOOT2 を記録した後、 TEA01 (拡張領域終端記述子) を最後に記録して終わります。

よくある UDF Bridge DVD-ROM の一例を挙げておきます。
sectorStandard IdentifierStructure Type備考
16CD0011ISO9660 PVD
17CD0012joliet SVD
18CD001255ISO9660 TD
19BEA010拡張領域の先頭
20NSR020ECMA-167/2 が使われていることを示す
21TEA010拡張領域の終端


ディスクにアクセスする時は、 まず、このボリューム認識列を調べます。 そこに「CD001」があれば、ISO9660 (あるいは joliet) フォーマット、 「NSR02」か「NSR03」があれば、ECMA167 フォーマットのディスクと解釈して 読み取りを開始します。

posted by 七癖 at 10:13| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年10月27日

UDF1.02 1-20 ext_ad

Allocation Descriptor の最後の一つ ext_ad は UDF1.02 では使われませんが、一応書いておきます。

ext_ad (Extended Allocation Descriptor) は位置の他、 3 種類の大きさを記述します。

ext_ad format
RBP大きさ名称内容
0〜34unsigned longExtent Length下記参照
4〜74unsigned longRecorded Length記録長
8〜114unsigned longInformation Length情報長
12〜176struct lb_addrExtent Locationパーティション番号とその先頭からの位置
18〜192unsigned char[2]Implementation Use予約


Extent Length は次のとおりです (short_ad と同じです)。

Extent interpretation
bit内容
0〜29length of the extent (unsigned、[bytes]、特に規定が無ければ論理ブロック長の整数倍)
30〜31 0: 場所が用意され、記録された
1: 場所が用意されたが、記録されていない
2: 場所は用意されず、記録もされてい
3: 配置記述子列の次の場所を意味する



Recorded Length は 30 ビットの正数で、最上位 2 ビットは 00 です。

Extent Length と Recorded Length と Information Length はそれぞれ違っていてもかまいません。

posted by 七癖 at 09:07| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年10月25日

UDF1.02 1-19 long_ad

long_ad (Long Allocation Descriptor) は、それが記載されている論理ボリューム内における パーティションと位置と大きさを記述します。

long_ad format
RBP大きさ名称内容
0〜34unsigned longExtent Length下記参照
4〜96struct lb_addrExtent Locationパーティション番号とその先頭からの位置
10〜156unsigned char[6]Implementation Use予約


Extent Length は次のとおりです (short_ad と同じです)。

Extent interpretation
bit内容
0〜29length of the extent (unsigned、[bytes]、特に規定が無ければ論理ブロック長の整数倍)
30〜31 0: 場所が用意され、記録された
1: 場所が用意されたが、記録されていない
2: 場所は用意されず、記録もされてい
3: 配置記述子列の次の場所を意味する


UDF1.02 では、Implementation Use に次の ADImpUse を入れます。

ADImpUse format
RBP大きさ名称内容
0〜12unsigned shortFlagsフラグ
2〜54unsigned longUnique Id一意ID


Flags は次のとおりです。

long_ad Flag
bit内容
0Erased
=0:存在
=1:削除済
1〜15予約


short_ad と異なり、long_ad ではパーティション番号を合わせて記載するため、 複数のパーティションをもつ論理ボリュームや、 論理ボリュームの外から論理ボリュームに アクセスするときにで役に立ちます。

posted by 七癖 at 09:28| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年10月23日

UDF1.02 1-18 short_ad

Allocation Descriptor (配置記述子) は、 記述子やディレクトリ、ファイル本体の先頭位置と大きさを示します。
論理ボリュームで使われる配置記述子には、 short_ad、long_ad、ext_ad の3種類が用意されています。


short_ad (Short Allocation Descriptor) は、 それが記載されているパーティション内における 先頭位置と大きさを記述します。

short_ad format
RBP大きさ名称内容
0〜34unsigned longExtent Length下記参照
4〜74unsigned longExtent Positionパーティションの先頭からの位置 [LBN]


Extent Length は次のとおりです。

Extent interpretation
bit内容
0〜29length of the extent (unsigned、[bytes]、特に規定が無ければ論理ブロック長の整数倍)
30〜31 0: 場所が用意され、記録された
1: 場所が用意されたが、記録されていない
2: 場所は用意されず、記録もされてい
3: 配置記述子列の次の場所を意味する


Extent Length の length of the extent は 30 ビットしかないため、 230=1,073,741,824 バイトまでしか表記できません。 UDF1.02 では、さらに論理ブロックサイズを引いた大きさが最大です。

DVD-ROM では、shore_ad をディレクトリや(分割)ファイル本体を示すのに使われます。 このときの length of the extent は、実際のファイルのバイト数です。
1,073,739,776=0x3FFFF800 バイトを超えるファイルは、分割し、 2つ以上の short_ad を使って配列として記述します。 実際には一続きのファイルでも同様です。 最後の short_ad 以外は length of the extent を論理ブロックの整数倍にします。

posted by 七癖 at 10:28| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年10月21日

UDF1.02 1-17 lb_addr

lb_addr (Recorded address) は、ファイルシステム (論理ボリューム) で使われ、 それが所属するパーティションと、その先頭位置を記述します。

lb_addr format
RBP大きさ名称内容
0〜34unsigned longLogical Block Numberパーティションの先頭からの位置 [LBN]
4〜52unsigned shortPartition Reference Number(=0) パーティション番号

posted by 七癖 at 07:52| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする
×

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