### Micco's Home Page ### Welcome to Micco's page!!
Sorry, but this web page is written in Japanese.
<English>
■ 更新情報
■ このWebページについて
■ お知らせ
■ ダウンロード
■ DLL のインストール方法
■ SFX の設定例
■ いろいろ
対応ブラウザー
[Internet Explorer] [Firefox] [Opera] [Sleipnir] [Safari] [Google Chrome]
連絡先:Micco
[e-mail]
[→Home]

● LHMelting for Win32  <Jun.11,2017>
[Win10][Win7][Vista][WinXP][Win2k][NT4.0][NT3.5x][WinMe][Win98][Win95][Win32s]

[LHMelt]

 LZH 書庫を始めとして, 各種書庫の操作を行うためのアプリです。 平均的な仕様ですが, 強いて言えば, 拡張子を気にせずに済むことと Win32s 等でも動作する点が特徴でしょうか。 (^^;; それぞれの書庫用の DLL が必要となりますが, LZH, ZIP, CAB, TAR (GZIP, BZIP), BGA 書庫の操作と ARJ, GCA, RAR 書庫の展開, そして ISH の作成復元が行えます。

 元々 DLL の動作確認用に作成されたものなので, 凝った機能は何もありません。 代わりに DLL 用のやたらめったら細かい設定メニューが氾濫しています。 Win32s でも動作可能でないといけない関係上, 非常に古くさいインターフェイスになってしまっています。 書庫内のディレクトリー構造をツリー表示することもなければ, ダイアログ等の画面構成も二昔前のものでしかありません。

 初心者の方や書庫関係に明るくない方は, 解らない設定は弄らないほうがいいです。 少なくとも「オプション設定」ダイアログから呼び出せる各 DLL の設定ダイアログの項目は弄ってはダメです。 LHMelt どころか, 他のアプリまで正常に動作しなくなります。


ダウンロード [旧版ダウンロードページへ]

Ver 2.00:正式公開版です。 通常はこちらをお使いください。
[WinSFX32M] LHMelt Ver 2.00 (LMEL200.EXE 2,759KB,2017/06/11)
MD5: 1588FA4948A3641C86659C15791BA3ED
SHA1: EE2E3BE5A82D7A7A9669B6A5E8DDD70EE50103DB
CRC32: 504403AA
.

更新履歴

Ver 1.65c からの変更点

Ver 1.65b からの変更点

  • LMLZH32.DLL Ver 2.67a を同梱しました。 (コマンドライン文字列にサロゲートペアが含まれていると, 正常に文字列を取得できなかったバグを修正しました。)

よくある質問

・脆弱性関連については, 以下のページを参照してください。

・Ver 2.00 以降を起動した際に「UNRAR32.DLL Ver 0.00 このDLLは使用できません。 ○○以降のものを使用してください。」と表示される

 現行の UNRAR32.DLL は「Windows アプリケーションにおける DLL 読み込みに関する脆弱性」に対応していません。 そのため, LHMelt が行っている当該脆弱性への対策が影響し, システムディレクトリー以外に UNRAR.DLL がインストールされていると, UNRAR32.DLL が UNRAR.DLL のロードに失敗してしまいます。

UNRAR.DLL のロードに失敗した場合 UNRAR32.DLL がバージョン情報として 0.00 を返すことから, 上述のエラーが表示されます。 UNRAR32.DLL 及び UNRAR.DLL については, システムディレクトリーへインストールするようにしてください。

・Windows 10 Pro を使用しているのに LHMelt のバージョン情報が「Windows 10 Enterprise x64」となっている *

 64 ビット版 Windows 10 Pro April 2018 Update (1803) においては, 64 ビット版ソフトにシステムから返される情報が「Pro」なのに対して, 32 ビット版ソフトへは何故か「Enterprise」を返します。 仕様なのかバグなのか判らないことから, LHMelt 側での読み替えなどは行っていません。

・ファイルを圧縮したのに全然圧縮されていない (サイズが変わらない)

 jpeg 形式の画像など, 一部のファイルは「それ自体すでに圧縮されている」ファイルです。 LHMelt (というか, 各 DLL。) がファイルを圧縮する機能をもっていたとしても, すでに圧縮されているものを, それ以上圧縮することはできません。

・「エンドマークが存在しません」エラーについて

 LZH 書庫を扱うツールの中には, 一部不正なヘッダーを作成してしまうものがあります。

 これまでの UNLHA32.DLL では, 致命的なものでない限りは, そのような書庫についても扱うようになっていましたが, そのような書庫を扱えない対応アプリが存在し, 結果として書庫やファイルを失ってしまう…という事故が意外と多く発生していました。 このため, 最近の UNLHA32.DLL については, 安全性を考慮して, そのような書庫については扱わないようになっています。

 特に多いのが「必要なエンドマークが存在しない」書庫で, 結果として, これによるエラーを比較的多く目にすることになってしまっています。

 これらは, 「破損ヘッダー」と見なせるものなので, "-jc" スイッチを使用することで, 処理を継続させることができます。 「エンドマークが存在しない」のエラーの場合は, 実際にはすべての格納ファイルの処理が終了しているので, メッセージ等が表示される以外の (展開できないファイルが発生する等の) 被害を伴いません。 拙作の LHMelt では「破損ヘッダーを読み飛ばす」を有効にすることで, この不具合を回避することが可能です。

・タイムスタンプがずれてしまう

 UNLHA32.DLL が通常作成する書庫では, タイムスタンプは, すべて協定世界時 (UTC) で扱われます。 Win3.1 や MS-DOS 用のプログラムでは, 環境変数の設定に基づいて UTC→地方時間 (例えば日本標準時間。) への変換が行われるようになっており, たとえ WinXP 等の環境であっても, コマンドプロンプト画面 (DOS 窓) 等で実行する場合には, この環境変数が設定されていないとタイムスタンプがずれてしまいます。

 日本国内で使用する場合には, 次の環境変数を設定してください。

TZ=JST-09

・ZIP 書庫への格納時に関係ないファイルまで格納されてしまう

 LHMelt は, 通常 ZIP 書庫の圧縮等の際には ZIP32J.DLL を使用します。 ZIP32J.DLL は内部で Info-ZIP の DLL 版である ZIP32.DLL を呼び出しますが, この ZIP32.DLL にはバグが存在していて, 日本語等マルチバイト文字が混在する名前のファイルを正常に扱えません。 通常は問題なく扱われるのですが, "Test[ア].TXT" といった ZIP32.DLL の正規表現指定に使われる文字 (この場合は '[' が該当し, 多くのソフトでは "Test[[]ア].TXT" のように正規表現を使った指定となる。) が含まれたファイルを指定すると, 本来合致しないはずの "Test[ω].TXT" まで格納されてしまいます。 同様に "ア*.TXT" のようなワイルドカード (正規表現) 指定を行った場合, "アマゾン.TXT" と一緒に "Ολυμποσ.TXT" (欧文フォントで表示されていますが, 全角のギリシア文字です。 Unicode なら "Όλυμπος" とするところです。) までもが格納されてしまいます。

 ソースを確認していないので推測ですが, このバグは「ある文字の 1 文字前」を参照する必要があった場合に, 当該文字がマルチバイト文字かどうかを確認せずにシングルバイトで照合を行ってしまっているためだと思われます。 (CharPrev() API を使用している等, 当該文字への移動は正常に行われている。)  上記の例では "ア" (0x8341), "Ο" (0x83AD), "ω" (0x83D6) が全て 0x83 で始まっているため同一と見なされてしまっているわけで, "ァ" (0x8340) から "ω" (0x83D6) までの 130 字超が同じ文字として扱われてしまう結果となります。
 ちなみに, 「ある文字の 1 文字後」といった通常の方向の場合には大丈夫なので, 「*ン.TXT」といったような指定を行った場合は, 期待どおり "アマゾン.TXT" のみが格納されます。

 このバグは Ver 2.3x に共通していることから, ZIP32.DLL を使用する場合, '[' のような文字を使用しないようにする必要があります。 使用する場合は 7-ZIP32.DLL を使用して ZIP 書庫を扱う必要が出てきます。
 なお, このバグは Ver 2.2 には存在しませんので, LHMelt では (7-ZIP32.DLL が使えない場合等を考慮して) 要求版を 2.2 まで引き下げてありますが, 9 年近く前の版であることから, Ver 2.2 の使用は, お勧めしません。

・Ver 1.65a 以降を起動した際に「SCFunc.dll が見つからなかったため、このアプリケーションを開始できませんでした」と表示される

 SCFunc.dll は StarSoftcomm の StarCenter に含まれるモジュールです。 当該ソフトがどういったソフト (システム) なのかは不明ですが, Web で得られる情報によると常駐した上で他のプロセスを監視しているようです。

当該ソフトが「安全でないライブラリのロードにより、リモートでコードが実行される (マイクロソフト セキュリティ アドバイザリ 2269637)」の肝に当たる「カレントディレクトリーからの DLL ロード」に依存しているため, それを禁止している Ver 1.65a 以降の LHMelt への接触が上手く行えなくなっているのが原因です。 他のプロセスに接触しようとするソフト側の不具合ですので, LHMelt に限らず同様の問題が発生しますが, Adobe Air のインストーラー方面で発生する頻度が高いようです。

 言わずもがなですが, StarCenter に限らず, 「○○が見つからなかったため~」が表示された場合は, その当該 DLL を使用しているソフトに上述の脆弱性が存在することになります。 特に今回のような他のプロセスを監視する類では影響が甚大 (ソフトの性格からしてシステム・管理者権限を容易に取得できる環境で動作しているでしょうから, 真の意味で「何でもあり。」) ですので, 可能であれば, 当該ソフトの更新や乗り換えを検討したほうが良いかもしれません。

[→Page top] [→Home]