EditFlags

2001/01/06
Q:(憲さん)
 ファイルタイプのレジストリ値には、たまにEditFlagsというバイナリ値がありますがこれはなんですか?

A:(延さん)
 これはそのファイルタイプがファイルタイプタブ上でどのような編集操作が可能なのかを示すフラグです。基本的に操作を制限するために存在しており、このレジストリデータのないファイルタイプは操作に制限がないと思ってもらっていい思います。

 MS-DOSアプリケーションの拡張子である「COM」に関連付けられた「comfile」というファイルタイプのデータを例に説明しましょう。ここではWindows98の場合で説明します。WindowsME及びWindows2000は画面が少し違いますが、適当に読み替えてみて下さい。

[EditFlags(comfileファイルタイプ)]

 EditFlagsは「d8 07 00 00」という値になっています。この場合はこのファイルタイプに対して「削除」「編集」も禁止されていることを示しています。以下にcomfileファイルタイプのファイルタイプタブを以下に示します。

[ファイルタイプタブ(comfileファイルタイプ)]

 「削除」ボタン「編集」ボタングレーアウトで押せなくなっていますね。

Q:(憲さん)
 本当ですね。では「d8」が削除を禁止するという意味で、「07」が編集を禁止するという意味なのですか?

A:(延さん)
 いいや、実はそんなに単純ではないんだ。そもそもレジストリのバイナリ(2進数)値というのはその名の通り2進数なのだけど、それをレジストリエディタでは16進数(ヘキサデシマル)で表現しています。

Q:(貴子)
 16進数って何?

A:(延さん)
 コンピュータの世界はよく01の世界だというよね。これを2進数(バイナリ)という訳だけど、これはコンピュータにはよく分かっても、人間には非常に直感しにくい数値です。そこで業界では2進数を表現しやすくした16進数というのがよく使われます。

 つまりレジストリのバイナリ値は「0110-1011-0011-0000-1010-1100-1000-0111」というような32bit(32桁)の2進数ですが、これでは書くのも大変だし、直感しにくいですよね。これを16進数で表すと「6b30ae89」と大変シンプルになります。つまり人間が目に触れる部分を16進数にして、分かりやすくしている訳です。しかしコンピュータ内部では2進数で解釈しています。以下に16進数と2進数とさらに我々が使いなれている10進数(デシマル)の対応表を書きます。

[各進数の対応表]
16進数 2進数 10進数
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
a 1010 10
b 1011 11
c 1100 12
d 1101 13
e 1110 14
f 1111 15

Q:(貴子)
 確かに2進数では分かりにくいというのは理解できるけど、どうしてそれを私がよく使っている10進数で表さないで、わざわざ16進数などというもので表現するの?

A:(延さん)
 うん、その説明をしているときりがないので、簡単に説明させてね。つまり10は2のべき乗じゃないので、2進数と桁数の対応がとれないんで不便なんだよ。この話はここまでにしておいて。

 で先ほどの「d8 07 00 00」という16進数で表現されたものを上記の対応表をもとにバイナリに表現しなおしてみると、

「1101-1000-0000-0111-0000-0000-0000-0000」

になります。コンピュータ内部ではこのデータを元に動作を決めています。EditFlagsの場合、どの位置(ビット位置)がになっているかで、そのファイルタイプの可能な編集操作が決まります。以下にどの位置のビットが1になった場合に、どのような振る舞いになるのかを表に示します。

[EditFlagのビットの値による操作の違い]
ビット位置 ビットが1の場合の動作
第1 「アクション」の削除不可
第2 「アクション」の編集不可
第3 「アクション」の追加不可※
第4 「ファイルタイプ」の削除不可※
第5 「ファイルタイプ」の編集不可
第7 「内容の種類」等変更不可※
第8 「登録されているファイルタイプ」リスト非表示
第9 「内容の種類」等変更不可※
第14 「アクション」の標準化不可※
第15 「アイコン」の変更不可
第16 「タイプの説明」の変更不可※
第24 「ダウンロード時に開く確認をする」チェックが外れる
※WindowsME、及びWindows2000では機能せず

!注
 表にないものは私がそのビットの振る舞いを確認できていないものです。

 上記の例では、第1、第2、第4、第5、第14、第15、第16番目のビットがになっています。表を照らし合わせてみて下さい。ファイルタイプタブで不可能な操作と一致しているばずです。ただ※マークで示したものは、WindowsMEとWindows2000では機能しないので、注意して下さい。

Q:(あきつぐ)
 ほう、確かに。

A:(延さん)
 もっとも第5ビットであるため、そもそもファイルタイプの編集そのものができないので、第1、第2、第14、第15、第16番目のビットの振る舞いは確認できませんがね。

 もうちょっといい例を挙げましょう。以下にドライブに関連つけられたファイルタイプ「drive」のデータを示します。

[EditFlags(Driveファイルタイプ)]

 EditFlagsは「d2 01 00 00」という値になっています。これをバイナリに直すと、

「1101-0010-0000-0001-0000-0000-0000-0000」

ですね。

 になっているのは第1、第2、第4、第7、第16番目です。この場合はファイルタイプの削除ができませんが、編集はできるはずですね。ファイルタイプタブを見てみます。

[ファイルタイプタブ(Driveファイルタイプ)]

Q:(あきつぐ)
 うん、確かに「削除」ボタンはグレーアウトだけど、「編集」ボタンは押せるね。

A:(延さん)
 だろ。で、このボタンを押して編集のダイアログを出してみよう。

[ファイルタイプの編集(Driveファイルタイプ)]

 「タイプの説明」「内容の種類」等、それとアクションリストの下のボタンに注目して。

Q:(憲さん)
 いやいや本当にビットの通り、アクション「編集」「削除」「内容の種類」等、それと「タイプの説明」がグレーアウトで操作できませんね。これは驚きました。こんな制御をしていたのですか、このレジストリデータは。

A:(延さん)
 そういうことです。他のファイルタイプも見て、この法則に従っているか確認して下さい。ただしOSが重要なファイルタイプ保護するために作ったものなので、くれぐれもやたらいじらないようにしましょう。

Q:(初心者の皆さん)
 はーい!

 


戻る

目次へ