2008年01月11日

UDF1.02 4-5 ICB Tag

ICB (information control block) (情報制御ブロック) は、ファイルエントリのタグの次に置かれます。 階層構造など多くのパラメータは、UDF1.02 では値が決められています。

icbtag format
RBP大きさ名称内容
0〜34unsigned longPrior Recorded Number of Direct Entries=0
4〜52unsigned shortStrategy Type=4 ICB階層構造
6〜72unsigned char[2]Strategy Parameter={0,0}
8〜92unsigned shortMaximum Number of Entries(=1)
101unsigned charReserved=0
111unsigned charFile Type=4:ディレクトリ
=5:ファイル
12〜176struct lb_addrParent ICB Location={0,0}
18〜192unsigned shortFlagsフラグ


UDF1.02 の Strategy Type は 4 か 4096 です。4096 は追記媒体用です。

File Type はこれ以外もあります。

Parent ICB Location の使用は任意です。使わなければ 0 です。

Flags は次のとおりです。

Flags
bit意味多くの場合
0〜2Allocation descriptor
0:short_ad を使用
1:long_ad を使用
2:ext_ad を使用
3:ファイル/ディレクトリの本体
4〜7:予約
DVD-ROM では 0
3Directory sorted0
4Non-relocatable1
5Archive1
6Setuid0
7Setgid0
8Sticky0
9Contiguous1
10System0
11Transformed0
12Multi-versions0
13Stream0
14〜15予約0

多くの DVD-ROM では、0x0230 です。

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

2008年01月09日

UDF1.02 4-4 File Identifier Descriptor

File Identifier Descriptor (ファイル識別記述子) (FID) はディレクトリにあって、 ひとつのファイル/ディレクトリの、名前などの情報と、 そのファイルエントリの位置を記述します。

File Identifier Descriptor format
RBP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=257
16〜172unsigned shortFile Version Number=1 ファイルバージョン
181unsigned charFile Characteristicsファイル特性
191unsigned charLength of File Identifier (=L_FI)ファイル識別子の長さ [bytes]
20〜3516struct long_adICBそのファイル/ディレクトリの ICB (ファイルエントリ) の場所
36〜372unsigned shortLength of Implementation Use (=L_IU)(=0) Implementation Use の長さ [bytes]
38〜38+L_IU-1L_IUunsigned char[L_IU]Implementation Use下記参照
38+L_IU〜38+L_IU+L_FI-1L_FIchar[L_FI]File Identifierファイル名 (d-characters)
38+L_IU+L_FI〜0〜3unsigned char[0〜3]Padding=0 FIDの大きさを4の倍数にするため


File Version Number は 1〜32767 です。32768 〜 65535 は予約です。 UDF 1.02 では 1 です。

File Characteristics は次のとおりです。

File characteristics
bit内容詳細
0存在0=公開ファイル
1=隠しファイル
1ディレクトリ0=ファイル
1=ディレクトリ
2削除0=ファイルは存在する
1=ファイルは削除された
30=このディレクトリが持つファイルかディレクトリ
1=このディレクトリの親ディレクトリ
4Metadata0=ストリームにないか、ストリームにあってユーザーデータを持つ
1=ストリームは implementation use データを持つ
5〜7予約予約

削除ビットが 1 なら、ICB は全て 0 です。

Length of Implementation Use が 0 で、Implementation Use を記録しない場合が多いです。
UDF1.02 で 0 以外の場合は、32 と置いて、Implementation Use に reg_id を入れ、 ファイルを最後に変更した "*開発者名" を書きます。

親ディレクトリの場合、Length of File Identifier (=L_FI) は 0、 File Identifier は記録せず、Padding の長さは 2 です。

UDF1.02 では、ファイル名は最大 255 バイトです。

ファイル名には、OS 毎に異なる制限がありますが、 UDF の仕様書にあるサンプルソースコードを使って変換するのが楽です。

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

2008年01月07日

UDF1.02 4-3 ディレクトリ

ディレクトリは、単純に書くとそのディレクトリが持っているファイルやディレクトリの情報を記した記述子 (File Identifier Descriptor) (FID) をつなげて並べたものです。
ただ、個々の FID の大きさは、ファイル/ディレクトリの名前の長さによって異なります。

ディレクトリは親ディレクトリの FID を持っています。大抵先頭にあります。
ルートディレクトリの親ディレクトリはルートディレクトリ (それ自身) です。
ISO9660 と異なり、ルートを除いて自身のディレクトリを持っていません。
他の FID は、そのディレクトリに入っている子ディレクトリとファイルです。

ディレクトリは、親ディレクトリ+ディレクトリが持つ子ディレクトリとファイルの数だけ FID を持ちます。一つの FID が一つのファイルあるいはディレクトリに対応します。

FID にはそのファイル/ディレクトリのファイルエントリの場所が書かれています。ファイル/ディレクトリの本体の場所はファイルエントリに記されています。

ソートする場合は、まずファイル名で比較し、次にバージョンで比較しますが、無理にソートせずともかまいません。
posted by 七癖 at 09:45| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年12月25日

UDF1.02 4-2 File Set Descriptor

File Set Descriptor (ファイル集合記述子) はファイルセットの情報を記述します。 また、ルートディレクトリの場所を記しており、 ディレクトリ構造や個々のファイルを読み取る際の起点になります。

File Set Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=256
16〜2712struct timestampRecording Date and Time記録日時
28〜292unsigned shortInterchange Level=3 交換レベル
30〜312unsigned shortMaximum Interchange Level=3 最大交換レベル
32〜354unsigned longCharacter Set List=1 文字集合リスト
36〜394unsigned longMaximum Character Set List=1 最大文字集合リスト
40〜434unsigned longFile Set Number(=0) ファイルセット番号
44〜474unsigned longFile Set Descriptor Number(=0) FSD番号
48〜11164charspecLogical Volume Identifier Character Set={0,"OSTA Compressed Unicode"}
112〜239128char[128]Logical Volume Identifier論理ボリュームラベル (dstring)
240〜30364charspecFile Set Character Set={0,"OSTA Compressed Unicode"}
304〜33532char[32]File Set Identifierファイルセット名 (ボリュームラベルに同じ) (dstring)
336〜36732char[32]Copyright File Identifier著作権ファイル識別子 (dstring)
368〜39932char[32]Abstract File Identifier抄録ファイル識別子 (dstring)
400〜41516struct long_adRoot Directory ICBルートディレクトリ ICB の場所
416〜44732struct regidDomain Identifier={0, "*OSTA UDF Compliant", 2,1,3}
448〜46316struct long_adNext Extent=0 次の FSD の位置
464〜47916struct long_adSystem Stream Directory ICB=0 使用しない
480〜51132-Reserved=0


Interchange Level と Maximum Interchange Level はファイル文字数などの制限を定めます。 UDF1.02 では、どちらも 3 (制限なし) です。

UDF1.02 では、使用する文字セットは決められており、 Character Set List と Maximum Character Set List には 1 を入れます。

ファイルセットが一つの場合、 File Set Number には 0 を入れます。
FSD が一つの場合、 File Set Descriptor Number には 0 を入れます。

File Set Character Set で指定される文字セットは、 ファイルセット名だけでなくファイルセットが持つファイルやディレクトリの名前にも適用されます。

Copyright File Identifier と Abstract File Identifier を使わない場合は 0 で埋めます。

次の FSD が無ければ Next Extent は 0 です。

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

2007年12月21日

UDF1.02 4-1 ファイル集合記述子列

一つの論理ボリュームに一つの File Set Descriptor Sequence (ファイル集合記述子列) があります。

ファイル集合記述子列は
一つ以上の File Set Descriptor (FSD) と終端記述子 (TD) で構成されます。

ファイル集合記述子列の場所は、ボリューム記述子列内の Logical Volume Descriptor に記述されています。

列は複数の FSD を持っていてもかまいません。その場合 FSD にはそれぞれ異なるファイルセット番号と FSD 番号が記されています。ですが、実際には FSD は一つあれば十分であり、UDF1.02 では基本的に一つです。よって、多くの DVD-ROM では、ファイル集合記述子列の長さは FSD + TD の 2 論理ブロックです。
posted by 七癖 at 09:09| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年12月17日

UDF1.02 3-11 Logical Volume Integrity Descriptor

Logical Volume Integrity Descriptor (論理ボリューム保全記述子) は、 論理ボリュームの情報の内、よく変更される値を保持します。

Logical Volume Integrity format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=9
16〜2712struct timestampRecording Date and Time記録日時
28〜314unsigned longIntegrity Type=1
32〜398struct extent_adNext Integrity Extent=0 (指定せず)
40〜7132unsigned char[32]Logical Volume Contents Use次の一意ID
72〜754unsigned longNumber of Partitions (=N_P)(=1) パーティション数
76〜794unsigned longLength of Implementation Use (=L_IU)=46
80〜80 + N_P×4 -1N_P×4unsigned long[N_P]Free Space Table(=0) 各パーティションの空き領域の大きさ [LBs]
80 + N_P×4〜80 + N_P×8 -1N_P×4unsigned long[N_P]Size Table各パーティションが使用している論理ブロックの数 [LBs]
80 + N_P×8〜80 + N_P×8 + L_IU -1L_IUunsigned char[L_IU]Implementation Use下記参照

Integrity Type は、0 がオープン、1 がクローズ、2〜255 は予約です。

Next Integrity Extent は、次の論理ボリューム保全列の位置を示します。無ければ 0 です。

Logical Volume Contents Use には、次の Logical Volume Header Descriptor (論理ボリュームヘッダ記述子) を記述します。

Logical Volume Header Descriptor format
RBP大きさ名称内容
0〜78unsigned __int64Unique Id一意ID
8〜3124unsigned char[24]Reserved=0

Unique Id は、全てのファイルとディレクトリに割り振られた番号です。 ルートディレクトリは 0、1〜15 は Macintosh 用に予約で、 他のファイルとディレクトリは、16 以上のそれぞれ別の番号をもちます。 普通は、記録順に番号を振ってゆきます。 そして、この LVID の UniqueID には、どのファイルやディレクトリよりも大きな値、 もし、次にファイルを加えるとすれば、それに割り振る値を入れます。 (なお、Macintosh のことを考え 231 - 1 未満の値にしてください。)

Free Space Table と Size Table の値が 0xFFFFFFFF ならば、サイズは未定義ですが、 これだと OS が困るのでちゃんとした値を入れましょう。

UDF1.02 では、Implementation Use は次のとおりです。

Implementation Use format
RBP大きさ名称内容
0〜3132entity_idImplementation ID*開発者名
32〜354unsigned longNumber of Filesファイル総数
36〜394unsigned longNumber of Directoriesディレクトリ総数
(ルートディレクトリを含む)
40〜412unsigned shortMinimum UDF Read Revision=0x0102 読出し最小版数
42〜432unsigned shortMinimum UDF Write Revision=0x0102 書込み最小版数
44〜452unsigned shortMaximum UDF Write Revision=0x0102 書込み最大版数

それぞれ、論理ボリューム内の数です。

今説明しているのは UDF 1.02 なので、各版数は 0x0102 です。 他のバージョンの場合は、対応するマニュアルを調べてください。
(確か UDF 1.50 の場合は、0x0150 だったと思います。)

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

2007年12月15日

UDF1.02 3-10 論理ボリューム保全列

一つの論理ボリュームは、一つの論理ボリューム保全列(Logical Volume Integrity Sequence)を持ちます。
論理ボリューム保全列は、
一つ以上の Logical Volume Integrity Descriptor (LVID) と終端記述子 (TD) で構成されます。

列は複数の LVID を持っていてもかまいませんが、
普通の DVD-ROM では LVID は一つで、
ファイル集合記述子列の長さは LVID + TD の 2 論理セクタです。

論理ボリューム保全列の場所は、
ボリューム記述子列内の Logical Volume Descriptor に記述されています。

続く保全列の位置は、前の保全列に書かれています。(つまり、場所がばらばらにあっても辿れます。)

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

2007年12月11日

UDF1.02 3-9 Volume Descriptor Pointer

Volume Descriptor Pointer (ボリューム記述子ポインタ) (VDP) は、 TD のかわりにボリューム記述子列の最後に置かれ、 次のボリューム記述子列の場所を示します。

Volume Descriptor Pointer format
位置大きさ名称内容
0〜1516struct tagDescriptor TagTagID=3
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜278struct extent_adNext Volume Descriptor Sequence Extent次のボリューム記述子列の場所
28〜511484-Reserved=0


最後のボリューム記述子列ならば、Next Volume Descriptor Sequence Extent は 0 です。

VDP は、 ボリューム記述子列が用意された論理セクタのブロックに収まらないとき、 ランダム書き込みが長じてボリュームがぐちゃぐちゃになった時の救済用に用意されていると思います。 だから、あえて使う必要はありませんし、 使わない方が読み取りが速くなります。

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

2007年12月09日

UDF1.02 3-8 Unallocated Space Descriptor

Unallocated Space Descriptor (未割付け空間記述子) は、空き領域の範囲を記述します。 ボリューム空間に空きが無い場合でも、USD は記録されます。

Unallocated Space Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=7
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜234unsigned longNumber of Allocation Descriptors (=N_AD)=0 (空きが無い場合)
24〜24+N_AD×8-1N_AD×8struct extent_ad[N_AD]Allocation Descriptors(=0)


DVD-ROM のように書き込めない=空きが無い場合、Number of Allocation Descriptors に 0 をセットします。 Allocation Descriptors は記録しません。

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

2007年12月05日

UDF1.02 3-7 Logical Volume Descriptor

一つの論理ボリュームの情報は、一つの Logical Volume Descriptor (論理ボリューム記述子) (LVD) に記述されます。 LVD には、 論理ボリュームに含まれる全てのパーティションの番号と、論理ブロックの大きさ、 論理ボリューム保全列の位置と大きさが書かれています。
ボリュームセットが持つ全ての論理ボリュームの LVD は、 一番大きなボリューム番号のボリュームに記録されます。

Logical Volume Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=6
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜8364charspecDescriptor Character Set={0,"OSTA Compressed Unicode"}
84〜211128char[128]Logical Volume Identifier論理ボリュームラベル (dstring)
212〜2154unsigned longLogical Block Size論理ブロック長, 大抵=2048
216〜24732struct regidDomain Identifier={0, "*OSTA UDF Compliant", 2,1,3}
248〜26316long_adLogical Volume Contents Use(={2,{0,0},0}) ファイル集合記述子列の場所
264〜2674unsigned longMap Table Length (=MT_L)パーティションマップ長[bytes] =6
268〜2714unsigned longNumber of Partition Maps (=N_PM)パーティションマップ数 =1
272〜30332struct regidImplementation Identifier*開発者名
304〜431128unsigned char[128]Implementation Use(=0) 処理方法用
432〜4398struct extent_adIntegrity Sequence Extent論理ボリューム保全列の位置と大きさ
440〜440+MT_L - 1MT_Lunsigned char[MT_L]Partition Mapsパーティションマップ


Logical Volume Contents Use にはその論理ボリュームにあるファイル集合記述子列の 場所を入れます。 多くの DVD-ROM では、ファイル集合記述子列はパーティション 0 の先頭にあるので位置は {0,0} 、 中には FSD 一つしかないので、大きさは FSD + TD の 2 です。 (DVD-RAM では使用/空き領域情報である空間ビットマップをパーティションの先頭に持ってくることが多いため、 ファイル集合記述子列の位置はその後になります。)

Integrity Sequence Extent には論理ボリューム保全記述子列の場所を入れます。 UDF1.02 によると上書き、追記媒体のために大きさを 8k バイト以上用意すべきと書いてありますが、 多くの DVD-ROM では LVID + TD の 2 * 2048 バイトになっています。

partition map (パーティションマップ)には1種と2種がありますが、UDF1.02 では1種を使います。

Type 1 Partition Map format
RBP大きさ名称UDF 1.02 の場合
01unsigned charPartition Map Type=1
11unsigned charPartition Map Length=6
2〜32unsigned shortVolume Sequence Number(=1) パーティションが所属するボリュームの番号
4〜52unsigned shortPartition Number(=0) パーティション番号


一応、2種パーティションマップも載せておきます。

Type 2 Partition Map format
RBP大きさ名称内容
01unsigned charPartition Map Type=2
11unsigned charPartition Map Length=64
2〜6362unsigned char[62]Partition Identifier当事者間の同意による


パーティションが一つしかなければ、partition map は一つのみです。

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

2007年12月03日

UDF1.02 3-6 Partition Descriptor

Partition Descriptor (区画記述子) (PD) には、そのボリュームが持つ 一つのパーティションの情報が書かれています。

Partition Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=5
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜212unsigned shortPartition Flags(=1) 区画フラグ
22〜232unsigned shortPartition Number(=0) パーティション番号
24〜5532struct regidPartition Contents="+NSR02"or"+NSR03"
56〜183128unsigned char[128]Partition Contents Use(=0) Partition Header Descriptor を記入する
184〜1874unsigned longAccess Type(=1) アクセス種別
188〜1914unsigned longPartition Starting Locationパーティションの先頭位置 [LSN]
192〜1954unsigned longPartition Lengthパーティションの大きさ [LSs]
196〜22732struct regidImplementation Identifier*開発者名
228〜355128unsigned char[128]Implementation Use処理方法用 使わなければ =0
356〜511156-Reserved=0


Partition Flags は、次のとおりです。

Partition characteristics
Bit内容
00=このパーティションにボリュームスペースが割り振られていない
1=このパーティションにボリュームスペースが割り振られている
1〜15予約


Access Type は、次のとおりです。

Access interpretation
Access Type内容
0パーティションは未定義
1読み取り専用
21回だけ書き込み可能
3書き込み可能
4上書き可能
5予約


Partition Contents Use には、次の Partition Header Descriptor が入ります。 これは、パーティションの空き領域を記録してある場所を記述します。

Partition Header Descriptor format
BP大きさ名称内容
0〜78struct short_adUnallocated Space Table(=0) 未割付け空間表の場所
8〜158struct short_adUnallocated Space Bitmap(=0) 未割付け空間ビットマップの場所
16〜238struct short_adPartition Integrity Table=0 パーティション保全テーブル表の場所
24〜318struct short_adFreed Space Table(=0) 未初期化空間表の場所
32〜398struct short_adFreed Space Bitmap(=0) 未初期化空間ビットマップの場所
40〜12788unsigned char[88]Reserved=0


UDF1.02 では、Partition Integrity Table は使用しません。
Space Table が指す記述子は USE であり、 空き位置が配置記述子列 (場所の配列) で記述されています。
Space Bitmap が指す記述子は SBD であり、 論理ブロックをビットで表してその ON/OFF で空きか使用中かを記述します。
UDF1.02 では、空間表と空間ビットマップのどちらか片方のみ使用します。同時に使用しません。 UDF1.50 では、これに加えて Freed の側を使用しないらしいです。

使用しない空間表や空間ビットマップの場所は 0 に設定してください。 空きがない DVD-ROM では、全て 0 になっています。

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

2007年12月01日

UDF1.02 3-5 Implementation Use Volume Descriptor

Implementation Use Volume Descriptor (処理方法用ボリューム記述子)(IUVD) は、処理方法に関する情報を提供します。

Implementation Use Volume Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=4
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜5132struct regidImplementation Identifier={0,"*UDF LV Info", 1,2}
52〜511460-Implementation Use処理方法用


IUVD は自由度が高く、必要な情報の数だけ用意することが出来ますが、 UDF1.02 では一種類の情報のみに使います。
それは、論理ボリュームの情報です。
そのために、Implementation Identifier の ID には "*UDF LV Info" と記入し、 Implementation Use には以下の Logical Volume Information を記述します。

Logical Volume Information format
RBP大きさ名称内容
0〜6364charspecLVI Charset={0,"OSTA Compressed Unicode"}
64〜191128char[128]Logical Volume Identifier論理ボリューム名 (dstring)
192〜22736char[36]LV Info 1(=0) ディスク情報1 (dstring)
228〜26336char[36]LV Info 2(=0) ディスク情報2 (dstring)
264〜29936char[36]LV Info 3(=0) ディスク情報3 (dstring)
300〜33132struct regidImplemention ID*開発者名
332〜459128unsigned char[128]Implementation Use処理方法用

LV Info 1〜3 には所有者名、組織名、連絡先などそのディスク特有の情報を 書き込むことが出来ます。 あえて使う必要が無ければ、0 でかまいません。

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

2007年11月29日

UDF1.02 3-4 Primary Volume Descriptor

Primary Volume Descriptor (基本ボリューム記述子)(PVD) は、そのボリュームの基本的な内容が記されています。

Primary Volume Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=1
16〜194unsigned longVolume Descriptor Sequence Numberボリューム記述子番号
20〜234unsigned longPrimary Volume Descriptor NumberPVDの番号
24〜5532char[32]Volume Identifierボリュームラベル (dstring)
56〜572unsigned shortVolume Sequence Number(=1) ボリューム番号
58〜592unsigned shortMaximum Volume Sequence Number(=1) ボリュームセットのボリューム数
60〜612unsigned shortInterchange Level(=2) 交換水準
62〜632unsigned shortMaximum Interchange Level(=2) 最大交換水準
64〜674unsigned longCharacter Set List=1 文字集合リスト
68〜714unsigned longMaximum Character Set List=1 最大文字集合リスト
72〜199128char[128]Volume Set Identifierボリュームセット名 (dstring)
200〜26364charspecDescriptor Character Set={0,"OSTA Compressed Unicode"}
264〜32764charspecExplanatory Character Set={0,"OSTA Compressed Unicode"}
328〜3358struct extent_adVolume Abstract抄録
336〜3438struct extent_adVolume Copyright Notice著作権表示
344〜37532struct regidApplication Identifier応用プログラム識別子
376〜38712struct timestampRecording Date and Time記録日時
388〜41932struct regidImplementation Identifier*開発者名
420〜48364unsigned char[64]Implementation Use(=0) 処理方法用
484〜4874unsigned longPredecessor Volume Descriptor Sequence Location(=0) 障害復旧用
488〜4892unsigned shortFlags=0 フラグ
490〜51122-Reserved=0


Volume Descriptor Sequence Number は、 ボリューム記述子の通し番号で、大抵、列の先頭より 0、1、2、と記録します。

Primary Volume Descriptor Number は、PVD 毎に異なる番号が割り振られており、 一つだけ =0 の PVD があります。読み取りには、これが 0 の PVD を使用します。 これは書き換えのための仕様なので、Primary Volume Descriptor Number = 0 の PVD を 一つ用意しておけば十分です。

Interchange Level と Maximum Interchange Level は、このボリュームが複数のボリュームをもつボリュームセットの内の一つならば 3、 単一ボリュームならば 2 です。 DVD-ROM では 2 です。

UDF1.02 では、文字セットは 1 種のみです。

Volume Set Identifier は、読み取りの際はそのままボリュームセット名と解釈します。
UDF1.02 で書き込む際には、他のボリュームセットと区別できるようにします。 そこで、最初の 16 文字がユニークな値になるようにします。 そのために、最初の 8 文字を、32ビット時間 (time_t?) を 16進数に直した文字を入れることが推奨のようです。

Volume Abstract、Volume Copyright Notice、Application Identifier、Implementation Use、 Predecessor Volume Descriptor Sequence Location は、使われていなければ 0 です。

Flags は、次のとおりです。
Bit内容
00=PVD はボリュームセット内のボリューム毎に異なる
1=PVD はボリュームセット内の全てのボリュームで同じ
1〜15予約

UDF1.02 では、ボリュームは 1 つなので、フラグは 0 です。

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

2007年11月25日

UDF1.02 3-3 ボリューム記述子列

ボリュームの情報は Volume Descriptor Sequence(ボリューム記述子列)に記録されます。

ボリューム記述子列はボリュームに主と予備の 2 つ記録されます。

ボリューム記述子列は開始点に書いてあるセクタから始まり、数論理セクタ続き、
Terminating Descriptor (TD)(終端記述子)
または Volume Descriptor Pointer (ボリューム記述子ポインタ) (VDP) で終わり、
数論理セクタ 00 が続きます。

ボリューム記述子列を構成する記述子は次のとおりです。
・Primary Volume Descriptor (PVD)
・Implementation Use Volume Descriptor (IUVD)
・Partition Descriptor (PD)
・Logical Volume Descriptor (LVD)
・Unallocated Space Descriptor (USD)

内、PVD は一つ以上、他は 0 個以上あります。
各記述子の大きさは、全て 1 論理セクタです。
記述子列に所属する記述子には、
それぞれ異なる Volume Descriptor Sequence Number が割り振られています。
(大抵、先頭から順番に 0 から割り振られます。)

PD はボリュームの持つパーティションの数だけあります。
空のパーティションや廃棄したパーティションの PD も持てるかもしれません。

UDF1.02 では、ボリューム記述子列の長さは最小 16 セクタです。
基本的に、PVD、IUVD、PD、LVD、USD を一つづつ記述します。

多くの DVD-ROM では、32 セクタより主ボリューム記述子列が始まり、次の順序で記録されます。
32 PVD
33 IUVD
34 PD
35 LVD
36 USD
37 TD
38〜47 空白
同じく、副ボリューム記述子は 48 セクタより始まることが多いです。内容は主ボリューム記述子列と同じです。
posted by 七癖 at 10:15| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年11月17日

UDF1.02 3-2 Terminating Descriptor

Terminating Descriptor(終端記述子)は、 ボリューム記述子列、論理ボリューム保全列、ファイル集合記述子列、の終端を示します。

Terminating Descriptor format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=8
16〜511496-Reserved=0


なお、各記述子列において、終端を TD のかわりに何も記述していない (全て 0 の) 論理セクタあるいは 論理ブロックで代用できます。 ただし、DVD-ROM ではきちんと TD を記入します。

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

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) | ファイルシステム | このブログの読者になる | 更新情報をチェックする
×

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