======================= UNLHA32.DLL Ver 3.00 ======================= Micco (May. 7,2017) ■■■■■■■■■■■■■■■ 注意喚起 1 ■■■■■■■■■■■■■■■  Windows には「実行ファイルにインポートテーブルが存在するだけで,システ ム DLL と同じファイル名を使用した DLL ハイジャックが成立する」という巨大 で事実上修正不可能の脆弱性が存在します。  各プログラム側でもある程度対応可能であることから,UNLHA32.DLL 本体及び WinSFX32/WinSFX32U については対応していますが, 以下の制限が存在するため 注意が必要となります。   1:Windows 10 など Windows 8/8.1 以降の OS     現在は対応できていますが, OS のアップデートやアップグレードで環    境が変化することで, 対応できなくなる可能性があります。(そもそもが    OS 側の問題であるため)  システムやプログラムへ接触する監視ソフト    や対策ソフトの類が上記の脆弱性に対応していない場合についても,その    影響を受ける可能性があります。   2:Windows 7     sspicli.dll については特殊な事情が存在するため, 不正な DLL へ置    き換わっている可能性が少々高いといえます。従って,「システムディレ    クトリ以外の同名のファイルを拒否する」「システムディレクトリ上のも    のについても正規ファイルかどうか確認する」などの対策をシステム設定    などで行うようにしてください。     上述の脆弱性について素直な対策のみ行ったプログラムについては,    この DLL について DLL ハイジャックが成立してしまいます。   3:Windows Vista     少なくとも apphelp.dll について, 各プログラム側での対策が不可能    なため,当該 DLL について DLL ハイジャックが成立してしまいます。    上記2の sspicli.dll と同様の対策を施すことで, 状況を軽減すること    が可能です。   4:Windows XP 以前     多数のシステム DLL が上記3の apphelp.dll と同様な状況へ陥ってい    ることから,Windows XP 以前については,対応不可能といえます。   5:UNLHA32.DLL を呼び出すプログラム側の問題     当然ですが,UNLHA32.DLL が対応済みであっても,それを呼び出すプロ    グラム側が対応していなければ DLL ハイジャックが成立してしまいます。    その場合は,当該プログラムを "C:\Program Files" 配下のディレクト    リーへ配置することで,若干ながら状況の軽減化を図ることが可能です。    (C:\Program Files 配下のディレクトリーへの書き込みに管理者権限が必    要なため。)   6:その他     2〜3については,KB2533623 の更新プログラムが適用されたシステム    が前提となります。 当該プログラムが未適応の環境については DLL ハイ    ジャックへの対応は不可能となります。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■ 注意喚起 2 ■■■■■■■■■■■■■■■  細工されたヘッダをもつ LZH 書庫については, 多くのウイルス対策ソフト・ システムが検疫できません。(確認できたもので,2010 年4月現在の最新版につ いて 3/16 のみが検疫可能。)  それに対して,少なからぬアーカイバは,仕様上は正しいことから,そういっ た書庫を普通に扱えます。  そのため, ゲートウェイ形式での検疫による対策方法を採っている場合など, クライアントに対策ソフトがインストールされていない環境では,殆ど何の苦労 もなく侵入・感染が可能となります。クライアントにインストールされている場 合でも,展開された時点で検疫が可能なものの,プリビュー等ファイルが作成さ れない場合については検疫が行われません。  残念ながら,このような状況に対して各対策ソフトベンダーの対応は進んでい ませんし,脆弱性情報として状況が公開されることは過去も今後も見込めません。  このようなことから, 特に企業・団体においての LZH 書庫利用はお勧めしま せん。なかでも,上記のようなゲートウェイ形式のみで検疫を行っている場合は, LZH 書庫自体を拒否するようにして下さい。 参考情報 URI:http://micco.mars.jp/vul/2010/mhvi20100425.htm ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ######################################################################## ########## ######### ########## 自己解凍書庫以外での lh6/lh7/lhx 形式での公開配布は ######### ########## 行わないようにお願いします。 ######### ########## ######### ########## DLL の手動インストール方法が解らない方は, Web Page ######### ########## のほうも参照してください。 ######### ########## http://micco.mars.jp/micindex.html ######### ########## ######### ########## ドキュメントは最後まで目を通すようにしましょう。 ######### ##########「よくある不具合」はドキュメント末に移しました。 ######### ########## ######### ######################################################################## 0.はじめに  「UNLHA32.DLL」をダウンロードしていただき有り難うございます。  UNLHA32.DLL は,『統合アーカイバプロジェクト』の API 仕様に準拠した LZH 書庫に対する様々な操作を行うための DLL (ダイナミックリンクライブラリ) です。 "32" の名前が示すように,Windows Vista/XP/2K/NT といった NT 系 OS (ただし x86),及び Windows Me/98SE/98/95,Win32s といった 9x 系 OS,それ ら Win32 API が実装された環境でのみ動作が可能となっています。 x64 環境上 での (Win32 アプリとしての) 使用については正式対応していませんが,問題な く動作しているようです。  名前に反して初期の Ver 0.19 から格納にも対応しています。また,Win 版自 己解凍書庫については,UNLHA.DLL 同様 Mt.Wide 氏の「ファイルマネージャ拡 張メニュー (Explorer 拡張メニューではない ^^;)」で作成されるものと同等の ものが作成可能となっています(WinSFX(M) 及び WinSFX32(M))。  UNLHA32.DLL は開発中のバージョンであり,API 等については今後変更される 可能性があります。現在のものが最終決定版ではないということを十分ご理解の 上ご使用ください。また,今後の状況によっては,書庫及びヘッダ形式,コマン ドやスイッチ等についても,仕様等の変更される可能性があります。 1.ファイルについて  ULH3300.EXE を実行して展開すると以下のファイルが得られます。 UNLHA32.DLL : 32 ビット版 DLL 本体です。 通常はシステムディ レクトリにインストールされます。 UNLHA32.H : コンパイルのためのヘッダファイルです。 UNLHA32.LIB : VC++ でコンパイルするためのインポートライブラ リです。 DELREG.EXE : アンインストール用のファイルです。 通常はウィ ンドウズディレクトリーにインストールされます。 UNLHA32.INF : UNLHA32.DLL のオリジナル配布自己解凍書庫及び DELREG.EXE が使用する DLL インストール用ファ イルです。 UNLHA32.TXT : このドキュメントです。 UNLHA32E.TXT : UNLHA32.TXT の英文版簡易ドキュメントです。 API.TXT : UNLHA32.DLL の基本 API 説明ファイルです。 NOTE2.TXT : API.TXT の補足説明ファイルです。 COMMAND.TXT : Unlha() へ渡すコマンド文字列についての説明ファ イルです。 ヘッダや圧縮メソッドの概略,SFX に ついてもここに記述されています。 NOTE.TXT : COMMAND.TXT の補足説明ファイルです。 HEADER.TXT : 書庫ヘッダの仕様説明ファイルです。 WINMES.TXT : UNLHA32.DLL が送出するメッセージと関連 API の 説明ファイルです。 ENUMAPI.TXT : UnlhaSetEnumMembersProc() 関連 API の説明ファ イルです。 STRTABLE.TXT : UNLHA32.DLL が使用するストリングテーブルと言 語設定関連 API の説明ファイルです。 INFCOM.TXT : Win32SFXM で使用される設定ファイル用のコマン ド説明ファイルです。 QandA.TXT : 主な質問集です。 HISTORY.TXT : UNLHA32.DLL の更新履歴です。 ! 及び $ : 自己解凍以外の方法で展開を行った場合は, これ らのファイルが展開されます。 SFX 用のファイル なので,削除しても問題ありません。  バンドルや書籍等への収録の場合, UNLHA32.DLL と UNLHA32.TXT のみである ことが多々ありますが,他のドキュメントにも重要な情報が記述されていますの で,なるべくオリジナルの配布ファイルを手に入れて,一読されることをお薦め します。 2.使い方  UNLHA32.DLL はライブラリなので,それ単体での使用はできません。必ず対応 アプリが必要となります。 A. プログラマが対応アプリを作成する場合 API 等については,API.TXT をはじめとした各ドキュメントを参照して ください。 UNLHA32.DLL を使用するには UNLHA32.H をインクルードし リンク時に UNLHA32.LIB を使用して静的リンクを行うか, LoadLibra- ry()/GetProcAddress() によりダイナミックリンクを行うことが必要で す。プログラムの手間は増えますが,DLL がインストールされていない 場合など,ロード失敗の際にプログラム側で自由に対処が可能となるダ イナミックリンクの方法をお薦めします。 後述されている『統合アーカイバプロジェクト』では,UNLHA32.DLL を 始めとしたアーカイバー DLL の使用法等が紹介されています。 B. 一般ユーザが対応アプリを使用する場合 この DLL を使用するには,必ずこの DLL に対応したソフトが必要とな ります。『UNLHA32.DLL に対応 (又は使用)』と明記されたソフトを使 用してください。『統合アーカイバ』という表現が使われている場合も あります。 配布ファイルである ULH3nnn.EXE は簡易インストール機能付きの自己 解凍形式書庫となっていますので, そのまま実行してください。 イン ストールが開始されます。ただし,Windows Vista/XP/2K などの NT 系 OS では管理者権限でインストールを行う必要があります (Vista 以外 ではパワーユーザでもインストール自体は可能ですが,インストール終 了時にエラーが表示されます)。 Windows XP 等で『全てのユーザ』配 下へのメニュー登録を行う場合は, (管理者権限ではなく) 管理者アカ ウントでインストールを行う必要があります。 なお,通常の書庫としてアーカイバーソフト等で扱うことも可能なので, 手動でインストールを行いたい場合等は,適宜展開作業を行ってくださ い。 手動でインストールを行う場合,通常,UNLHA32.DLL はウィンドウズ・ システムディレクトリー (通常は C:\WINDOWS\SYSTEM32) へコピーする ことになります。 一応,私のページ (http://micco.mars.jp/micindex.html) に UNLHA32. DLL の手動インストール例を掲載してあります。通常は必要ないはずで はありますが…。 陥りやすい注意点については,このドキュメントの最後に多少ながら記 述されています。 3.動作環境  UNLHA32.DLL は以下の環境での動作を確認しています。 Warp を含む OS/2 で の Windows セッションでは動作しません。Power MAC の SoftWindows や PC 上 の VMware 等の環境上では問題なく動作しています。 ゲストとはいえ,OS その ものの上で動作させるわけですから…。 [開発環境] ・Microsoft Windows XP MCE 2005 Build 2600 (SP3) VMware Workstation 12.5,1GB-RAM (ゲスト) ・Microsoft Windows 10 Pro (x64) 1703 Build 15063.138 東芝 dynabook Qosmio T851/D8CR 改, MZ-75E2T0,8GB-RAM (ホスト) [使用コンパイラー] UNLHA32.DLL 本体 : Microsoft Microsoft Visual C++ 5.0J pro SP3 DosSFX : SLR Systems OPTASM 1.60 + Turbo Link 7.1.32.2 WinSFX(M) : Borland International Borland C++ 5.01J Dev WinSFX32(M) : Microsoft Microsoft Visual C++ 5.0J pro SP3 [動作確認環境] ・Microsoft Windows 7 Ultimate Build 7600 (SP1) 東芝 PAWW78DLN10W dynabook Satellite WXW/78DW 改, WD10TPVT,4GB-RAM SONY VGN-P90S VAIO type P 90S,2GB-RAM ・Microsoft Windows Vista Business Build 6002 (SP2) 東芝 PANXW76HLD10PW3 dynabook NXW/76HPW,3GB-RAM 東芝 PP16190C2F64P dynabook SS 1610 90C/2,1.25GB-RAM ・Microsoft Windows Vista Home Premium Build 6002 (SP2) SHARP WS016SH WILLCOM D4,1GB-RAM [動作確認環境 (VMware 12.5 ゲスト OS)] ・Microsoft Windows 10 x64 Pro 1607 ・Microsoft Windows 10 Pro 1607 ・Microsoft Windows 8.1 x64 Pro ・Microsoft Windows 8 x64 Pro ・Microsoft Windows 7 x64 Professional Build 7100 (SP2) ・Microsoft Windows 7 Ultimate Build 7100 (SP2) ・Microsoft Windows Vista Ultimate Build 6002 (SP2) ・Microsoft Windows XP (MCE 2005) Build 2600 (SP3) + IE 8.0 ・Microsoft Windows XP (Home) Build 2600 (SP3) + IE 8.0 ・Microsoft Windows 2000 (Pro) Build 2195 (SP4) + IE 6.0 SP1 ・Microsoft Windows NT 4.0 Build 1381 (SP6a) + IE 6.0 SP1 ・Microsoft Windows Me Build 3000 + IE 6.0 SP1 ・Microsoft Windows 98 SE Build 2222A + IE 6.0 SP1 ・Microsoft Windows 98 SP1 Build 1998 + IE 6.0 SP1 ・Microsoft Windows 95 Build 1212 (OSR 2.5) + IE 5.0 SP2 ・Microsoft Windows 95 Build 1212 (OSR 2.5) + IE 4.01(SP2) ・Microsoft Windows 95 Build 950a (SP1-kernel 952) + IE 5.5 SP2 [動作確認環境 (Virtual PC 2007 SP 1 ゲスト OS)] ・Microsoft Windows NT 3.51 Build 1057 (SP3) ・Microsoft Windows 3.1J R1.0 + Win32s 1.25J Build 142 4.転載及び著作権について  UNLHA32.DLL はフリーソフトウェアです。商用目的ではない,個人的な使用, オリジナル書庫での他ネット等への転載及び配布に関しては,特に制限は課せら れません。ただし,転載・配布する場合に,メディア代等以上の手数料を徴収し たり,使用に制限を付けることはこれを禁じます。書庫ファイル及び格納ファイ ルの改変を含む,オリジナル配布書庫以外の形態での転載・配布は認めません。  他ネット等への転載時には,事後でも構いませんので私まで連絡をお願いしま す。  商用・公用・私用にかかわらず,書籍等への収録やソフトへのバンドルについ ては条件がありますので,必ず事前に連絡をお願いします。企業・団体等での業 務利用や業務用ソフトやオンラインソフトでの使用を前提とした転載等もこれに 含みます。連絡がなかった場合には,しかるべき処置を講じさせていただく場合 があります。  これらの転載・収録・バンドル等の際は, ライブラリ (DLL) が公開されてい たサイト等の管理者へ連絡が必要な場合もありますので,注意してください。 一次配布先である @nsk については必要ありません。  UNLHA32.DLL の圧縮・展開ルーチン等については, 基本的に LHx Ver 2.02a のソースを流用し,AR.EXE 950528 を参考に改変を行っています。従って,この 部分についての著作権は吉崎栄泰氏及び奥村晴彦氏が保有しています。Win版 及 び NT版 自己解凍ルーチンについては Mt.Wide(広山雅明)氏が著作権を保有して います。DLL 化等その他の部分についての著作権はMiccoが保有しています。  これらのプログラムの使用によって生じた損害等については,作者及び原著作 者は何も補償する義務を負わないこととさせていただきます。 5.公開先について  UNLHA32.DLL の一次配布先は, http://micco.mars.jp/micindex.html となっ ています。 β版については,(当然ながら) あまり転載が行われない関係上ここ からダウンロードすることになると思いますが,正式版については,比較的タイ ムラグも少なく, また DLL の使用法等の情報も得られることから『統合アーカ イバプロジェクト』http://www.csdinc.co.jp/archiver/ 等からダウンロードさ れるのもいいかと思います。 6.サポートについて 1.メール micco(a)mbd.nifty.com サーバー及びメールブラウザの設定上メールが届か ない (拒否,または削除される) 場合があります。 なお,"(a)" の部分は "@" に読み替えてください。 2.メーリングリスト ネット環境の波…といいますか,今ではすっかり Facebook や Twitter などの SNS 上で開発の話も行うようになりましたが, Web ページ『統合アーカイバ』内のメーリングリスト上で DLL 関係の話題についても引き続き扱われていますので, そちらでのサポートも可能です。 詳しくは『統合アーカイバ』 のページを参照してください。  基本的に,私は日に 1 回しかアクセスできませんので,最低 3 日ほどの余裕 をもってメールするようにお願いします。『読んですぐ返事』が不可能 (なほど メールがたくさんくる ^^;) 関係上, 下手をすると返事が 2 日後…ということ もありますので。  なお,UNLHA32.DLL は吉崎氏に連絡した上で私が独自に開発したものであり, 基本的に吉崎氏は関与していません。従って,吉崎氏へのメールは御遠慮くださ るようお願いします。自己解凍書庫関係の Mt.Wide 氏についても同様です。  また, 『統合アーカイバプロジェクト』http://www.csdinc.co.jp/archiver/ の管理者である shoda T. 氏への問い合わせメールが増えています。 UNLHA32. DLL そのものに関する問い合わせは私のほうにお願いします。 7.謝辞  素晴らしいアーカイバー LHA を作成された吉崎栄泰氏,Win 版及び NT 版自 己解凍ルーチンの使用を許可してくださり,また,ルーチンを供与してくださっ た Mt.Wide さん, そして作成を影で支えてくださったユーザの皆さんに感謝し ます。 8.最後に UNLHA32.DLL が何かのお役に立てれば幸いです。 Micco (micco(a)mbd.nifty.com) [よくある不具合] ======================================================================== ■ファイルを圧縮したのに全然サイズが変わらない  いくら UNLHA32.DLL にファイルを圧縮する機能が施されていたとしても, 『すでに圧縮されているファイル』をそれ以上圧縮した場合は効果が上がりま せん。昨今の画像や映像・音声といったマルチメディア系のファイルは『それ 自体すでに圧縮されている』ファイルであることが多々あります。 ■配布ファイルを展開したのに UNLHA32.DLL だけ表示されない  Ver 1.54c 以降では,配布ファイルである自己解凍書庫を実行して展開を行っ た場合には,DLL についてはシステムディレクトリーに展開されます。  アーカイバーソフト等で直接展開を行った場合には,Explorer ではユー ザーが指定しない限り ".DLL" の拡張子をもつファイルは通常表示されません。 「表示―オプション」メニュー (IE 4.0 等が導入された環境では「表示―フォ ルダオプション」) ですべてのファイルが表示されるように設定してください。 その際には『登録されたファイルの拡張子は表示しない』のチェックを外す必 要があります。これが有効 (つまり初期状態) だと,例えば,UNLHA32.DLL の 配付書庫を展開した場合, アイコンが異なる同じ名前のファイルが 5 個表示 されることになってしまいます。 ■タイムスタンプのずれについて  UNLHA32.DLL が通常作成する書庫では,タイムスタンプはすべて協定世界時 (UTC) で扱われます。 MS-DOS(DOS 窓を含む)や Windows 3.1 用のプログラ ムは環境変数の設定に基づいて UTC→地方時間(例えば日本標準時間)への変 換が行われるようになっているため,環境変数が設定されていない環境ではタ イムスタンプがずれてしまいます。 もしタイムスタンプが 9 時間ずれている ようなら間違いなくこの不具合です。使用するプログラムによっては,まれに 2 時間だけずれる場合もありますけれど…("TZ" が設定されていない場合に PST とみなすプログラムがあるんです ^^;)。  日本国内においては,次の環境変数を設定してください。なお,これは Win- dows 95 等の DOS 窓でも必要となります。 set TZ=JST-9  環境によっては,"TZ=JST-09" とする必要があるかもしれません。  上記の設定を行った場合でも, Win 9x ではシステムの内部情報が異常とな り正常なタイムスタンプでの展開が行われないことがあります。このような場 合には,タイムゾーンの設定をやり直すことで大抵の場合は正常な動作となり ます。 ■UNLHA32.DLL 対応プログラムで使用するための UNLHA32.DLL の手動インストー ルについて  雑誌の付録 CD-ROM 等などにおいては,独自の書庫に再編成された状態で収 録されることが多々あり,DLL の手動インストールが必要となる場合がありま す。  最低限必要なのは, UNLHA32.DLL をシステムディレクトリー (Windows 95 系の場合,通常は C:\WINDOWS\SYSTEM。Windows XP/2K 等では C:\WINDOWS\SYSTEM32) へコピーすることです。  上記の記述だけで難しい場合は,私の WEB ページ (http://micco.mars.jp/micindex.html) にインストール方法の説明が掲載さ れています。 ■「厳格なファイル名サーチ」設定について  この設定については,通常チェックを外すようにしてください。この設定が 有効になっていると,大抵のアプリでパス情報付きの格納ファイルが表示され なくなります。そのようなファイルが表示されない場合は,UNLHA32.DLL の設 定ダイアログを呼び出せるプログラムを用いて,この項目の設定を確認してく ださい。 ■Ver 1.51 以降の DLL を使用した場合に,対応ソフトが正常に動作しない  『Ver 1.51 以降ではダメで Ver 1.50 以前なら大丈夫』という現象が発生 した場合は, UNLHA32.DLL の "-u" 及び "-gf" スイッチの仕様変更が原因と なっていることが考えられます (例えば WinLM32 等)。この現象が発生した場 合は,DLL の設定ダイアログが呼び出せるソフトを使用して『旧式の gf スイッ チ動作』を有効にすることで,不具合を回避することができます。  可能であれば,COMMAND.TXT のレジストリーの項目を参照した上で,レジス トリーによるソフトごとの個別設定を行ったほうがよいでしょう。 ■Ver 1.45 以降の DLL を使用した場合に,対応ソフトが正常に動作しない  『Ver 1.45 以降ではダメで Ver 1.44 以前なら大丈夫』という現象が発生 した場合は,UNLHA32.DLL のログ出力における改行コードの変更が原因となっ ていることが考えれます (例えば GV 0.84a 等)。この現象が発生した場合は, DLL の設定ダイアログが呼び出せるソフトを使用して『旧式ログ出力』を有効 にすることで,不具合を回避することができます。  可能であれば,COMMAND.TXT のレジストリーの項目を参照した上で,レジス トリーによるソフトごとの個別設定を行ったほうがよいでしょう。 ========================================================================