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月23日

コメント入力時に認証コード

最近、同じようなスパムコメントがよく記入されます。何か対策はと思い、ブログの機能を調べたところ、認証コード機能がありましたので、有効にしてみます。
認証コードはコメント入力時に画像で表示されるので、半角英数で入力してください。
お手数ですがよろしくお願いします。

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

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