### 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]

● UNLHA32.DLL for Win32  <May.15,2017>
[Win10][Win7][Vista][WinXP][Win2k][NT4.0][NT3.5x][WinMe][Win98][Win95][Win32s]

 「統合アーカイバ・プロジェクト」の API 仕様に準拠した LZH 書庫の操作を行うための DLL (ダイナミック・リンク・ライブラリー) です。 基本的には LHA.DLL と同様の API に若干の追加が行われたものとなっていますので, Win3.1 で LHA.DLL を使ったことのある方であれば UNLHA32.DLL も同じように扱えるはずです。

 元々「LHA.EXE と同じ感覚で手軽に書庫操作を行う」ことを目的として作られているので, 「格納ファイルの分割展開・圧縮」「複数の格納ファイルを同時にオープン」といった細かい操作は行えません。 反対に LHA.EXE のコマンド知識があれば UNLHA32.DLL を使って同じような感覚で書庫操作が行えます。

 LHA.EXE のコマンド仕様としての観点では, LHA.EXE Ver 2.67 を基準として数々の機能追加を行ってあります。 が, 最初に作成したのが UNARJ.DLL ということで, ARJ 系のコマンド・スイッチも付加されているので, 体系的にはかなり混乱してしまっています。

 DLL であることから, UNLHA32.DLL 単体では何もできません。 (例えば) ここで公開されている LHMelt のような対応アプリが必ず必要になります。


過去の更新履歴

Ver 2.67a からの変更点

  • 『UNLHA32.DLL で作成された自己解凍書庫における任意の DLL 読み込みに関する脆弱性』について対応しました。
  • 『UNLHA32.DLL における任意の DLL 読み込みに関する脆弱性』について対応しました。

Ver 2.67 からの変更点

  • 正式版としてコンパイルを行っただけで, 特に変更点はありません。

Ver 2.66a からの変更点

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

Ver 2.66 からの変更点

  • 正式版としてコンパイルを行っただけで, 特に変更点はありません。

Ver 2.65d からの変更点

  • WinSFX32(U) のファイル入出力ルーチンについて, 直接 API を呼び出す方式から UNLHA32.DLL のサブセット相当のルーチンを呼び出す方式へ戻しました。

Ver 2.65c からの変更点

  • 正式版としてコンパイルを行っただけで, 特に変更点はありません。

Ver 2.65b からの変更点

  • WinSFX32(U) において, 展開先が相対ディレクトリーで指定された場合に, 環境によってはコマンド実行に失敗することのあったバグを修正しました。

Ver 2.65a からの変更点

  • Ver 2.63a で行った Windows Vista 環境でのプログレスバーにおける到達予測の処理を削除しました。

Ver 2.65 からの変更点

  • Ver 2.65 において, "-d" スイッチ等でディレクトリーを格納する設定とした場合に,正しいパス情報でディレクトリーメンバーが作成されなくなっていたバグを修正しました。

Ver 2.64c からの変更点

  • ディレクトリーメンバーの格納を行う際に, 当該ディレクトリー上のファイル等の処理を全て終えた後にディレクトリー自身の登録を行うようにすることで, ファイル等が存在する場合にもディレクトリーのタイムスタンプが復元されるように改善しました。

Ver 2.64b からの変更点

  • Ver 2.63 以降において, 設定ダイアログでのラジオボタンのグループ分けが, 環境によっては上手く行われないことのあったバグを修正しました。

Ver 2.64a からの変更点

  • 非インストーラーモードでの WinSFX32M 作成に失敗していたバグを修正しました。

Ver 2.64 からの変更点

  • 正式版としてコンパイルを行っただけで, 特に変更点はありません。

Ver 2.63i からの変更点

  • WinSFX32(M) について, WH_CBT フック処理の改善を行いました。
  • コントロールに対しての位置調整処理について, GetSystemMetrics() API を使ったものから ClientToScreen() を使ったものへ変更しました。 (Windows Vista 等では SM_CXSIZEFRAME 等に対する従来の前提が通用しないため。)

Ver 2.63h からの変更点

  • WinSFX32U が英語モードで正常に動作しないことのあったバグを修正しました。
  • MyReadFile() について, ERROR_HANDLE_EOF を返すべきところを ERROR_INVALID_PARAMETER を返してしまうことのあったバグを修正しました。
  • 拡張ヘッダー内での HDR_EXPLOIT_SIZE 発生については, 即時に ERROR_HDR_EXPLOIT エラーで処理を中止するようにしました。

Ver 2.63g からの変更点

  • Ver 2.63 以降において, 一部のソフトについて UnlhaFindFirstW() 等による検索が行えなくなっていたバグを修正しました。

Ver 2.63f からの変更点

  • Ver 2.63 以降において, ヘッダーサイズ調整のダミーデーターが付加されたヘッダーの CRC 計算が正しく行われていなかったバグを修正しました。

Ver 2.63e からの変更点

  • Ver 2.63 以降において, h0 形式ヘッダーについて常にパスを付加して扱ってしまっていたバグを修正しました。
  • 安易に設定変更を行った結果, 正常に格納ファイルを扱えなくなる事例が後を絶たないことから, 設定ダイアログの『厳密なファイル名サーチ』項目を削除しました。これに伴い, 既存の設定による影響を排除するため, レジストリーについても変更が行われています。

Ver 2.63d からの変更点

  • MyMoveFileExW() の MoveFileEx() API 代替ルーチンについて, MOVEFILE_REPLACE_EXISTING が指定されていない場合に (無条件で) エラーを返してしまうことのあったバグを修正しました。
  • MyMoveFileExW() の MoveFileEx() API 代替ルーチンについて, 前処理の MyDeleteFileW() が FILE_NOT_FOUND となった場合に, そのままエラーを返して終了してしまう可能性のあったバグを修正しました。
  • Ver 2.53 以降において, UnlhaOpenArchive2() 等の API へ "-jx" スイッチが渡された際に, NULL ポインター参照で一般保護エラーとなってしまっていたバグを修正しました。

Ver 2.63c からの変更点

  • UnlhaEnumMembersProc() を使用しての圧縮 (格納) ファイル名指定が行えなくなっていたバグを修正しました。
  • WinSFX32U でのショートカット作成について, Unicode での DDE コマンド実行が正常に行われず, Explorer が落ちてしまうことのあったバグを修正しました。 (SFX のダイアログが ANSI で作成されてしまうことがあり, サーバー側に対してのみ Unicode ウインドウの確認を行っていたため。)

Ver 2.63b からの変更点

  • "-gr" スイッチを使用してのメンバー名変更が正常に行えなくなっていたバグを修正しました。

Ver 2.63a からの変更点

  • WinSFX32U が Windows NT 4.0 で動作しなかったバグを修正しました。 (フラグの指定ミスで CP_THREAD_ACP が適用されてしまっていたため。)
  • WinSFX32U のテロップ表示が乱れてしまうことのあったバグを修正しました。
  • Ver 2.63 以降, 'J' 命令での書庫連結が正常に行われていなかったバグを修正しました。
  • lh0/lh1 形式で格納された lhd メンバーに対して, ファイル名ヘッダー警告を行ってしまっていたバグを修正しました。

Ver 2.63 からの変更点

  • 空き容量チェックの既定値がオフとなってしまっていたバグを修正しました。
  • 新たなサイズでの CreateFileMappingA() が行われずに, (UNLHA32.DLL による復旧処置として) そのまま通常の入出力アクセスへ切り替わってしまうことのあったバグを修正しました。
  • 利便性を考慮して, 設定ダイアログでのバッファーフラッシュ指定がメモリーマップドファイルにも適用されるようにしました。 詳細については HISTORY.TXT を参照してください。
  • 設定ダイアログでのレジストリー保存指定について, 必要のない項目についてはレジストリーへの書き込みを行わないように改善しました。
  • Windows Vista 上でのプログレスバー表示について, トップ (右端) 位置への到達タイミングを簡易予測し, 先回りして描画を行うことで, アニメーションによる影響 (バーの伸び遅延) の緩和を図りました。 当然ながら, 処理に 1 秒と掛からないような場合には効果が現れません。
  • メモリーマップドファイル使用時の FlushViewOfFile() の実行間隔を 64MB 毎とすることで, (一括) 書き込み時における負荷の低下を図りました。

Ver 2.62b からの変更点

  • WinSFX32M を Unicode/ANSI 両対応版 (WinSFX32U と表記。) へ更新しました。 !, $ ファイルについては BOM を付加することで UTF-16LE による記述も可能です。 互換性の関係上 SFX 設定ダイアログによるタイトル指定等については ANSI で記録されますので, Unicode が必要な場合は UTF-16 の $ ファイルを使用してください。
    WinSFX32U では, Windows XP/2000 であれば All Users 配下へのメニュー登録も行えますが, 行うには『管理者権限で実行』ではなく管理者アカウントでの実行を必要とする点に注意が必要となります。
  • ↑に伴い DELREG.EXE Ver 0.20 を同梱しました。
  • 古いアプリケーションで不具合が多々発生していたことから, "-o0" と "-o3" の意味を交代しました。
  • 拡張ヘッダーのサイズ情報が最小値未満となっているにもかかわらずエラーとしていなかったバグを修正しました。
  • ANSI 版 API を使用している場合に, ログの桁揃えがずれてしまうことのあったバグを修正しました。 Unicode 版 API を使用しているアプリが (過去に行われていたように) ログから直接情報を取得することは皆無と考えられることから, Unicode 版 API の場合でも あえて GetStringTypeEx() API を使用して桁合わせを行っています。 これに伴い, 固定位置と長さによるログからの文字列取得が行えなくなっています。
    GetStringTypeEx() API 等で返される値と, アプリ側で行われる描画の (桁単位での) 結果が一致しない場合が多々あることから, 『桁が揃う』という前提が利きませんので注意が必要となります。
  • Ver 2.60 以降について, 不必要な Unicode パスヘッダーを付加してしまうことのあったバグを修正しました。
  • コードページヘッダーに従ってコメントを書き込むように改善し, 読み込みについても API のモードに従うようにしました。
  • Windows 95 であるにもかかわらず Win98 以降と同列に扱われる可能性のあった箇所を修正しました。
  • 必要なヘッダー CRC や名前項目の存在しないヘッダーについて警告ログを出力するようにしました。 そのような書庫を作成するツールが存在し, 多々配布も行われていることから, "-jsn" スイッチが指定された場合のみエラー扱いとなります。 これに伴いエラーコードを 2 つ追加しました。
  • 却ってパフォーマンス低下の嫌いがあったことから, Windows Vista 世代や x64 環境では, 明示的な FlushViewOfVile() API の実行を行わないようにしました。 MFNoFlush による強制設定は引き続き可能です。
  • ヘッダー読み込みが HDR_EXPLOIT_SIZE で失敗した際には, 以降の有効ヘッダーを検索せず即座に処理を中止するようにしました。
  • EXPLOIT チェックを無効としている場合には h1 形式ヘッダーでの全体サイズチェックを行わないようにしました。
  • ヘッダーの冒頭が 4 (sizeof(DWORD)) 以外となっている h3 形式ヘッダーを扱わないようにしました。
  • 'A', 'U', 'M' 命令の場合に "-gn1" スイッチが機能するように改善しました。
  • CommandLineToArgvW() からエスケープシーケンス処理を除いたサブセット的ルーチンを作成することにより, Unlha() 等のコマンドラインパラメーター数制限の緩和を行いました。
  • ルーチンとしては, ヘッダー読み込み時のサイズ制限が存在しないように改善しました。 既定のサイズを超えたものを不正扱いとする点に変更はありません。
  • 無駄なグローバル変数の整理を行いました。
  • 設定ダイアログのボタンコントロールをオートボタン系に変更することで処理の簡素化を行いました。
  • regpat() を使用するように処理変更を行うことで, regfpat() 系のルーチンを削除しました。
  • extheader() と extheader2() を統合し処理を一本化しました。
  • 文字列処理関数のパラメーターチェックを強化 (当該箇所ではなく関数の入り口でチェックするように変更。) しました。
  • Windows Vista 以降でのプログレスバー描画頻度を下げました。
  • "-jp0" での進捗グラフを, 基本的に LHMelt と同様のサブセット版プログレスバーへ変更することで, 本体側コードの一本化を行いました。

Ver 2.62a からの変更点

  • WinSFXM, WinSFX32(M) について, コマンド文字列関連ヒープオーバーフローの脆弱性に対応しました。
  • 一部のリソースが 2.62.0.25 となってしまっていたものを修正しました。

Ver 2.62 からの変更点

  • UNLHA32.DLL におけるヒープオーバーフローの脆弱性について
  • UnlhaOpenArchive() 等において, 省略値スイッチ指定等が重複して処理されてしまっていたバグを修正しました。
  • 動作妨害や脆弱性利用等を目的とした用途として使用が可能だったことから, レジストリーを利用した省略値スイッチ指定等の機能を削除しました。 これに伴い, 一部の海外ソフトの矯正等は行えなくなります。

Ver 2.61 からの変更点

  • Unlha() 等の API へ規定数を超えたパラメーターを含むコマンド文字列が渡されるとヒープオーバーフローを起こしてしまっていた脆弱性を修正しました。
  • 試験的に UnlhaSetUnicodeMode() API を追加しました。 CP_UTF8 に未対応か又は制限の存在する Windows 95 等の環境については ERROR_NOT_SUPPORT エラーが返されます。
    レスポンスファイルについては, BOM が付加されていない場合は UTF-8 と見なされます。 ANSI での記述は行えませんので注意してください。
    これに伴い, バージョンが 2.62 へ更新となっています。
  • UNLHA32.H でのプロトタイプ宣言について, const 修飾子の有無を見直しました。 また, 付加し忘れていた箇所についても修正を行っています。
  • "-p0" スイッチの指定が無効となってしまうことのあったバグを修正しました。
  • "-jse2" スイッチの指定が無効となってしまっていたバグを修正しました。
  • "-jts" と指定した場合に, 既定の 8 文字ではなくチェック無しとなってしまっていたバグを修正しました。
  • CP_UTF8 を使用できない環境にもかかわらず, "-jtl65001" 等の指定を行えてしまっていたバグを修正しました。
  • Unicode ヘッダーの代わりに CP_UTF8 でヘッダーを記録する "-jtu3", "-jtu4" のスイッチを追加しました。 このスイッチを使用して作成された書庫を扱うには, コードページヘッダーへの対応が必要となりますので, 注意してください。
  • ANSI 版 API を使用している場合でも, BOM 付きであれば Unicode 文字のレスポンスファイルを受け付けるように改善しました。
  • DLL をロードしたモジュールのバージョン情報をデバッグ出力するようにしました。

Ver 2.60e からの変更点

  • WinSFX32(M) について, エラーが発生した際に, 解放済み領域を使用しようとして一般保護エラーとなってしまうことのあったバグを修正しました。
  • Unicode 版プログラムとしてコンパイルし直しました。 これに伴う対応プラットフォームの変更はありません。
  • MyFree() について, ヌルポインター警告メッセージをβ版のみで出力するように改善しました。
  • Win2k 以降の NT 系 OS の場合には, 既定コードページとして CP_THREAD_ACP を使用するように改善しました。
  • コードページヘッダーに CP_UTF8 (65001) が記録されている場合には, Unicode ファイル名ヘッダー等を記録しないように改善しました。
  • MultiByteCharToWideChar() 等について, 文字コードによって指定できないフラグへの対応を改善しました。
  • β版について, デバッグ出力関係を整理しました。

Ver 2.60d からの変更点

  • Ver 2.60b 以降において, WinSFX32M を作成した場合に不正な書庫が作成されてしまうことのあったバグを修正しました。

Ver 2.60c からの変更点

  • UnlhaQueryFunctionList() について, Ver 2.60 で追加された API への対応をし忘れていたバグを修正しました。
  • Win9x/Win32s 上でデバッグ出力を行った際に, 一般保護エラーとなってしまうことのあったバグを修正しました。 (β版のみで発生。)
  • UTF-16 のレスポンスファイル読込時の使用関数を変更しました。
  • API のパラメーターチェックを少々強化しました。
  • UNLHA32.DLL 破損チェックの CRC 計算方法を変更しました。

Ver 2.60b からの変更点

  • Ver 2.60 において, WinSFX32 の h0 用展開ルーチンを 4GB 対応版とし忘れていたバグを修正しました。
  • WinSFX32(M) について, FILETIME ヘッダーの情報が time_t 等へ丸められないように改善を行いました。 (コード整理の副産物。 ^^;)
  • UNLHA32.DLL 及び WinSFX32(M) が使用する既定フォントの取得方法を変更しました。
  • ファイル破損による誤動作防止のため, DLL ロード時にコード部分の簡易破損チェックを行うようにしました。 正式版のみで機能します。

Ver 2.60a からの変更点

  • "-i" スイッチに, UNLHA32.DLL 既定の変換を行わせるための "-i4" を追加しました。
  • WinSFX32(M) について, コードの整理を行いました。

Ver 2.60 からの変更点

  • Ver 2.60 において, h0/h1 形式書庫の基本ヘッダー書込の際に, UTC のままタイムスタンプを書き込んでしまっていたバグを修正しました。
  • WinSFX32(M) にマニフェストを付加しました。 これに伴い, Windows Vista 等では, UAC の影響を受けるようになりますので, 注意が必要となります。

Ver 2.57a からの変更点

  • 64 ビット time_t 値でタイムスタンプ情報を得る UnlhaGetWriteTime64() 等の API を追加しました。
  • 整合性を考慮して, time_t 値でタイムスタンプ情報を得る UnlhaGetArcWriteTime() 等の API を追加しました。 (メンバー用の UnlhaGetWriteTime() 等の API は存在したものの, 書庫用の API が存在していなかったため。)
  • API を実行した結果エラーが返ってきたにもかかわらず, 直後の UnlhaGetLastError() が ERROR_SUCCESS を返してしまうことのあったバグを修正しました。
  • 格納対象ファイルの排他処理チェックが失敗した場合に, 原因にかかわらず ERROR_SHARING を返してしまっていた点を改善しました。
  • 新属性ヘッダー (ID 0xFF) を出力する場合の出力位置を改善しました。 (ヘッダー読み込み時に FILETIME ヘッダーの情報が無効 (上書き) となってしまっていたため。)
  • time_t との相互変換について, 内部的には全て 64 ビットの time_t 値を扱うように改善しました。
  • 64 ビット time_t の採用に伴い, FILETIME 値の補正を 1752/09/14 00:00:00~2399/12/31 23:59:59 の範囲で行うように変更しました。 NT 4.0 等, Win2k より前の NT 系 OS や Win9x 系の環境については, 従来どおり 2099/12/31 23:59:59 を上限とします。
  • dir コマンド等, コマンド結果の表示等のみで問題が発生しているようであることから, time_t, ftime への変換について, Win2k 以降の NT 系 OS の場合には, 2099 年での丸めを行わないようにしました。
  • 一部自動的に行っていたタイムスタンプ補正についても, スイッチ指定に従って補正を行うように仕様変更しました。 タイムスタンプ補正をエラーとする設定を行っている場合に, 影響の出る可能性があります。
  • ヘッダーのタイムスタンプ情報を複数の形式で (内部的に) 保持していたものを, FILETIME 形式一本で保持するように整理・改善しました。 これに伴い, LHA for UNIX で作成された書庫を扱った場合等に, 得られるタイムスタンプ情報が作成時間等で従来と異なる可能性があります。
  • LHA for UNIX で作成された書庫に含まれることのある, シンボリックリンクのメンバーを無視するように改善しました。 ショートカットを作成するなどの代替措置は行われませんので注意してください。 (^^;)

Ver 2.57 からの変更点

  • 正式版としてコンパイルを行っただけで, 特に変更点はありません。

Ver 2.56a からの変更点

  • 脆弱性利用を意図した長大な名前をもつ h0 形式ヘッダーについて, バッファーオーバーフロー対策は行っていたものの, 破損ヘッダー扱いとしていなかったため, ファイル改竄 (中身すり替え) が可能となってしまっていた脆弱性に対応しました。
  • WinSFX(M) について, メンバー名取得時にバッファーオーバーフローの発生する可能性があった脆弱性に対応しました。
  • DosSFX について, メンバー名取得時にバッファーオーバーフローの発生する可能性があった脆弱性に対応しました。 CVE-2006-4335 方面 (昨年の gzip 関連の脆弱性。) については, ルーチン構成が異なることから引き続き様子見とします。 (少なくとも手元のサンプル数点では問題が発生していません。)

Ver 2.56 からの変更点

  • 正式版としてコンパイルを行っただけで, 特に変更点はありません。

Ver 2.55b からの変更点

  • Ver 1.95 以降において, UnlhaCompressMem() API を使用して作成されたメンバーに, 正しいパスが記録されていなかったバグを修正しました。

Ver 2.55a からの変更点

  • 状況表示ダイアログの『中止』ボタンで処理を中止した際に, プログラムの抜けてしまうことがあったバグを修正しました。

Ver 2.55 からの変更点

  • 正式版としてコンパイルを行っただけで, 特に変更点はありません。

Ver 2.54a からの変更点

  • メモリーマップドファイルを使用している場合に, まれに一般保護エラーの発生してしまうことがあったバグを修正しました。

Ver 2.54 からの変更点

  • WinSFX32M において, 関連付け設定時にアイコン ID を指定できるようにしました。 指定したプログラムのリソースが使われる点には変わりがありませんので, 注意してください。
  • WinSFX32M での関連付け設定について, $AskRegist が指定されている場合には, 一括して設定を行うかどうか問い合わせるようにしました。

Ver 2.53b からの変更点

  • Ver 1.99c 以降において, "-z" スイッチ及び "-jtz" スイッチでの拡張子指定が正常に機能していなかったバグを修正しました。

Ver 2.53a からの変更点

  • Ver 2.53a において, "--" スイッチによるスイッチ文字等の変更が利かなくなってしまうことのあったバグを修正しました。

Ver 2.53 からの変更点

  • 正式版としてコンパイルを行っただけで, 特に変更点はありません。

Ver 2.52b からの変更点

  • バッファーオーバーフローやメンバーの隠蔽を意図したものと疑われるヘッダーについては, 常に破損ヘッダーとして扱うようにし, ヘッダーの状態にかかわらず特定のエラーコードを返すようにしました。
  • 4KB を超えるヘッダーを扱えないウイルス対策ソフト等の存在が確認されたため, そのようなヘッダーについては, 全て破損ヘッダーとして扱うようにしました。
  • "-jc1" が指定された場合等の破損ヘッダー読み飛ばしについて, 最後のメンバーが破損していた場合にエラーを返してしまうことのあったバグを修正しました。
  • h0 形式ヘッダーでのファイル名書き込み時については, 仕様を超える長さの名前であってもエラーとせず, 最大文字数への切り詰めを行った上で書き込むように改善しました。
  • 強制指定スイッチについては, それまでの指定にかかわらず, 常に既定値のスイッチ文字を認識するように改善しました。
  • ヘッダー読込用のバッファーを 128KB に拡張しました。

Ver 2.52a からの変更点

  • 正式版としてコンパイルを行っただけで, 特に変更点はありません。

Ver 2.52 からの変更点

  • Win32s 環境の場合にローカル時間との変換が正常に行われないことのあったバグを修正しました。

Ver 2.51b からの変更点

  • 『gzip における脆弱性』の Lzh 関連部分 (CVE-2006-4335, CVE-2006-4337, CVE-2006-4338) に対応しました。
  • 'T' 命令の際に CRC エラーのメッセージボックスを表示しないように改善しました。

Ver 2.51a からの変更点

  • Ver 2.39 以降において, h1 形式書庫を作成すると, パス情報にファイル名の含まれてしまうことがあったバグを修正しました。
  • Ver 2.39 以降において, NT 系以外の環境で WCharToCharN() が一般保護エラーを起こしてしまう可能性のあったバグを修正しました。
  • Ver 2.39 以降において, "-gy" スイッチが正常に機能していなかったバグを修正しました。
  • MySetFilePointer() において, lpToMoveHigh の返却値がおかしかったバグを修正しました。 返却値を使用していないことから表面化はしていません。

Ver 2.51 からの変更点

  • "-jo", "-job" スイッチについて, (2 秒単位ではなく) 秒単位で指定を行えるように改善しました。 SystemTimeToFileTime() API に問題を抱えている一部の環境 (当該 API がエラーを返してきた場合。) では, 従来どおり DosDateTimeToFileTime() API を使用することから, 2 秒単位となります。
  • UnlhaGetOriginalSize() 等の API において, サイズが 4GB 以上であった場合には UnlhaGetLastError() が ERROR_TOO_BIG を返すように改善しました。

Ver 2.50 からの変更点

  • Unlha() 等において, バッファーとサイズ指定の整合性がとれていないなどの理由でバッファー溢れを起こした場合に, ソフトによっては処理が抜けてしまうことのあったバグを修正しました。
  • "--" スイッチを拡張し, LHA と同様 "--[0|1|2]" の指定を行えるように改善, また, "--3" でスイッチ文字の無効化を行えるようにしました。

Ver 2.40k からの変更点

  • Unicode 版 API でのレスポンスファイル読み込みについて, BOM を認識するようにしました。 BOM が存在しない場合は UTF-16LE で扱われます。 これに伴って, "-gl" スイッチによるログ出力の際に BOM が出力されます。

Ver 2.40j からの変更点

  • Ver 2.02a 以降において, 'L' 命令等によるリスト出力で書庫のタイムスタンプが 0 表示 (1601-01-01 00:00:00 UTC をローカル時間へ変換したもの。) されてしまっていたバグを修正しました。
  • 入れ子チェックの改善を行い, (他形式書庫の) ヘッダー検索と先頭ヘッダーの読み込みを行った上で判断するようにしました。

Ver 2.40i からの変更点

  • wsprintfW() API を使用していた箇所が残っていたため, Win9x 等で UnlhaCheckArchiveW() が動作しなかったバグを修正しました。

Ver 2.40h からの変更点

  • 圧縮時のフルパス名取得時に不正パスと判断されたにもかかわらず, そのまま共有チェックに回ってしまっていたバグを修正しました。
  • 圧縮時のスキップログ出力について, 簡易出力の場合に常に共有エラーとして出力されてしまっていたバグを修正しました。
  • NT 環境以外の場合に lpCharPrevW() の初期化が行われていなかったバグを修正しました。
  • 表面化していなかった (そのような条件で呼び出されることがない。) ものの, Mylstrcpyn2() がバッファー溢れを起こす可能性のあったバグを修正しました。

Ver 2.40g からの変更点

  • ログ出力の際にはファイル名の制御文字を取り除くように改善しました。

Ver 2.40f からの変更点

  • Unicode 版 API を使用した場合に, レスポンスファイルの読み込めないことがあったバグを修正しました。

Ver 2.40e からの変更点

  • "-jsp" スイッチを拡張し, Unicode 制御文字を不正として扱えるようにしました。
  • WinXP/2k 等での WIN32 Unicode 版 API ロード時にエラーが発生した際のデバッグ用メッセージボックス表示処理を削除しました。

Ver 2.40c からの変更点

  • lh1 形式圧縮について, LHarc オリジナルのルーチンを継承していたために, まれに圧縮を失敗してしまっていたバグを修正しました。
  • lh3 形式圧縮時について, 一致位置の符号長が 4 を超えた場合の処理を追加し忘れていたバグを修正しました。 (符号表が 4 ビット固定で出力される仕様のため, 不正な符号表となってしまい, 展開時にハフマンエラーとなる。)
  • LHA OS/2 の新属性ヘッダー (ID 0x7F) が正常に読み込めていなかったバグを修正しました。
  • 基本ヘッダーへのファイル名書き込み時の長さチェックを改善し, "-o" スイッチで指定された互換モードに従い, 必要であれば拡張ヘッダーへ書き込むようにしました。
    これに伴い, "-o" スイッチの仕様が変更され, "-o[0|1|2]" が指定された場合には, DOS 名 (8+3 の大文字) で格納が行われます。
  • h0/h1 形式書庫の場合に, ファイル名の長さが制限を超えていた場合にエラーを返すようにしました。 (基本ヘッダー書き込み時の長さチェックに関する修正と異なり, こちらは, 例えば "-o" スイッチが指定されていれば, LHa/LHarc がバッファー溢れを起こす可能性のある場合など。)
  • 修正数が (2.02e 以降) 100 を超えたので, 2.40e に変更となっています。

Ver 2.40b からの変更点

  • lh1/lh2 形式での圧縮中にルーチンを抜けてしまう (最悪アプリケーションが突然終了する。) ことのあったバグを修正しました。 lh1 形式については, 頻度は低いものの, おそらく最初期の Ver 0.19 から発生していたと思われます。
  • 効果が薄かったことから,LZSS 法での最大一致文字数検索をオリジナルのものに戻しました。

Ver 2.40a からの変更点

  • Ver 1.99f 以降において lhx 形式 (実験用) の展開が行えなくなっていたバグを修正しました。
  • lh2, lh3, lzs, lz5 形式の圧縮に (試験的に) 対応しました。
  • lhx 形式作成用の "-jmm" スイッチについて, 16 以下が指定された場合には既存の lh4~lh7 形式の書庫を作成するようにしました。
  • "-o2" スイッチが指定されている場合には, lh4 形式が採用された際に LHa Ver 2.13 の仕様どおり "lh4" のメソッド ID を記録するようにしました。
  • 拡張ヘッダーの書込順を改善し, また, "-o" スイッチにより互換モードが指定されている場合には, ファイルサイズヘッダー以外の独自ヘッダーを作成しないようにしました。 ファイルサイズヘッダーについては, 4GB を超えるファイルが扱えなくなってしまうことから, 必要な場合には無条件に作成されます。
  • スライド辞書サイズ実験用 lhx 形式の圧縮ルーチンと既存のルーチンを統合しました。
  • ハフマン用中間バッファーへの格納について, 『文字・一致長』と『一致位置』について別のバッファーを使用することにより格納時の無駄を省きました。
  • LZSS 法について, 擬似的な最大一致文字数で検索を行うようにしました。

Ver 2.40 からの変更点

  • Ver 2.39b 以降において, コールバック関数 ARCHIVERPROC() を使用している場合に, UNLHA32.DLL が勝手にエラー報告を行って処理を中止してしまっていたバグを修正しました。 かなり影響の大きなバグなので, 日替わりアップを行っています。
  • Ver 2.39b 以降において, EXTRACTINGINFOEXW 等, Unicode 系構造体を使用した場合に, 正常に値が格納されないことのあったバグを修正しました。

Ver 2.39b からの変更点

  • Unicode 版 API を実装しました。

Ver 2.39a からの変更点

  • 直前の API 実行において内部的に返された UNLHA32.DLL のエラー値を得る UnlhaGetLastError() API を追加しました。
  • これまで, Unlha() 等で szCmdLine に NULL が渡された場合に ERROR_COMMAND_NAME を返していたものを, ERROR_INVALID_VALUE を返すように変更しました。
  • "-jyn" によるファイル名変更時について, NT 系の場合には GetSaveFileNameW() を呼ぶように改善しました。
  • 状況表示ダイアログでのパス名等の表示を Unicode で行うようにしました。
  • コマンド文字列取得ルーチン (ANSI/Unicode) の共通化を進め, より初期段階から Unicode ベースで扱うように内部処理を変更しました。
  • ワイルドカードによる書庫指定が行われた場合に, 対象書庫が確定される前に FDD チェックを行ってしまっていたため, 正しく判定されないことのあったバグを修正しました。
  • Ver 2.39a において, Win9x 系で実行した場合に一部のログが正常に出力されなかったバグを修正しました。
  • (格納ファイルの) 変名ダイアログについて, 取得を Unicode で行っていたものの, 初期化が ANSI のままだったバグを修正しました。
  • "-jsc" スイッチを指定した際に, 処理したファイル数が 0x8000 (32768) 以上になるとエラーとして扱われてしまうことのあったバグを修正しました。

Ver 2.39 からの変更点

  • Unicode 版 API の実装準備として, UNLHA32.H を ANSI/Unicode 両用の形式へ変更しました。 これに伴い UnlhaA() 等の ANSI 版 API と UnlhaW() 等の Unicode 版ダミー API が追加されています。 (Unicode 版 API は 2.40 から扱えます。)
    UNLHA32.H の変更によって, マクロ UNICODE の定義有無に従い対象 API が変更されますので, 注意してください。
  • SetLangueSpecified() API 等の仕様を変更し, 他の設定用 API と同様に処理結果を返すように改善しました。 元々が値を返さない関数であったため, 今回の変更が既存のアプリに影響を及ぼすことは殆どありません。
  • 書庫ヘッダー読み込み時のコードページを指定する UnlhaSetCP() API の追加を行いました。 UnlhaOpenArchive2() を使用しない場合で, OpenArchive 系 API においても正常な情報を得る必要のある場合に使用できます。 取得は UnlhaGetCP() API で行います。
  • Unicode ヘッダーの読み書き有無を指定する "-jtu" スイッチを追加しました。
  • 2.02c で FlushViewOfFile() API の実行間隔を 256MB 毎に縮小したことで, メモリー圧迫の問題が改善した (との報告あり。) ことから, ファイル・クローズ時の端数分マップについての解放をシステムに任せる仕様へ戻しました。
  • DLL ロード時の米語用言語設定が正しく行われていなかったバグを修正しました。 このため, 明示的に米語を指定した場合に, 本来必要のない再設定処理が行われてしまっていました。
  • HARC ハンドル内のメンバー名記録を WCHAR にし忘れていたバグを修正しました。
  • UnlhaGetOSType() 等での検索状況チェックが正しく行われず, 検索前でもエラーとならずに不正な値を返してしまっていたバグを修正しました。
  • コードページの設定時に,サポートされているページかどうかチェックするように改善しました。
  • MyGetFileSize() を使用していた箇所について MyGetFileSize2() を使用するように変更しました。
  • FileSearchSubSub() での全指定チェックの無駄を省きました。
  • Unicode 版 API の実装準備として, 一部の既存アプリの動作に影響してしまうダイアログ関係を除いて, 内部処理を Unicode 化しました。
  • 各 API に渡されたバッファーの確保状況をチェックするように改善しました。 API に渡されたサイズの確保が行われていない (とシステムが判断した) 場合には, ERROR_INVALID_VALUE を返します。

Ver 2.02e からの変更点

  • 内部動作を Unicode ベースに変更し, 書庫についても Unicode を扱えるよう拡張ヘッダーの追加を行いました。
  • "-jb" スイッチ用のポインターが初期化されていなかったため, スイッチを使用しない場合に一般保護エラーとなることのあったバグを修正しました。
  • UNC パス名で書庫が指定された場合に, ロングファイル名使用可否判定に失敗してしまっていたバグを修正しました。
  • ファイルオープン再試行時について, ファイルが見つからなかったにもかかわらず共有指定変更による再試行を行ってしまっていたバグを修正しました。
  • 書庫更新時の作業書庫に対する NTFS チェックが正常に行われないことのあったバグを修正しました。
  • 展開時の空き容量チェック警告表示を改善しました。

Ver 2.02d からの変更点

  • Ver 2.02 以降, UnlhaCheckArchive() に空文字列が渡された場合等に, TRUE を返してしまっていたバグを修正しました。

Ver 2.02c からの変更点

  • 正式版としてコンパイルを行いました。

Ver 2.02b からの変更点

  • メモリーマップドファイル使用時について, バッファー解放タイミングの改善を行いました。

Ver 2.02a からの変更点

  • Ver 2.02 以降において, UnlhaGetArcOriginalSizeEx() と UnlhaGetArcCompressedSizeEx() が UnlhaGetArcFileSizeEx() の返却値を返してしまっていたバグを修正しました。

Ver 2.02 からの変更点

  • 新規書庫の直接作成時に, 書庫を OPEN_ALWAYS で開いてしまっていたバグを修正しました。 (直前に存在確認を行っての直接作成だが, その僅かな間にも同名書庫の作成される可能性がある。)
  • UNIX 形式書庫の場合に, 拡張ヘッダー 0x54 を認識して読み込んでいるにもかかわらず, 更新日時が反映されていなかったバグを修正しました。
  • 新規書庫の直接作成時などの際に, 実際にタイムスタンプを書き込まない場合にも, (そのために) 書庫を再度開いてしまっていたバグ (無駄) を修正しました。
  • 格納等の書庫操作時に, 重複して書庫の存在チェックを行っていたバグ (無駄) を修正しました。
  • 圧縮時に, 当該ファイルのファイルサイズを得るために, 無駄なファイルオープンを行っていたバグ (無駄) を修正しました。
  • UnlhaGetAttributes() API を追加しました。 スペルミスである UnlhaGetAttribute() で実装が行われているため, 本来の名前である "UnlhaGetAttributes" で呼び出そうとしてエラーとなってしまう不具合が意外と多く発生している点への対策です。
  • ヘッダー書込時に, 拡張ヘッダー 0xFF のパーミッション情報について, 初期値を "rwxr-xr-x", "rw-r--r--" に変更しました。 (そうなっている書庫が多いようなので。)
  • NT 系の場合に MoveFileEx() API を使用することで, 書庫退避時における名前衝突の回避を図りました。
  • MyGetFullPathName() でのパス構築ループで, 無駄にパスを遡りながら構築が行われていた点を改善しました。
  • MyGetFullPathName() においても連続スペースのチェックを行うように改善しました。
  • MyGetFullPathName(), CheckPath() でのバッファー溢れチェック方法の改善を行いました。
  • ロング名とショート名 (8 + 3 文字) が同じ場合には, ショート名の記録を行わないようにして, 検索時の無駄を省きました。
  • CheckSFXType() において, FILE_FLAG_BACKUP_SEMANTICS が有効となっている場合に, 内部処理でエラーとなっても極力ファイルハンドルを閉じるように改善しました。

Ver 2.01b からの変更点

  • 書庫更新時のオリジナル書庫退避に失敗すると, 指定された格納対象ファイル (の中の一つ) が削除されてしまうことのあったバグを修正しました。 (最適化によるポインターのリロード省略が原因。)
  • SetLangueSpecified() API 等で, 同じ言語識別子が指定された場合には, 文字列の初期化を行わないように改善しました。
  • デバッグログ出力ルーチンの変更を行いました。
  • コンパイル時に警告レベル 4 による警告が行われいないように, ソースを改善しました。

Ver 2.01a からの変更点

  • 正式版としてコンパイルを行いました。

Ver 2.01 からの変更点

  • UnlhaExtractMem() 等において, 特定の箇所が正常に展開されない環境の存在していたバグを修正しました。

Ver 2.00a からの変更点

  • メモリーマップドファイルを使用していない場合に, ファイルポインターの設定に失敗してしまうことのあったバグを修正しました。
  • UnlhaExtractMem() 等において, 展開対象となるメンバーのサイズが 64KB 程度を超えると, 最後の部分が展開されないことのあったバグを修正しました。

Ver 2.00 からの変更点

  • 正式版としてコンパイルを行っただけで, 変更点はありません。

Ver 1.99g からの変更点

  • メモリーマップドファイルを使用しての書込オープン時に, サイズが 4GB を超えると書き込みエラーの発生してしまう環境があったバグを修正しました。
  • システムによるメモリーフラッシュの遅延により, ビューのコミットメモリーが蓄積され, 結果, スワップの連続状態に陥りハングアップ (に近い状態) してしまう環境が存在したため, 512MB 毎に強制的に FlushViewOfFile() API でフラッシュを行うように改善しました。

Ver 1.99f からの変更点

  • Ver 1.99 以降において, 環境が Win9x 系の場合にタイムスタンプが操作時のものになってしまうことのあったバグを修正しました。

Ver 1.99e からの変更点

  • lh6/lh7 形式で格納されている場合について, メソッド ID と実際のメソッドが異なる場合に, ERROR_HUFFMAN_CODE が返されて展開できないことのあったバグを修正しました。
  • 't' 命令実行時に, ハフマンコードエラーのメッセージ表示を行ってしまっていたバグを修正しました。

Ver 1.99d からの変更点

  • WinSFX32M について, インストール関連情報のレジストリー保存先を変更しました。
  • DELREG.EXE について, WinSFX32M Ver 2.82 対応版への更新を行いました。

Ver 1.99c からの変更点

  • Ver 1.99c で BPL_DENY_EXECUTABLE を有効とした場合に, 環境によっては拡張子にかかわらず警告が行われてしまっていたバグを修正しました。 (コンパイラーの追跡結果とは異なるレジスターの保存状況となっていたため, フラグが正常に初期化されなかったもの。)
  • 『実行ファイル確認』ダイアログで『展開する』が初期選択状態となってしまっていた点を改善しました。

Ver 1.99b からの変更点

  • Ver 1.99b で, アルゴリズムテスト用のコードが混入してしまっていたバグを修正しました。 (このため, 圧縮率が若干下がってしまう。)
  • "-jsp" スイッチに実行可能ファイルの展開を抑制するための BPL_DENY_EXECUTABLE フラグ (8) を追加し, 規定の拡張子をオーバーライドする "-jtz" スイッチについても追加を行いました。
  • "-jsp" スイッチで BPL_DENY_TOO_MANY_PARENTS が指定されている場合に, 拡張子偽造の疑われる連続したスペース (規定では 8 文字。) をもつ名前のメンバーを不正扱いとするようにし, 連続数を指定する "-jts" スイッチを追加しました。
  • メモリーマップドファイル使用の有無を設定ダイアログで指定できるようにしました。 問題がある場合には, 通常の WIN32 API によるアクセスを選択することになりますが, 入出力ルーチンが改変されているため, 以前と同じものではありません。
  • ダイアログ描画更新及びメッセージ送出タイミングの基となる基準サイズの調整を行いました。
  • 圧縮・展開関係アセンブラールーチンの調整を行いました。

Ver 1.99a からの変更点

  • ファイルハンドルのリークチェックルーチンがメモリーマップドファイル版に対応していなかったバグを修正しました。 (使用していないバッファーを解放しようとするため, UNLHA32.DLL がヒープチェックのエラーログを出力する。)
  • CheckSFXType() で読み込みエラー等が発生した場合に, ファイルハンドルの解放し忘れが生じていたバグを修正しました。 (API 終了時のファイルハンドルリークチェックにより解放が行われるので, 過去の版においても実害はない。)
  • スペルミス等, メッセージ関係の修正を行いました。
  • fillbuf(), getbits(), decode_c_st1(), decode_p_st1(), putcode(), putbits(), match_insert() について, アセンブラー化を行うことで圧縮・展開速度の改善を行いました。 が, 展開については Ver 1.99a で改善済みなので, あまり違いがありません。

Ver 1.99 からの変更点

  • 無圧縮メンバーに対する格納後の CRC チェック ("-jsv") の際に, 進捗が表示されていなかったバグを修正しました。
  • メモリーマップドファイルの使用有無をレジストリーで指定できるようにしました。 特に問題が発生していないようなので, 初期値はオンになっています。
  • メモリーマップドファイル使用に伴い "-jtp" スイッチ関係でのウエイト処理の変更・調整を行いました。
  • 進捗状況表示ダイアログでの描画更新タイミングの調整を行いました。
  • fillbuf() 等, 下位ルーチンの改善を行いました。

Ver 1.98b からの変更点

  • ファイル入出力について, メモリーマップドファイルを使用するようにしました。 Win2k 以降で使用され, 書込オープン時はローカルの固定ディスクの場合のみ有効となります。
    入出力ルーチンの変更を伴っていることから, この版の使用には注意してください。 正式版ではメモリーマップドファイル使用の有無を選択できるようにする予定です。 (初期値はオフ。)

Ver 1.98a からの変更点

  • 正式版としてコンパイルを行っただけで, 変更点はありません。

Ver 1.98 からの変更点

  • DOS 系以外で作成された書庫の場合に, 識別子 0x42 のファイルサイズヘッダーを読み込んでしまっていたバグを修正しました。
  • Ver 1.90 以降において, "d:" といったドライブのみの指定が不正パスとして扱われてしまっていたバグを修正しました。

Ver 1.97a からの変更点

  • WinSFX32M について, $Class による関連付け登録の際に, 指定されたキーを利用して既存キーの簡易的なバックアップを行うようにしました。
  • WinSFX32 について, WinSFX32M と同様のダイアログ表示を行うようにしました。

Ver 1.97 からの変更点

  • 追加圧縮時のファイル数カウント表示の改善を行いました。

Ver 1.96f からの変更点

  • Ver 1.93 以降, DELREG.EXE が Win32s 環境で実行できなくなっていたバグを修正しました。
  • Ver 1.96d 以降, "-jx" スイッチの正常に機能しないことがあったバグを修正しました。

Ver 1.96e からの変更点

  • "-gw" スイッチ付き書庫操作で改竄チェック付きの自己解凍書庫を作成する際に, CRC の計算が行われていなかったバグを修正しました。
  • "-jw" 及び "-gw" スイッチを使用して自己解凍書庫を作成した際に, 書庫の前に存在する余剰データーが削除されずに書き込まれてしまっていたバグを修正しました。

Ver 1.96d からの変更点

  • 正式版としてデバッグルーチンが削除されているだけで, 変更点はありません。

Ver 1.96c からの変更点

  • "-r2" スイッチを指定した場合に, 格納ファイルに対する "Dir" といった 1 階層のみのディレクトリー指定による検索が正常に行われていなかったバグを修正しました。
  • Ver 1.90i 以降において, 削除時の "-jn" スイッチが正しく機能していなかったバグを修正しました。

Ver 1.96b からの変更点

  • Ver 1.95 以降において, "-jo" スイッチが機能していなかったバグを修正しました。

Ver 1.96a からの変更点

  • レスポンスファイルからの読込時にバッファーオーバーフローしてしまうことのあったバグを修正しました。
  • 'a' 命令等での自己解凍書庫作成時に, 設定ダイアログを取消終了させると, メモリーリークが発生してしまっていたバグを修正しました。

Ver 1.96 からの変更点

  • "-jw" "-gw" スイッチの適用範囲の拡張を行いました。 以下のような感じで自己解凍書庫を直接作成することが可能となります。
    a -gw4 -xr1 archive c:\tmp\ *.*

    そういった対応アプリは存在しないと思いますが, これらのスイッチが 's' 命令のみで有効だったことを利用して, 常にスイッチ指定が行われているようなアプリでは, 問題が発生します。
  • 一部, 処理数カウントの改善を行いました。

Ver 1.95b からの変更点

  • 圧縮時の進捗表示が 4 GB 境界で行われてしまっていたバグを修正しました。
  • 上書き確認ダイアログ等で, 警告文の折り返し表示が行われていなかったバグを修正しました。
  • ファイルシステムで扱えない大きさのファイルを展開しようとした場合等に, 警告表示を行うように改善しました。

Ver 1.95a からの変更点

  • 要望が多かったので, UnlhaSetPriority() による優先度設定が THREAD_PRIORITY_NORMAL 以上の場合は, バックグラウンドモード時のみ Sleep() API によるウエイトを入れるようにしました。

Ver 1.95 からの変更点

  • Ver 1.95 で h2 形式書庫について UNIX 形式でのタイムスタンプが正常に記録できない環境が発生していたバグを修正しました。
  • メモリーリーク以外のデバッグ出力ルーチンを削除しました。
  • 圧縮・展開ルーチンでのファイルバッファー (エンコード, デコードルーチンのもの。 ファイルアクセスのバッファーとは別物。) を 64KB に拡張しました。
  • 一部のルーチンについて,速度優先でコンパイルするように変更しました。

Ver 1.94c からの変更点

  • 圧縮を打ち切った後に何らかの操作を行うと, 『ヒープメモリーエラー』が表示されてしまっていたバグを修正しました。
    なお, エラー表示は行われますが, 実際に二重解放やヒープの破壊は発生していません。
  • ディレクトリーの格納を行った場合に, "UNLHA32/UNLHA32/" といった重複した名前で格納されてしまうことがあったバグを修正しました。
  • Ver 1.94 以降において, 新規書庫が作成された場合に, 作業書庫が残ってしまうことのあったバグを修正しました。
  • 一部関数の整理・統合を行いました。

Ver 1.94b からの変更点

  • Ver 1.94 以降において, 格納しようとするファイルと同じディレクトリー上に新規書庫を作成しようとした際に, 書庫自身を格納しようとしてしまうことがあったバグを修正しました。

Ver 1.94a からの変更点

  • DLL の変更点はありません。

Ver 1.94 からの変更点

  • UnlhaSetPriority() API 等による優先度設定が THREAD_PRIORITY_BELOW_NORMAL となっている場合のウエイトを下げることで, NORMAL, LOWEST 間との調整を図りました。

Ver 1.93a からの変更点

  • WinSFX32(M) において, 『参照』ボタンによるディレクトリー取得を行った場合に, ルートディレクトリーを指定するとドライブ情報が正常に取得されず, 短いファイル名で展開されてしまっていたバグを修正しました。
  • 作業書庫からの書き戻しが MoveFile() API で行われる場合に, 作業書庫のアクセス権を引き継いでしまっていたバグを修正しました。

Ver 1.93 からの変更点

  • VC++, BC++ 以外のコンパイラーで報告される軽微な警告に対する修正を行いました。

Ver 1.92a からの変更点

  • UnlhaMain() ルーチン内でエラーが発生した場合に, メモリーリークが発生していたバグを修正しました。

Ver 1.92 からの変更点

  • h3 ヘッダーの場合に ERROR_LONG_FILE_NAME が返されなかったバグを修正しました。

Ver 1.91g からの変更点

  • レスポンスファイルが開けなかった場合に, メモリーリークが発生していたバグを修正しました。 API 終了時のチェックで自動開放されていることから, 表面化はしていません。
  • 他の API と (名前の上での) 統一性をもたせる意味から, UnlhaSetlangueSpecified() 等の API を追加しました。
  • 優先順位を指定する UnlhaSetPriority() API と "-jtp" スイッチを追加しました。

Ver 1.91f からの変更点

  • Ver 1.88a 以降, 新属性ヘッダーが正しく書き込めなくなっていたバグを修正しました。

Ver 1.91e からの変更点

  • lhd メンバーが含まれた書庫をテストした際に, 一般保護エラーの発生してしまうことがあったバグを修正しました。
  • 展開時ログ出力の改善を行いました。

Ver 1.91d からの変更点

  • 不正パスチェックの際にバッファーオーバーフローを起こしてしまう大バグを修正しました。
  • Myfindfirst() のパスチェックを改善しました。 (不正パスチェックではありません。)

Ver 1.91c からの変更点

  • ChangeFileNameSub() で, 初期ディレクトリーが正しく設定されていなかったバグを修正しました。
  • サウンドが重複しないように, MyMessageBox() ではサウンドを鳴らさないようにしました。

Ver 1.91b からの変更点

  • 不正パスチェックをオフにしているにもかかわらず, 『絶対パス警告』ダイアログが表示されてしまっていたバグを修正しました。

Ver 1.91a からの変更点

  • (親ディレクトリーに遡る) 相対パスで書庫を指定できなくなっていたバグを修正しました。
  • EnumMembersProc 系 API で展開先が変更された場合について, Ver 1.91 と同様の問題が残っていたバグを修正しました。
  • "..." のような 3 つ以上 '.' の続く不正パスが, チェックをすり抜けてしまっていたバグを修正しました。
  • BPL_DENY_ABS_PATH が指定されていない場合には, 『絶対パス警告』ダイアログにより, 絶対パスについての以降の扱いを選択できるようにしました。 ただし, "-jf2" を指定してドライブ文字を含めて格納されたファイルについては, "-jsp0" を指定してチェックを抑制しない限り, 毎回必ず警告が行われるので注意してください。
  • 確認ダイアログ関係の細かな修正を行いました。

Ver 1.91 からの変更点

  • 『不正パス確認ダイアログ』が正常に機能しないバグを修正しました。
  • 『ファイル名変更ダイアログ』ダイアログが表示されるとカレントディレクトリーが変わってしまっていたバグを修正しました。
  • 基準ディレクトリーが省略,もしくは "./" で指定された場合に, 不正パスチェックが正常に働いていなかったバグを修正しました。

Ver 1.90i からの変更点

  • "-jsp" スイッチの仕様をレベル指定から, フラグの組み合わせでの指定に変更しました。
  • 『UNLHA32 設定ダイアログ』に, 不正パスチェック関係の設定項目を追加しました。
  • "-jsp" スイッチの省略値を "-jsp1" に変更しました。 そのため, 絶対パスを前提とした処理を行うアプリケーションの相当数で, 不具合の出る可能性があります。

Ver 1.90h からの変更点

  • 『指定先以外の展開先へ展開が行われる脆弱性』の問題について, 暫定的ではありますが, 展開時について回避を行えるように改善しました。 ドキュメント等の整備が終了していないので, HISTORY.TXT (の最後の部分) を参照してください。
  • エラーを細分化し, 不正パスの場合には ERROR_INVALID_PATH を返すようにしました。
  • Ver 1.90h で, 書庫の新規作成で格納するファイルが存在しなかった場合などに, 『作業ファイルコピー』のエラーで終了してしまっていたバグを修正しました。
  • Ver 1.90h で, 上書き確認ダイアログが正常に動作しなくなってしまっていたバグを修正しました。
  • 圧縮時のスキップログ表示の改善を行いました。

Ver 1.90g からの変更点

  • 1.90d 以降で, 特殊属性上書き確認ダイアログのタイトルが設定されていなかった (通常確認のタイトルのままだった。) バグを修正しました。
  • 一部のエラーについて返却エラーコードの見直しを行いました。
  • 問い合わせの多かった『指定先以外の展開先へ展開が行われる脆弱性』の問題に対応しました。 ただし, UNLHA32.DLL においては ".." 指定すべてを不正扱いする仕様とはなっていません。 あくまでもルートディレクトリーを越える指定が行われた場合だけです。
  • 恐ろしいことに, travel() でのパス名チェックが h2 書庫用のものだけになってしまっていたバグを修正しました。

Ver 1.90f からの変更点

  • 1.90e 以降で, 一部ダイアログのタイトルがおかしくなってしまっていたバグを修正しました。

Ver 1.90e からの変更点

  • 1.90e で Win9x 等でコントロールの右端が切れてしまっていたバグを修正しました。
  • すっかり忘れていたのですが, Win32s 以外では GetTextExtentPoint32() API を使用するように修正しました。

Ver 1.90d からの変更点

  • 1.90d でリードオンリー上書き確認ダイアログの文字列が全く設定されなくなってしまっていたバグを修正しました。
  • ラジオボタンコントロールのサイズ (幅) 調整を行いました。
  • 作成途中のものですが, ストリングテーブル関係を説明したドキュメント (STRTABLE.TXT) を添付しました。 各文字列の具体的な説明については記述されていませんが, ID と登録文字列については一覧されています。

Ver 1.90c からの変更点

  • 全てのダイアログについてリソースの一本化を行いました。 リソース名の変更を伴っていますので注意してください。
    文字列のレジストリー及びストリングテーブル登録についてのドキュメントは, 現在作成中…。
  • 1.88e 以降でファイルバッファーの解放忘れを起こしていたバグを修正しました。
    なお, API 終了時のデストラクタ相当ルーチンが自動的に解放を行う関係上, メモリーリーク自体は発生していません。

Ver 1.90b からの変更点

  • 1.90b について, 日本語環境において WinSFX 設定ダイアログが表示されなくなってしまっていたバグを修正しました。 VC++ が勝手にリソースを書き換えていたのが原因。

Ver 1.90a からの変更点

  • 今更なのですが, 状況表示ダイアログでの表示について, 省略記号 ("...") を用いてファイル名が優先して表示されるように改善しました。
  • 状況表示ダイアログの各項目のサイズ調整が一部正常に行われていなかったバグを修正しました。
  • 一部のダイアログについてリソースの一本化を行いました。 それらについてはリソース名が変更されていますので注意してください。
  • レジストリーに登録されている場合は, ストリングテーブルに優先して登録文字列を利用するようにしました。 仕様については正式版までにドキュメントを準備する…予定です。

Ver 1.90 からの変更点

  • 作業書庫を GetTempFileName() API を使用して作成するように変更しました。
    作業書庫の命名規則が変更されていますので, 何らかの事故等で作業書庫を扱う際には注意してください。
  • "-gm1" を指定した場合に "-ga" スイッチが効かなくなっていたバグを修正しました。

Ver 1.89 からの変更点

  • 各種文字列について, ストリングテーブルを使用するように変更しました。
    一応, 手元の環境については, Win32s での実行, Win9x / NT での地域切り替え等に伴うリソース切り替え, などが期待どおり動作しているようです。 しかし, ある意味かなり大きな動作仕様の変更となっている点に注意が必要です。

Ver 1.88d からの変更点

  • ファイル処理のバッファーを 64KB から 256KB に拡張しました。
    一応,内部の下請けルーチンでは 64KB 毎の連続書き込みにしてありますが,(手元の環境では大丈夫だったものの) もしかしたら 1.2MB (98 フォーマット) の FD へのアクセスで問題の出る環境が存在するかもしれません。 (そのため,これまでは 64KB にしていた。)
  • 状況表示ダイアログの表示更新タイミングを見直しました。
  • WinSFX32(M) について,$Language= の指定でダイアログ等の表記を変更するようにしました。ただし,今のところは,これまでどおり日本語と英語のみの切り替えとなっています。

Ver 1.88c からの変更点

  • WinSFX32M について, ファイルの削除を行う $DelFile= のコマンドを追加しました。

Ver 1.88b からの変更点

  • UNLHA_ENUM_MEMBER_INFO64 構造体等について, 追加格納時に uCommand へ正常な値が格納されなかったバグを修正しました。
  • UNLHA_ENUM_MEMBER_INFO64 構造体等について, szFileName で指定したメンバー名が正常に機能していなかったバグを修正しました。

Ver 1.88a からの変更点

  • WinSFX32(M) について, デスクトップを指定する "%Desktop%" とマイドキュメントを指定する "%Documents%" の特殊変数を追加しました。
  • "%ProgramFiles%" 等が正常に機能していなかったバグを修正しました。
  • UnlhaOpenArchive(), UnlhaFindFirst(), UnlhaFindNext() についてもレジストリー設定の InitOption と CauseOption が機能するように改善しました。

Ver 1.88 からの変更点

  • LHA OS/2 及び LHa for UNIX のパーミッション項目ヘッダー等の情報を参照して, ディレクトリーとリードオンリー属性を設定するように改善しました。
  • ARJ 及び ZIP 書庫に対する入れ子判断のチェックを強化しました。
  • WinSFX32(M) について, 展開先の初期表示が '"' で括られていないために, そのままでは展開できないことがあったバグを修正しました。
  • 新属性ヘッダーに属性から変換したパーミッション情報を書き込むようにしました。
  • 共通ヘッダーに付加情報を書き込むようにし, 30 分ずれ等の特殊タイムゾーン地域の場合には, 識別子 0x43 のタイムゾーン項目ヘッダーを書き込むようにしました。
[→Page top] [→『UNLHA32.DLL for Win32』] [→Home]