

        i.j Shell Property Sheets Export/Import 32 ver.1.01k17
               Copyright (C) 1999 i.j, 2004-2013 K.Takata

１．概要
    　i.j 氏の i.j Shell Property Sheets Export/Import 32 (ijexp32) (*1)
    の改造版です。
    　エクスプローラのプロパティにて、実行ファイルの PE 構造、インポート
    とエクスポートを表示します。
    　オリジナル版の機能に加え、Delphi などでコンパイルされたプログラム
    のインポート情報の表示や、64bit 実行ファイル (x64, IA64) の情報表示
    に対応しています。

      (*1) http://www.vector.co.jp/soft/win95/util/se111901.html


２．動作環境
    　Windows 98/2000/XP/Vista/7 など
    　要 MFC42.DLL (MFC42u.DLL), MSVCRT.DLL, MSVCP60.DLL


３．インストール
    　本パッケージは配布ファイルサイズ削減のため、7-Zip 形式で圧縮してい
    ます。そのため、アーカイブの解凍には、7-Zip (*2) あるいは
    7-zip32.dll (*3) を使用したアーカイブソフトなどが必要になります。

      (*2) http://www.7-zip.org/
      (*3) http://www.csdinc.co.jp/archiver/lib/7-zip32.html


    　アーカイブを解凍後、エクスプローラ上で ijexp32.inf を右クリックし、
    インストールを選択してください。なお、インストールには Admin 権限が
    必要です。

    　64bit 版の Windows の場合は、必要に応じて、64bit エクスプローラと
    32bit エクスプローラの両方からインストールしてください。通常であれば、
    それぞれ、以下の場所にインストールされます。

      64bit版: C:\Windows\System32\ShellExt
      32bit版: C:\Windows\SysWOW64\ShellExt


４．アンインストール
    　オリジナル版の ijexp32.txt を参照してください。


５．レジストリ
    　Win7 の場合、以下のレジストリが追加されます。
    上記の "アンインストール" で、全ての変更は削除されるはずです。

        +- HKEY_CLASSES_ROOT
        |  +- CLSID
        |  |  +- 00000001-23D0-0001-8000-004026419740  ←追加
        |  |     +- 以下全部
        |  +- *
        |     +- shellex
        |        +- PropertySheetHandlers
        |           +- 00000001-23D0-0001-8000-004026419740  ←追加
        +- HKEY_LOCAL_MACHINE
        |  +- SOFTWARE
        |     +- Microsoft
        |        +- Windows
        |           +- CurrentVersion
        |              +- Uninstall
        |                 +- ijexp32  ←追加
        +- HKEY_LOCAL_MACHINE
           +- SOFTWARE
              +- Wow6432Node
                 +- Microsoft
                    +- Windows
                       +- CurrentVersion
                          +- Uninstall
                             +- ijexp32  ←追加 (*4)

      (*4) 64bit 版 Windows に 32bit 版 ijexp32 をインストールした場合。


６．使用法
    　オリジナル版の ijexp32.txt を参照してください。


７．設定
    　一部の動作をレジストリで設定することができます。添付の
    ijexp32_sample_settings.reg を書き換えて、ダブルクリックしてレジスト
    リに読み込ませることで設定変更ができます。（現バージョンでは、設定変
    更用の UI は用意していません。）

    　インストール先の ijexp32.ini にはデフォルトの設定が書き込まれてい
    ます。ijexp32.ini よりもレジストリの設定が優先されます。

7.1. 対応拡張子の設定
    　ExeHdr,Export,Import タブを表示させる拡張子をレジストリで設定する
    ことができます。ijexp32_sample_settings.reg の "exts" の値を参照して
    ください。

7.2. c++filt の設定
    　MinGW あるいは Cygwin の c++filt.exe があれば、GCC のシンボルをデ
    コード（デマングル）して表示することができるようになります。
    　c++filt.exe の場所は、レジストリで設定可能です。
    ijexp32_sample_settings.reg の "c++filt" の値を参照してください。
    　設定を行っていない場合は、以下の値がデフォルトとして使用されます。

        C:\MinGW\bin\c++filt.exe


８．エクスポート名リスト
    　オリジナル版と同様に、デバッグ版 mfc??d.dll のリストは添付していま
    せん。必要な方は各自で作成して下さい。必要なファイルは以下の場所にあ
    ります。

      VS 6.0:
         <VS のディレクトリ>\VC98\mfc\src\intel\mfc*.def

      VS.NET 2002/2003:
         <VS.NET のディレクトリ>\Vc7\atlmfc\src\intel\mfc*.def

      VS 2005/2008:
         <VS のディレクトリ>\Vc\atlmfc\src\intel\mfc*.def


    　Perl を使う場合は、例えば以下のようにすると良いでしょう。

      > perl -ne "if(/\s+;?([^\s]+)\s+\@\s*(\d+)/){printf \"%04x, %s\n\", $2, $1;}" < mfc42d.def > mfc42d.exp


    　def ファイルの代わりにインポートライブラリから作成することも可能で
    す。

      > dumpbin /exports mfc42d.lib | perl -ne "if(/^ +(\d+) {4}(\S+)/){printf \"%04x, %s\n\", $1, $2}" | sort > mfc42d!x64.exp


９．ソースファイル
    　本ソフトのソースは、GitHub から入手可能です。（同梱の src.7z にも
    含まれています。）

        https://github.com/k-takata/ijexp32

    　ijexp32.dsw, ijexp32.dsp は VC6 のプロジェクトファイルです。オリジ
    ナル版とは異なり、VC5 ではコンパイルできなくなっています。
    　ijexp32.sln, ijexp32.vcproj は、VS.NET 2003 のプロジェクトファイル
    です。
    　Makefile, sources は Windows Driver Kit (WDK) 用のメイクファイルで
    す。Build Environment を起動し、build コマンドを実行すると、DLL がビ
    ルドされます。


    　なお、現バージョンには以下の既知のバグがあります。
        ・解析できないエクスポート名形式がある。(analyzer.cpp)

    例:
      エクスポート名:
        ?_R2@?BN@???$_Fabs@N@std@@YANABV?$complex@N@1@PAH@Z@4NB

      undname による解析結果:
        "double const `double __cdecl std::_Fabs<double>(class std::complex<double> const &,int *)'::`29'::_R2"


１０．更新履歴
    2004/12/19  ver.1.01k1
        ・K.Takata による最初の公開バージョン。
        ・コンパイラを VC6 SP6 に変更。
        ・Delphi 製プログラムのインポート情報を表示できるように変更。
        ・mfc42.exp を最新の mfc42.dll に対応させたものに変更。
        ・mfc70.exp, mfc71.exp を追加。

    2005/05/09  ver.1.01k2
        ・ws2_32.exp を追加。（WinSock2 用）
        ・kernel32.exp を追加。（Win9x の非公開 API）
        ・oleaut32.exp を更新。
        ・一部の実行ファイルで落ちるのを修正。

    2005/06/20  ver.1.01k3 (非公開)
        ・sys ファイルでも、ヘッダ情報とインポート情報を表示するように変
          更。

    2008/10/25  ver.1.01k4
        ・x64(AMD64), IA64 実行ファイルの情報表示に対応。
        ・エクスポート名の解析で、VC++ 7.0 以降の wchar_t に対応。
        ・エクスポート名の解析で、シンボルの間接参照部分を一部修正。
        ・エクスポート名の解析で、数値指定のテンプレートに対応。
        ・Unicode 版の実行ファイルを追加。（ANSI 版と Unicode 版は、イン
          ストール時に OS に応じて自動選択される。）
        ・情報をファイルに保存する際、カレントディレクトリを移動しないよ
          うに変更。（移動すると一部のファイラで不都合だったため。）
        ・情報をファイルに保存する際、上書き確認を行うように変更。
        ・vcbungle.txt を更新。(wchar_t, __ptr64, __pascal など)
        ・x64 ビルドできるようにソースを修正。（動作は未確認）
        ・mfc80.exp を追加。
        ・mfc??u.exp を追加。（Unicode 版 MFC DLL 用リスト）
        ・必要ファイルを一式まとめて配布するように変更。（配布ファイルの
          サイズが大きくなってしまったため、アーカイブ形式を .7z に変更）
        ・ijdll32.exp, ijgdi32.exp をインストール対象から除外。

    2008/10/26  ver.1.01k5
        ・エクスポート名の解析を改良。（特殊メンバー名の追加、引数の間接
          参照の修正。）
        ・vcbungle.txt を更新。
        ・WinXP 以降ではファイルプロパティ画面が大きくなったのに合わせて、
          表示領域を拡大。

    2008/11/03  ver.1.01k6
        ・エクスポート名の解析を改良。
            - 関数へのポインタを返す関数の修正
            - 引数のない関数の修正
            - 引数の間接参照の修正
                - __int64 なども間接参照の対象
                - 関数の戻り値は間接参照の対象外
            - シンボルの間接参照の修正（テンプレート関係）
        ・vcbungle.txt を更新。

    2008/11/05  ver.1.01k7
        ・エクスポート名の解析を改良。
            - 引数の間接参照の修正
            - テンプレート引数の負数指定に対応
            - __int8, __int16, __int32 に仮対応（VC++ では未使用？）
        ・LARGE_ADDRESS_AWARE フラグの表示に対応。
        ・Windows CE 実行形式の表示に一部対応。
        ・一部のボタン類にアクセスキーを設定。
        ・Copy ボタンを新設。（情報をクリップボードにコピー）

    2008/11/09  ver.1.01k8
        ・ディレクトリ情報の表示を修正。
        ・エクスポート名の解析を改良。
            - テンプレート引数の実数指定に仮対応（VC++ では未使用？）
            - __int128 に仮対応（VC++ では未使用？）
            - const ポインタ、volatile ポインタ、関数ポインタへのポイン
              タの解析を修正
        ・エクスポートしている関数と名前の数を表示するように改良。
        ・全てのボタンにアクセスキーを設定。
        ・vcbungle.txt を更新。

    2008/11/09  ver.1.01k9
        ・ヘッダ情報の表示を修正。

    2008/11/12  ver.1.01k10
        ・Unicode 版実行ファイルで、インポート名が正しく表示されない場合
          があったのを修正。
        ・WDK で 32bit 実行ファイルもビルドできるようにするため sources
          ファイルを修正。
        ・カレントユーザーのみにインストールするための情報ファイル
          (ijexp32_user.inf) を実験的に添付。Admin 権限が無くてもインス
          トールできるかも。（アンインストール時、エラーメッセージが出る
          場合あり。）

    2008/11/29  ver.1.01k11
        ・x64 版 Vista に対応。使用するアプリに応じて、64bit 版と 32bit
          版の両方をインストールする必要あり。（なお、実験版の
          ijexp32_user.inf を使ったインストールでは、64bit 版と 32bit 版
          の同時インストールは不可。）
        ・ijexp32_user.inf によるインストール先を %APPDATA% から
          %LOCAL_APPDATA% に変更。（ver.1.01k10 の ijexp32_user.inf を使
          ってインストールした場合は、一度アンインストールが必要。）

    2008/12/01  ver.1.01k11a
        ・1.01k3 以前をインストール後、1.01k4 以降を上書きインストールし、
          その後アンインストールした場合、一部のファイルがアンインストー
          ルされずに残ってしまうのを修正。（.inf ファイルの修正のみ。）

    2008/12/06  ver.1.01k12
        ・WinXP 以降ではビジュアルスタイルが適用されるように修正。

    2009/05/09  ver.1.01k13
        ・MS-DOS ヘッダのエラーチェックを緩和。（実行可能なファイルをは
          じいてしまう場合があったため）
        ・エクスポート名の解析を修正。
            - <型> * const & などの解析を修正。
        ・バッファオーバーフローの可能性があった部分を修正。
        ・アンインストール時にレジストリにゴミが残るのを修正。
        ・ファイルのプロパティを表示し、ijexp32 が追加したタブを選択しな
          いままプロパティ画面を閉じたとき、メモリリークするのを修正。
        ・インポート/エクスポートセクションの有無に応じて、それぞれのタ
          ブを表示するように変更。
        ・タブを追加するファイル種別を設定ファイル (ijexp32.ini) で変更
          できるように変更。

    2009/07/10  ver.1.01k14
        ・64bit 実行ファイルを解析する際、x64 用の .exp がある場合は、そ
          れを読み込むように変更。（ファイル名: 〜!x64.exp）
          バグ：IA64 実行ファイルでも、x64 用 .exp を読み込んでしまう。
        ・mfc42.exp, mfc42u.exp を Vista 付属のバージョンに対応させたも
          のに変更。
        ・mfc*!x64.exp を追加。
        ・対応拡張子をいくつか追加。(ijexp32.ini)

    2012/06/08  ver.1.01k15
        ・Export, Import リストで、コンテキストメニューから、選択してい
          る行のみをクリップボードにコピーできるようにした。
        ・ソースファイルから ijexp32.clw を削除。

    2013/06/29  ver.1.01k16
        ・c++filt.exe を利用して、GCC のシンボルをデマングルして表示でき
          るようにした。
        ・レジストリで設定を変更できるようにした。
        ・対応拡張子をいくつか追加。(ijexp32.ini)
        ・ExeHdr タブで、生の値も表示するようにした。

    2013/07/03  ver.1.01k17
        ・Export, Import リストで、ソートして表示できるようにした。
        ・ソースコード上の細かい修正。


１１．注意事項、その他
    ・この改造版に固有のことをオリジナル版の作者に質問することは決してし
      ないでください。
    ・ライセンスはオリジナル版に従うものとします。

        改造版作者 : K.Takata（高田 謙）
        URL        : http://webs.to/ken/
                   : http://homepage3.nifty.com/k-takata/
                   : https://github.com/k-takata/ijexp32
