2017/02/14

UnAceV2J.DLL


ACE Compression SoftwareのUnAceV2.DLLを使用して、共通アーカイバ仕様APIを実装したDLLです。対応アプリケーションから呼び出されます。

概要

ACE書庫を解凍するためにACE Compression Softwareが提供するUnAceV2.DLLは、慣れればアプリケーションから使えない事はないが、日本人の開発者には使い慣れた共通アーカイバ仕様のAPIの方が使いやすいと思うので、ラッパDLLを作成してみました。
ちなみに、世間には同様のコンセプトのラッパDLLが存在しますが、いつまで待っても進捗しないので、自アプリでACE書庫展開を実現するには自分で作るしか!と思い作成を開始し、予想通り先にリリースしてしまいました。

UnAceV2J.DLLがやっている事

UnAceV2.DLLで多用されているコールバックなAPIをクラス内に実装し、結果出力を内部変数に保持し、共通アーカイバ仕様APIの戻り値に加工します。

インストール方法

同梱されたUnAceV2.DLLまたは、 ACE Compression Softwareから取得したUnAceV2.DLLと、このUnAceV2J.DLLをWindowsのシステムディレクトリに置いてください。

アンインストール方法

インストール時にコピーしたファイルを削除してください。

使用方法

UnAceV2J.DLLに対応したアプリケーションを使ってください。
UnAceV2J.DLL は、共通アーカイバ仕様DLLのAPI仕様のほとんどを満たしている完成品です。(バグがあったらごめんなさい)アプリケーションから使用するための必要最低限の API は実装されています。
APIの使用方法に関しては、書庫付属のドキュメントを参照してください。

履歴

バージョン 日付 項目
0.01 2004/11/30 最初のバージョン。
0.02 2004/12/25 偽Unace32.dll機能を実装。ネイティブなUnAceV2J.DLL内APIをコールするラッパAPIで、UnAceV2J.DLLをUnace32.dllとリネームすると、Unace32.dllを利用するアプリケーションから使える...かも。
「l」コマンドの場合は、パス情報を出力しないようにした。(これが実用的かどうかは別として、UnAce32.exeの仕様に合わせるということで)
Unlha()の仕様に倣い、UnAce()の時に、引数の_hwndに ::EnableWindow(_hwnd, FALSE) するようにした。
UnAceV2.DLLを同梱。 ソース添付。
0.03 2004/12/28 UnAceFindFirst, UnAceFindNextでの書庫内データ取得時に最後のファイルが取得できないバグの修正。
0.04 2005/05/17 storedメソッドで圧縮されたファイルをUnAceGetMethodで取得できないバグの修正。
0.05 2006/02/25 ファイルが列挙されない事があるバグを修正した。
0.06 2010/05/27 Visual Studio 2005でリビルド。
UnAceV2.DLLはVer2.6のものを同梱。
0.07 2010/07/04 Visual Studio 2010でリビルド。
0.08 2010/08/08 Visual Studio 2010 のMFCをスタティックリンクするとDLLのサイズが巨大になるので、MFCをやめてATL/WTLを使用するようにソースを修正。
レスポンスファイルの両端が「"」で囲まれている場合に対応。
 0.092016/03/29  Visual Studio 2015 でリビルド。サポートサイトのURLとメールアドレスを変更。

『指定外の場所へファイルが展開されてしまう脆弱性』の問題の対応

『指定外の場所へファイルが展開されてしまう脆弱性』の問題というのが書庫を展開するDLLやアプリケーション側で対応されたりしていますが、後発の UnAceV2J.DLLでは、0.01から対応済みで、コマンドラインオプションで明示的に「--ea0」としない限り「..」を含んだファイルはユーザの許可無しに展開されません。詳しくは、UnAceV2CMD.txtの「--ea」オプションを参照してください。

ACE 書庫作成機能について

ACE 書庫からの展開機能に関しては、フリーソフトとして UnAceV2.DLL が提供されていますが、圧縮機能に関しては別DLLで有料となっており、私自身レジストするほど ACE 書庫の魅力を感じないので、対応する予定はありません。
同様のコンセプトで、同じくACE書庫を扱える某DLLが、将来に ActiveAce対応するらしいです。また、某所にて ActiveAce に対応した Ace32.DLL というものもあるらしいです。どちらの場合も、シェアウェアである ActiveAceを利用するため、試用期間が過ぎての利用は、ActiveAce のレジストをする必要がありますね...。既に過去の話題で、現実には何も実現していません。

ダウンロード

unacev2j009.zip (227k)

5 件のコメント:

shoda T. さんのコメント...

#直接メールしてもいいけど、とりあえず関連性の深いここにコメントしときます。
すでにご存じかも、ですが、Unacev2.dll の脆弱性と、ace開発元の消失などを契機に Explzh が ACE 対応を止めるそうです。
詳しくは鬼束さんのFacebookを見てください。
https://www.facebook.com/hiroyuki.onitsuka

脆弱性の話はこちら↓
https://www.itmedia.co.jp/news/articles/1902/21/news072.html

と云うことで、UnAceV2J.dll はどうしますか?という話です(^^)

新山(へろぱ) さんのコメント...

パストラバーサルの問題らしいですが、UnAceV2J内部で、パストラバーサル対策をしているので、影響はないはず。(変なパスで格納されているファイルは、展開時エラーとなるはず。)
まぁ、ACE形式のファイルなんて、現時点でほとんど出回っていないので、どうでも構わないです。
ただ、ACEの開発元もなくなったのであれば、このアプリも寿命を迎えたと考えても構わないかも。

shoda T. さんのコメント...

ですね。UnAceV2Jで対策と書かれていたので、たぶんディレクトリトラバーサル問題もラップされてるとは思ったのですが、鬼束さんが大騒ぎ(w)なので(^^)
ExplzhはUnAceV2.dllを直接呼んでるいてV2Jの恩恵に与ってなかったので、対策するか切り捨てるかで、開発元の消失を理由に切り捨てを選んだようです。

『開発元の消失』ですが、実際のところはどうなってるのかよくわかりません。
我々からの唯一の接点となるホームページが「under construction」になっている(ドメイン自体は消失していない)だけで・・・ま、開発元と云ってもたぶん個人(?)だと思うので、なんらかの原因でホームページを消失したのか、単に興味を失って、というだけのことなのか謎です(^^)

では、UnAceV2J.dllについてはこちらの紹介ページの方に、簡単にそのあたりの説明を付け加えておきます(^^)

shoda T. さんのコメント...

取りあえず説明は入れましたが、よく読んだら Explzh は単に ace のサポートを止めただけでなく、インストール時に(更新時も?)システムフォルダの UnAceV2.dll を削除してしまうみたいですね。

それで鬼束さんから提案があり、

1.
>>Unacev2J.dllでは、システムディレクトリにないUnacev2.dllをロードする仕様に
>>変更された方がよいのではと思いますが。

2.
>>ドキュメントにもその旨の理由を記載しておいてもらうと嬉しいです。

と。
どうも、Facebook でぼやいてたユーザさんからの問い合わせ電話というのは、Unacev2J.dllに関する内容だったみたいです(-_-)

shoda T. さんのコメント...

その他に、

1.どうせ実ユーザはほとんどいないだろうから、このまま放置。
2.めんどうなので、公開を止める。

という選択肢もありますね(^^♪