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

2007年10月19日

UDF1.02 1-16 tag

tag (Descriptor tag) は、多くの記述子のヘッダに使われ、 記述子の種類が Tag ID で見分けられるようになっています。 また、各種の CRC で、内容に間違いが無いか、本当に記述子なのか 判別できます。

tag format
RBP大きさ名称内容
0〜12unsigned shortTag Identifier (TagID)記述子の種類
2〜32unsigned shortDescriptor Version=2 バージョン
41unsigned charTag ChecksumタグのCRC
51unsigned charReserved=0
6〜72unsigned shortTag Serial Number(=0) 通し番号
8〜92unsigned shortDescriptor CRC記述子のCRC
10〜112unsigned shortDescriptor CRC Lengthタグを除く記述子の大きさ [bytes]
12〜154unsigned longTag Location自身の位置 [LSN/LBN]


Tag Identifier(TagID)は、記述子の種類を示します。

Descriptor interpretation
TagID略語意味適当訳Tag Location の単位
1PVDPrimary Volume Descriptor基本ボリューム記述子LSN
2AVDPAnchor Volume Descriptor Pointer開始点LSN
3VDPVolume Descriptor Pointerボリューム記述子ポインタLSN
4IUVDImplementation Use Volume Descriptor処理方法用ボリューム記述子LSN
5PDPartition Descriptor区画記述子LSN
6LVDLogical Volume Descriptor論理ボリューム記述子LSN
7USDUnallocated Space Descriptor未割付け空間記述子LSN
8TDTerminating Descriptor終端記述子LSN/LBN
9LVIDLogical Volume Integrity Descriptor論理ボリューム保全記述子LSN
256FSDFile Set Descriptorファイル集合記述子LBN
257FIDFile Identifier Descriptorファイル識別記述子LBN
258AEDAllocation Extent Descriptor割付け範囲記述子LBN
259IEIndirect Entry間接エントリLBN
260TETerminal Entry終端エントリLBN
261FEFile EntryファイルエントリLBN
262EAHDExtended Attribute Header Descriptor拡張属性ヘッダ記述子LBN
263USEUnallocated Space Entry未割付け空間エントリLBN
264SBDSpace Bitmap Descriptor空間ビットマップ記述子LBN
265PIEPartition Integrity Entryパーティション保全エントリLBN
266EFEExtended File Entry拡張ファイルエントリLBN


Descriptor Version は、NSR02なら 2、NSR03 なら 3 です。 DVD-ROM では 2 です。

Tag Checksum は、バイト 0〜3 および 5〜15 の単純な総和の下1バイトです。 これは、記述子の作成の最後に計算します。

Tag Serial Number は、使われないとき 0 です。

Descriptor CRC は、タグを除く記述子の CRC です。 その生成多項式は、
x16 + x12 + x5 + 1
です。

Descriptor CRC Length は、Descriptor CRC の計算に使用したデータのバイト数です。 UDF1.02では、記述子の大きさ - タグの大きさ、です。

Tag Location は、タグのある場所の位置です。 開始点やボリューム記述子列、論理ボリューム保全列内の記述子など、 ボリュームシステムに関する記述子は LSN で、 ファイル集合記述子列内の記述子やファイルエントリなど、 論理ボリュームに置かれるファイルシステムに関する記述子はパーティションの先頭からの位置 で LBN で記述します。 TD はどちらでも使うので注意してください。

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

2007年10月17日

UDF1.02 1-15 extent_ad

extent_ad (Extent Descriptor) は、 開始点やボリューム記述子列などボリュームシステムで使われ、 ボリューム内における その記述子や記述子列の先頭位置と大きさを示します。

extent_ad format
RBP大きさ名称内容
0〜34unsigned longExtent Length大きさ [bytes]
4〜74unsigned longExtent Location位置 [LSN]

Extent Length は 230 未満です。 特に規定が無ければ、1論理セクタあたりのバイト数の整数倍です。

Extent Location が 0 であれば、それが示すものは存在しません。

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

2007年10月15日

せんべえの生地作り ver.0.004 公開

せんべえの生地作り ver.0.004 のダウンロード

ソースコードのダウンロード

フォルダ内のファイルを、ISO9660/JOLIET/UDF イメージファイルにまとめるツール
「せんべえの生地作り」の修正版です。

変更点:

・excepts.txt に記述したファイル名のファイルを除外するようにした。
・細かい修正
・その他、規格を勘違いしていた箇所の修正

実行ファイルと同じフォルダに置かれた except.txt には、イメージから除外するファイルを、一行に一つづつ書き込めます。 大文字と小文字を区別しません。

今回の修正について
posted by 七癖 at 18:56| Comment(1) | TrackBack(0) | 自作フリーウェア | このブログの読者になる | 更新情報をチェックする

2007年10月13日

UDF1.02 1-14 regid

regid (もしくは Entity identifier、EntityID) はその処理方法名を示します。

regid format
RBP大きさ名称内容
01unsigned charFlags=0 フラグ
1〜2323char[23]Identifier方法名 (ASCII)
24〜318unsigned char[8]Identifier Suffix付帯情報


Flags は次のとおりです。

bit意味
0Dirty: 0=有効。1=無効
1Protected: 0=変更可。1=変更不可
2〜7=0 予約

UDF1.02 では、Flags は 0 です。また、Identifier に ASCII 文字を使います。

Identifier Suffix を使わない場合は、0 で埋めます。


UDF では、regid にセットする値は各記述子の変数ごとに決まっています。

Entity Identifiers
変数名IdentifierIdentifier Suffix使用する記述子
Implementation ID"*開発者名"開発者(社)の仕様によるPVD, IUVD, PD, LVD, FID, FE
Domain ID"*OSTA UDF Compliant"{0x02, 0x01, 0x03}LVD, FSD
Implementation ID"*UDF LV Info"{0x02, 0x01}IUVD
Implementation ID"*UDF FreeEASpace"{0x02, 0x01}ファイル拡張属性
Application ID"*UDF FreeAppEASpace"{0x02, 0x01}ファイル拡張属性
Implementation ID"*UDF DVD CGMS Info"{0x02, 0x01}ファイル拡張属性

他に OS/2 用と Macintosh 用が用意されています。


「*開発者名」には、* (=0x2A) (アスタリスク) の後に、 ファイルシステムを作成したプログラム名やそのメーカー名、オ−サリングシステム名 などを ASCII 文字で記述します。
「*開発者名」の Identifier Suffix は、次のとおりです。

Developer IdentifierSuffix field format
RBP大きさ名称内容
01unsigned charOS Class(=0) Operating System Class
11unsigned charOS Identifier(=0) Operating System Identifier
2〜76unsigned char[6]Implementation Use Area開発者(社)の仕様による



「*OSTA UDF Compliant」の Identifier Suffix は、次のようになっています。

Domain IdentifierSuffix field format
RBP大きさ名称内容
0〜12unsigned shortUDF Revision=0x0102 (UDF 1.02)
21unsigned charDomain Flagsbit0:Hard Write-Protect
bit1:Soft Write-Protect
bit2〜7:予約
3〜75-Reserved=0

フラグの Hard Write-Protect は永久に変更不可であり、 Soft Write-Protect は書き換え可能なメディアでユーザーが指定できるようになっており、 Hard Write-Protect が 1 であれば Soft Write-Protect が 0 でも書き込み不可なのですが、 書き換えを考えない場合は、両方 1 でいいでしょう。



他の UDF で定義されている値の Identifier Suffix は、次のとおりです。

UDF IdentifierSuffix field format
RBP大きさ名称内容
0〜12unsigned shortUDF Revision=0x0102 (UDF 1.02)
21unsigned charOS Class(=0) Operating System Class
31unsigned charOS Identifier(=0) Operating System Identifier
4〜74-Reserved=0


Operating System Class と Operating System Identifier は次のとおりです。

Operating System Class
ValueOperating System Class
0未定義 (どれでも対応)
1DOS
2OS/2
3Macintosh OS
4UNIX
5Windows 9x
6Windows NT
7OS/400
8BeOS
9Windows CE
10〜255予約

Operating System Identifier
OS ClassOS IdentifierOperating System Identified
0-未定義 (どれでも対応)
10DOS
20OS/2
30Macintosh OS 9 以前
31Macintosh OS X 以降
40UNIX 一般
41UNIX - IBM AIX
42UNIX - SUN Solaris
43UNIX - HP/UX
44UNIX - Silicon Graphics Irix
45UNIX - Linux
46UNIX - MKLinux
47UNIX - FreeBSD
48UNIX - NetBSD
50Windows 9x 一般(98/MEを含む)
60Windows NT 一般(2000, XP, Server 2003, 及びそれ以降を含む)
70OS/400
80BeOS 一般
90Windows CE 一般
10〜255-予約

このOS の部分のみ、UDF2.50 と UDF2.60 の情報を元に追加しました。
多くの DVD-ROM 、そして DVD-Video では、両方とも 0 になっています。


各 ID は ASCII 文字ですが、一応書き出します。

UDF Entity Identifier Values
IdentifierByte Value
"*OSTA UDF Compliant"{0x2A, 0x4F, 0x53, 0x54, 0x41, 0x20, 0x55, 0x44, 0x46, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x6C, 0x69, 0x61, 0x6E, 0x74}
"*UDF LV Info"{0x2A, 0x55, 0x44, 0x46, 0x20, 0x4C, 0x56, 0x20, 0x49, 0x6E, 0x66, 0x6F}
"*UDF FreeEASpace"{0x2A, 0x55, 0x44, 0x46, 0x20, 0x46, 0x72, 0x65, 0x65, 0x45, 0x41, 0x53, 0x70, 0x61, 0x63, 0x65}
"*UDF FreeAppEASpace"{0x2A, 0x55, 0x44, 0x46, 0x20, 0x46, 0x72, 0x65, 0x65, 0x41, 0x70, 0x70, 0x45, 0x41, 0x53, 0x70, 0x61, 0x63, 0x65}
"*UDF DVD CGMS Info"{0x2A, 0x55, 0x44, 0x46, 0x20, 0x44, 0x56, 0x44, 0x20, 0x43, 0x47, 0x4D, 0x53, 0x20, 0x49, 0x6E, 0x66, 0x6F}


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

2007年10月11日

UDF1.02 1-13 timestamp

日時の記述には次の timestamp を使います。

timestamp format
RBP大きさ名称内容
0〜12unsigned shortType and Time Zone(日本では =0x121C)
2〜32shortYear
41unsigned charMonth
51unsigned charDay
61unsigned charHour
71unsigned charMinute
81unsigned charSecond
91unsigned charCentiseconds1/100秒
101unsigned charHundreds of Microseconds1/10,000秒
111unsigned charMicroseconds1/1,000,000秒

Type and Time Zone の上位 4 ビットは timestamp の内容を示し、それは次のとおりです。

意味備考
0世界標準時 
1現地時間UDF はこれを使う
2当事者間の同意による 
3〜15予約 

Type and Time Zone の下位 12 ビットは、
-1440〜1440 (0xA60〜0x5A0) の時、世界標準時からの分単位のずれです。
-2047 (0x801) の時、ずれの値は使われません。

日本では、+9時間=540分=0x21C のずれがあるので、0x121C になります。

年月日字分秒などは数値です。
マイクロ秒など OS によって使われない値は、 0 を記録するなり読み取りを無視するなりしてください。

全て 0 なら、日時は指定されていません。

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

2007年10月09日

UDF1.02 1-12 OSTA Compressed Unicode

UDF では、dstring 用の文字セットに、"OSTA Compressed Unicode" (OSTA圧縮ユニコード) を使います。

OSTA Compressed Unicode format
RBP大きさ名称内容
01unsigned charCompression ID圧縮方法
1〜lenlenunsigned char[len]Compressed Bit Stream圧縮データ

データの長さ (len) は、別の場所に書かれているか、 記述子内に固定長の領域として確保されています。

Compression ID は、圧縮方法を示します。

Compression ID
Compression ID定義
0〜7予約
81文字は8ビット
9〜15予約
161文字は16ビット
17〜255予約

圧縮前の文字列は Unicode 1.1 です。 ただし、0xFEFF 〜 0xFFFE を除きます。 数値と同様、リトルエンディアンです。 日本語を使用する場合、Compression ID に 16 を指定します。 実際の圧縮、展開には OSTA の UDF 仕様書に載っている C 言語のソースコードを そのまま使うのが楽です。

どうもこれ、先頭に 16 を入れているだけで、実際の長さより 1 バイト大きくなっています。"Compressed" じゃないじゃん。

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

2007年10月07日

UDF1.02 1-11 charspec

charspec (Character set specification) は PVD、LVD、FSD などで使われ、 ボリュームラベル、ファイル名、ディレクトリ名などで使用する文字セットを示します。

charspec format
RBP大きさ名称UDF の場合
01unsigned charCharacter Set Type=0
1〜6363char[63]Character Set Information="OSTA Compressed Unicode"

ECMA167 では、様々な文字セットが使えるようになっていますが、 UDF では「OSTA Compressed Unicode」 (OSTA 圧縮ユニコード) しか使わないので、 Character Set Type には「当事者間の合意」 (CS0文字) を示す 0 を入れ、 Character Set Information には、
0x4F, 0x53, 0x54, 0x41, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x55, 0x6E, 0x69, 0x63, 0x6F, 0x64, 0x65, 残りは 0x00
(ASCII 文字で "OSTA Compressed Unicode") と入れます。

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

2007年10月05日

UDF1.02 1-10 数値と文字

ECMA167 の数値はリトルエンディアンで、マイナスは2の補数を使います。

このブログでは便宜上、数値の型はC++言語と同じものを使用します。
char、short、long です。
正の数値のみの場合は、unsigned を付けます。整数の場合、signed は省略します。

ただ、64ビット=8バイトの数値は、C++では用意されていませんので、VisualC++6.0 に従って __int64、unsigned __int64 を使用します。

このブログでは、16 進数は先頭に 0x をつけて表します。


文字には通常の ASCII 文字と、その他の指定した文字セットの2種類を使い分けます。
このうち、ASCII 文字は、使う文字セットの名前や処理方法名など、システム上最低限必要な用途に用いられます。

その他の、ファイル名、ディレクトリ名、ボリュームラベルなどは、使う文字セットを指定します。但し、UDF では、全て "OSTA Compressed Unicode" (OSTA 圧縮ユニコード) を使います。 文字セットの指定には charspec を使います。指定した文字セットを使って記述する変数には、内容欄に (d-characters) を書き加えます。
固定長の配列では、dstring を使います。これは、d-characters の文字列で、最後のバイトに使用バイト数を記録します。間の余ったバイトは 0 で埋めます。

文字列は全て先詰めです。固定長の配列で余ったバイトは 0 で埋めます。
posted by 七癖 at 10:03| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする

2007年10月03日

このフリーソフトがすごい! best 350(2007ー2008最新版)

このフリーソフトがすごい!BEST350 2007-2008―Windows Vista/XP対応 (2007) (アスペクトムック)



立ち読みしてきました。
前に「せんべえ丸かじり」CD-ROM収録のお願いが来た冊子です。

索引が見つからなかったので、探すのに苦労しました。
数行の文章だけかと思ったら、
小さいけれどもカラー画像と使い方の説明が付いていてビックリです。
1/10ページ弱の紹介ですけど、
なんだかすごい励みになりました。

Vista/XP 対応とありますけれど、あまり深く読んでいないので、執筆者が全てのソフトを XP と Vista で確認したという文言は見つけていません。まあ、信じましょう。書いてあったらごめんなさい。
ユニコードの問題があるので、結構不安なのです。
posted by 七癖 at 07:44| Comment(0) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする

2007年10月01日

UDF1.02 1-9 UDF1.02 の制限

UDF1.02 の注意事項と制限、ECMA167 との違いを箇条書きにしておきます。

基本的にボリュームは一つです。
基本的に一つのボリュームにパーティションは一つです。
ディスクに一括書き込みを前提とします (読取専用メディアは当然含まれます)。

論理セクタの大きさは物理セクタの大きさと同じです。

ボリュームセット内の物理セクタの大きさは全て同じです。

ボリュームの最初の 32768 バイトは使用しません。

ファイル名は最大 255 バイトです。
パス長さは最大 1023 バイトです。

一つのデータ列の長さは最大 230 - 論理ブロックサイズ バイトです。大抵、論理ブロックサイズは 2048 バイトなので、値は 1073739776 (0x3FFFF800) です。ファイルサイズがこれを超えるときは、ファイルを分割せねばなりません。

AVDP は第256セクタ、 最終セクタ、最終-256セクタ、の 3 箇所の内 2 箇所に記述します。

有効な PVD は 1 ボリュームに 1 つです。
有効な PD は基本的に 1 ボリュームに 1 つです。
有効な LVD は 1 ボリュームセットに 1 つです。
LVID は記録されます。
有効な USD は 1 ボリュームに 1 つです。
FSD は基本的に 1 論理ボリュームに 1 つです。


DVD-ROM の制限

さらに実際の DVD-ROM には、次の制限がつきます。

論理セクタの大きさと論理ブロックの大きさは 2048 バイトです。

DVD-ROM 片面のボリュームは一つ、パーティションも一つです。なので、ボリューム番号は 1 、ボリューム数は 1、交換水準は 2 です。

AVDP は第256セクタに必ず記述し、 最終セクタ、最終-256セクタ、の内最低 1 箇所に記述します。なお、DVD プレーヤーは第256セクタしか参照しません。

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