2019/08/31 *.zip ファイルの圧縮ソフトによる違い
2019/08/24 a! Menu Archiver のおまけ機能
2019/08/10 a! Menu Archiver Ver.2.00 ほぼ新規公開
2019/08/03 a! Menu Filer の AMFSetup.exe が何故なくなったか
前回は「a! Menu Archiver のおまけ機能」を説明し、
*.zip の圧縮ファイル内にどういう情報が保存されるかを見てもらいました。
今回は圧縮ソフトのメジャーどころで実際情報がどうなっているのかをまとめてみます。
大きく違うのは前回 Extra Field 関連という事を言いましたが、それ以外では、
圧縮ファイル内にディレクトリ(パス)情報を入れているかどうかがあります。
ディレクトリ情報の保存というのは、セントラルディレクトリとローカルヘッダーだけがあり
実際に圧縮されたデータがある訳ではありません。
ここ参照。
日本語では ここ。
その場合のファイル名(パス)は「xxx/」というようにスラッシュで終わっています。
他のファイル名を見ればこのデータは生成できます。
わざわざ入れる場合のメリットとしては、ディレクトリに対する属性データを保存できることでしょうか。
デメリットは圧縮ファイルサイズがその分大きくなることです。
それではまとめてみます。設定は初期値のままとします。
| ソフト名 | ディレクトリ情報 | 日時情報(0x000a) | アクセス権情報(0x4453) | extended timestamp (0x5455,詳細不明) |
|---|---|---|---|---|
| +Lhaca | 無 | 無 | 有 | 有 |
| 7-Zip | 有 | 有 | 無 | 無 |
| Explzh | 有 | 無 | 無 | 無 |
| Lhaplus | 無 | 無 | 無 | 無 |
| a! Menu Archiver | 無 | 有 | 無 | 無 |
日時情報(0x000a)には更新日時、アクセス日時、作成日時がありますが、
更新日時はセントラルディレクトリにもあります。
ただ表現形式が異なり、セントラルディレクトリのは2秒単位になります。
Extra Field のは100ナノ秒単位で保存されています。
自分が使用している圧縮ソフトは、どういう情報が保存されるのかをチェックしておいたらどうですか?
a! Menu Archiver のおまけ機能についてはここに書いてあります。
*.zip 圧縮されたファイルを AMASet.exe にドラッグアンドドロップしてみましょう。
その *.zip ファイルに関する情報が *.zip ファイルと同じディレクトリに *.txt として出てきます。
*.xlsx, *.docx, *.pptx ファイルを AMASet.exe にドラッグアンドドロップしてみましょう。
実は *.xlsx, *.docx, *.pptx は *.zip 形式で圧縮されていることがわかります。
*.txt の中身の説明は機会があればしますが、...
ここには *.zip ファイルの仕様の説明があります。
日本語では Wikipedia の説明がいいでしょう。
これらを参考に読み進めるといいでしょう。
ここではそのうち2点に関して言及していきます。1つはコメント、もう一つは Extra Field です。
*.zip には各々のファイルと圧縮ファイル全体に対するコメントを入力する機能があります。
しかしそれらに対する入力や表示ができる圧縮ソフトは、見たことがありません。
それをサポートするソフトを作れば特徴的なソフトになるので
a! Menu Archiver の中でサポートしようかとも思いましたが、
Explorer ですらサポートしていないのでやめています。
要望があれば考えたいと思います。
次は Extra Field です。
ここの 4.5 に詳しい説明がありますが、
OS毎の様々な情報が追加できます。
4GB以上のファイルで重要なのは、0x0001 で、
Windows に関係しそうなのは、0x000a(0x0009と間違っていた8/31修正)、0x4453、0x5455あたりです。
これらのヘッダーは圧縮ソフトに依存して入っていたりいなかったりします。
その違いについては近いうちに。
今日付けで a! Menu Archiver をほぼ新規公開しました。「ほぼ」と言っているのは過去に公開した実績があります。
Ver.2.00 2019/08/10
何故公開する気になったかというと、作者はこのソフトを Ver.1.24 の頃からずっと使っていて、特に不要とは考えなかったからです。
ということはやはりニーズはあると考え、再公開することにしました。
表題のことを説明するために、4部構成にします。
1)レジストリーの話
a! Menu Filer は以下のレジストリーに以下の目的で書き込みをします。
サブキーは省略している場合があります。
| 書き込みキー名 | 書き込みの目的 |
|---|---|
| HKEY_CURRENT_USER\Software\Classes\CLSID\ {E8843021-9D99-11D2-975A-444553540000} | コンテキストメニューハンドラーとして AMFList*.dll の登録 *1 |
| HKEY_CURRENT_USER\Software\Classes\*\ shellex\ContextMenuHandlers\AMFListMenu | ファイルに対するコンテキストメニューハンドラーとして AMFList*.dll の登録 *1 |
| HKEY_CURRENT_USER\Software\Classes\Directory\ shellex\ContextMenuHandlers\AMFListMenu | ディレクトリに対するコンテキストメニューハンドラーとして AMFList*.dll の登録 *1 |
| HKEY_CURRENT_USER\Software\Classes\lnkfile\ shellex\ContextMenuHandlers\AMFListMenu | *.lnk に対するコンテキストメニューハンドラーとして AMFList*.dll の登録 *1 |
| HKEY_CURRENT_USER\Software\Classes\Directory\ shell\a_Menu_Filer | ディレクトリに対するメニュー表示の述語の登録 *2 |
| HKEY_CURRENT_USER\Software\Classes\Drive\ shell\a_Menu_Filer | ドライブに対するメニュー表示の述語の登録 *2 |
| HKEY_CURRENT_USER\Software\Classes\Directory\ shell の (既定) | ディレクトリを(ダブル)クリックした場合に実行する述語 |
| HKEY_CURRENT_USER\Software\Classes\Drive\ shell の (既定) | ドライブを(ダブル)クリックした場合に実行する述語 |
| HKEY_CURRENT_USER\Software\T_Sugiyama\ a_Menu_Filer | a! Menu Filer の設定の保存 |
*1 「コンテキストメニューハンドラー」という名前の通りコンテキストメニューを追加します。
*2 ディレクトリまたはドライブを右クリックしたときに出る[a! Menu Filer(M)]というメニューは、これにより表示しています。
a! Reg Analyzer で見て確かめて下さい。
表の最後の項目以外は HKEY_CURRENT_USER\Software\Classes 以下に書いています。とすると ここの2番目の項目 でも説明している通り HKEY_CLASSES_ROOT の中が変わることになります。
これが関連付けといわれるものの実態です。
2)昇格の話
AMFSetup.exe というファイルを実行した場合、その名前ゆえに嫌でも昇格して実行してしまいます。細かいロジックはわかりませんが、ファイル名に「Setup」とか「Install」とかが入っていると勝手にそうしてしまうようです。
3)結論の話
1つのパソコンに管理者と標準ユーザ2名を作ったとします。管理者で a! Menu Filer Ver.2.42 をインストールしたとしましょう。すると AMFSetup.exe は勝手に昇格します。書き込むレジストリーは全て HKEY_CURRENT_USER の下なので標準ユーザーには何の影響もないと考えるのが普通でしょう。ところが標準ユーザにログオンしなおしてレジストリーを a! Reg Analyzer で調べてみると、勝手に標準ユーザの HKEY_CURRENT_USER が書き変わってしまっているではありませんか!
とりあえず標準ユーザで上書きインストールしてアンインストールすれば事なきを得るのではないかと思いやってみました。ところがインストールしようとすると管理者のパスワードを聞いてきます。
Windows 2000 や Windows XP では全く問題がありませんでした。ユーザ単位で環境を構築できるのでいい機能だと思っていました。
書き込んでしまった標準ユーザーの HKEY_CURRENT_USER はどうしたらいいんだろうか。
そもそもそういうときのために AMFSetup.exe には「alluninstall」を引数として起動すれば環境をクリアする機能を付けていました。「AMFSetup.exe」という名前はよくないので、この機能を AMFSet.exe に吸収させ「alluninstall」を引数として起動し環境をクリアさせることにしました。それがこの節の後半です。
4)最後の話
このバグに気づいたのは作者で最近のことです。誠にすいませんでした。しかし今までこのような報告は全くありませんでした。ということはパソコンは管理者1人を作り、標準ユーザは特に作らないという使い方が一般的になっているということになります。上記の話の追加で管理者でアンインストールしてみました。しかし「書き込んでしまった標準ユーザーの HKEY_CURRENT_USER」は全く変わっていませんでした。標準ユーザは使えないですね。Microsoft もこのままの仕様でいいのですかね?
[AMFファイル操作(F)]でのファイル操作、[AMF Name To Clip.(N)]、[AMF Dos Prompt(K)]での付加機能メニューは、これにより表示しています。

これは偽装といい、他のユーザのプロセスとして実行する機能です。これでは全く意味がありません。
2019年7月分