2008年01月23日

UDF1.02 4-9 Implementation Use Extended Attribute

Implementation Use Extended Attribute には、そのファイルの様々な情報を、 その情報用のフォーマットを用意することで記述できます。

一般的な Implementation Use Extended Attribute は、次のようになります。

Implementation Use Extended Attribute format
RBP大きさ名称内容
0〜34unsigned longAttribute Type=2048
41unsigned charAttribute Subtype=1
5〜73unsigned char[3]Reserved=0
8〜114unsigned longAttribute Length (=A_L)属性長 (4の倍数) [bytes]
12〜154unsigned longImplementation Use Length (=IU_L)(=4) 処理方法用の長さ [bytes]
16〜4732struct regidImplementation Identifier*処理方法名
48〜A_L-1IU_Lunsigned char[IU_L]Implementation Use処理方法用



DVD-ROM では、これを使って Free Extended Attribute Space (空き拡張属性空間) と、 Copyright Management Information (著作権管理情報) を記述します。


Free Extended Attribute Space は、それが記録されている処理方法用拡張属性内の未使用領域を記述するために使います。 これは、拡張属性を追加、上書きするときに有用です。

Free Extended Attribute Space format
RBP大きさ名称内容
0〜34unsigned longAttribute Type=2048
41unsigned charAttribute Subtype=1
5〜73unsigned char[3]Reserved=0
8〜114unsigned longAttribute Length (=A_L)(=52) 属性長 (4の倍数) [bytes]
12〜154unsigned longImplementation Use Length (=IU_L)(=4) 処理方法用の長さ [bytes]
16〜4732struct regidImplementation Identifier="*UDF FreeEASpace"
48〜492unsigned shortHeader ChecksumヘッダのCRC
50〜A_L-1IU_L-2unsigned char[IU_L-2]Free EA Space(=0) 空き領域長さ

Header Checksum は上48バイトの単純な総和の下 1 バイトです。

空きが無ければ、
A_L = 52
IU_L = 4
と置き、Free EA Space の 2 バイトを 0 にセットすれば十分です。


Copyright Management Information は、そのファイルの著作権情報を記述します。

Copyright Management Information format
RBP大きさ名称内容
0〜34unsigned longAttribute Type=2048
41unsigned charAttribute Subtype=1
5〜73unsigned char[3]Reserved=0
8〜114unsigned longAttribute Length (=A_L)=56 属性長 (4の倍数) [bytes]
12〜154unsigned longImplementation Use Length (=IU_L)=8 処理方法用の長さ [bytes]
16〜4732struct regidImplementation Identifier="*UDF DVD CGMS Info"
48〜492unsigned shortHeader ChecksumヘッダのCRC
501unsigned charCGMS InformationCGMS
511unsigned charData Structure TypeProtection System Information の形式
52〜554unsigned char[4]Protection System Information保護システム情報

CGMS Information は次のとおりです。

CGMS Information field
bit意味多くの場合
0〜3予約0
4〜5CGMS0:コピー制限なし
1:使用されない
2:1回だけ可
3:コピー不可
6予約0
7Copyrighted Material0:著作物は含まれず
1:著作物を含む


Data Structure Type は、0 のみ用意されており、1〜255 は予約です。 Data Structure Type = 0 のとき、Protection System Information は次のとおりです。

Protection System Information field for Data Structure Type 0
RBP大きさ名称内容
01unsigned charProtection System Type=0:保護システムなし
=1:保護システム1
=2〜255:予約
1〜33unsigned char[3]Reserved=0



UDF1.02 では、これら以外に OS 別のフォーマットも用意されていますが、割愛します。

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

2008年01月21日

UDF1.02 4-8 Extended Attribute

拡張属性の構成要素である 拡張属性記述子は一般的に次のようになります。

Generic extended attribute format
RBP大きさ名称内容
0〜34unsigned longAttribute Type属性種別
41unsigned charAttribute Subtype属性副種別
5〜73unsigned char[3]Reserved=0
8〜114unsigned longAttribute Length (=A_L)属性長 (4の倍数) [bytes]
12〜A_L-1A_L-12unsigned char[A_L-12]Attribute Data属性データ

UDF1.02 では、拡張属性記述子の長さは 4 の倍数です。

ECMA167 では、次のタイプが用意されています。

Attribute Types
Attribute TypeAttribute Subtype名称UDF1.02
11Character Set Information 
31Alternate Permissions記述しない
51File Times Extended AttributeMacintosh のみ記述
61Information Times Extended Attribute 
121Device Specification 
20481Implementation Use Extended Attribute空き拡張属性空間
著作権管理情報
OS別の情報
655361Application Use Extended AttributeUDF FreeAppEASpace

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

2008年01月15日

UDF1.02 4-7 Extended Attribute Header Descriptor

拡張属性 (Extended Attribute) はファイルエントリ内にあり、 ファイルの様々な追加情報を記述します。

拡張属性は先頭の Extended Attribute Header Descriptor (EAHD)(拡張属性ヘッダ記述子) と、 それに続く幾つかの様々な拡張属性記述子からなります。

Extended Attribute Header Descriptor
Extended Attribute 0
Extended Attribute 1


という具合です。

Extended Attribute Header Descriptor は、次のとおりです。

Extended Attribute Header Descriptor format
RBP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=262
16〜194unsigned longImplementation Attributes Location(=24) Implementation Attributes の位置 [bytes]
20〜234unsigned longApplication Attributes Location(=132) Application Attributes の位置 [bytes]

Implementation Attributes Location と Application Attributes Location は、 拡張属性の先頭からの位置です。 Implementation Attribute や Application Attribute が無いときは、その終端を記入します。

多くの DVD-ROM では、2種類の Implementation Attribute (UDF FreeEASpace と UDF DVD CGMS Info) のみを記録し、 空き領域は無いので、 Implementation Attributes Location はヘッダのすぐ後ろである 24、 Application Attributes Location は記録しないので終端の 132 になります。

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

2008年01月13日

UDF1.02 4-6 File Entry

一つのファイルあるいはディレクトリは、一つのファイルエントリを持っています。 ファイルエントリにはそのファイルの更新日時やファイル本体の位置 (ファイルが分割されていれば、 全ての分割ファイルの位置) が記述されます。 このため、ファイルが上書き保存されても、ディレクトリ本体=ディレクトリ内の全ファイルの情報 を変更することなく、そのファイルエントリを上書きするだけで済みます。

File Entry format
BP大きさ名称内容
0〜1516struct tagDescriptor TagTagID=261
16〜3520struct icbtagICB TagICB
36〜394unsigned longUid=-1 ファイル所有者ID
40〜434unsigned longGid=-1 ファイル所有グループID
44〜474unsigned longPermissions許可条件
48〜492unsigned shortFile Link Count自分+サブディレクトリ数
501unsigned charRecord Format=0 記録形式
511unsigned charRecord Display Attributes=0 記録表示属性
52〜554unsigned longRecord Length=0 記録長
56〜638unsigned int64Information Lengthファイルサイズ [bytes]
64〜718unsigned int64Logical Blocks Recorded使用している論理ブロックの数
72〜8312struct timestampAccess Date and Time最新アクセス日
84〜9512struct timestampModification Date and Time更新日時
96〜10712struct timestampAttribute Date and Time属性修正日時
108〜1114unsigned longCheckpoint=1 チェックポイント
112〜12716struct long_adExtended Attribute ICB拡張属性ICBの位置
128〜15932struct regidImplementation Identifier*開発者名
160〜1678unsigned int64Unique Id一意ID
168〜1714unsigned longLength of Extended Attributes (=L_EA)Extended Attributes の長さ [bytes]
172〜1754unsigned longLength of Allocation Descriptors (=L_AD)Allocation descriptors の長さ [bytes]
176〜176+L_EA-1L_EAunsigned char[L_EA]Extended Attributes拡張属性
176+L_EA〜176+L_EA+L_AD-1L_ADunsigned char[L_AD]Allocation descriptors(分割)ファイル本体の場所
もしくはファイル本体

Uid と Gid は、 UDF1.02 では特別な理由が無ければ無効を示す 232-1 (=0xFFFFFFFF, -1) を記入します。

Permissions は、ユーザーが実行できるファイルの動作を示します。
これは、実際の使用者 (ユーザーIDで区別される) で異なります。
ユーザーID と Uid が同じファイル所有者 Owner (ビット10〜14)
ユーザーID と Gid が同じグループ所属者 Group (ビット5〜9)
どちらでもない一般ユーザー Other (ビット0〜4)
の 3 種です。
それぞれに、Execute (実行)、Write(書き込み)、Read(読み取り)、Change Attribute(属性変更)、Delete(削除)、 の 5 種の動作が各ビットに割り振られ、そのビットが 1 ならその動作実行可能、0 なら実行不可です。

Allowed access
bit使用者意味
0OtherExecute
1OtherWrite
2OtherRead
3OtherChange Attribute
4OtherDelete
5GroupExecute
6GroupWrite
7GroupRead
8GroupChange Attribute
9GroupDelete
10OwnerExecute
11OwnerWrite
12OwnerRead
13OwnerChange Attribute
14OwnerDelete
15〜31予約予約

DVD-ROM なら、ファイルは各 Read が 1 (0x00001084)、ディレクトリは 各 Execute と各 Read が 1 (0x000014A5) です。

File Link Count は、ファイルは 1 、ディレクトリは自身+子ディレクトリ数 です。

UDF1.02 では、Record Format、Record Display Attributes、Record Length は 0 (指定せず) です。 (Record Length は Record Format に依存します。)

Information Length はファイルサイズです。ファイルが分割されていればその総和、 ディレクトリでもその長さです。単位はバイトです。
(本当は、確保しただけで使用していない領域を含みます。)

Logical Blocks Recorded は、ファイルが使っている論理ブロックの数です。 ファイルが一続きならば、
(ファイルサイズ[bytes] + 1論理ブロックサイズ[bytes] -1) / 1論理ブロックサイズ[bytes]
となります。

Checkpoint は最初 1 で、ユーザの指示があれば 1 づつ増やします。

拡張属性ICBを使用しない場合、Extended Attribute ICB を 0 に設定します。

UniqueID は、全てのファイルとディレクトリに割り振られた番号です。 ルートディレクトリは 0、1〜15 は Macintosh 用に予約で、 他のファイルとディレクトリは、16 以上のそれぞれ別の番号をもちます。 普通は、記録順に番号を振ってゆきます。 次に記録するときは、LVID に記録された値を記入し、LVID に保存された値を増やします。

Extended Attributes は、次回以降にお話します。

Allocation descriptors は ICB Tag の Flags の 0〜2 ビットで意味が変わります。
0〜2 では、ファイル/ディレクトリの位置と大きさを記した配置記述子の配列になっています。 0 では short_ad、1 では long_ad、2 では ext_ad、を使用します。 DVD-ROM では short_ad を使用します。
配置記述子は、ファイルが分割されていなければ 1 つだけ、分割されていれば 2 つ以上続きます。 数は L_AD から計算します。 それぞれの配置記述子に、(分割された) ファイルの位置と大きさが入っています。 ファイルの分割の順序は並び順と同じです。
配置記述子の Extent Length の下 29 ビットは、実際の (分割された) ファイルのバイト数 です (論理ブロックの整数倍ではありません)。上 2 ビットは 0 です。

ICB Tag の Flags の 0〜2 ビットが 3 のとき、Allocation descriptors にはファイル/ディレクトリの本体が、 直接記述されています。その長さは L_AD バイトです。この場合、ファイルは分割できません。

UDF1.02 では、一つの分割されたファイルの大きさは最大 230 - 論理ブロックサイズ バイトです。 ISO9660 と共存させるときのように、実際にはファイルがつながっている場合でも、 見かけは分割しているように記述します。

UDF1.02 では、ファイルエントリの大きさを 1 論理ブロックに収まるようにします。

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

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

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