QuickTime 7.6x の Plugin インストールの仕組み

QuickTime 7.64.17.73 7.65.17.80 は Windows 2000にインストールすると、Plugin がインストールされない場合があります。

そこで、Pluginのインストールの仕組みについて解析してみました。


まず、QuickTime.msiを解凍して、npqtplugin 絡みのファイルを探してみたのですが、見つかりませんでした。

quicktime のプラグインがインストールされると、qtplugin.logというファイルが生成され、そこにインストールログが記録されるのですが、それすらありません。

そこで、qtplugin.logで生成される『Plug-in installer called with paths:』の文字がどこで生成されるか調べてみました。

すると、qtsystem内のQuickTimeEssentials.qtxがその役割をになっていたので、追跡して見ると

 67CF1C60                    L67CF1C60:
 67CF1C60  53                         push    ebx
 67CF1C61  8B5C2410                   mov    ebx,[esp+10h]
 67CF1C65  56                         push    esi
 67CF1C66  33F6                       xor    esi,esi
 67CF1C68  F6C340                     test    bl,40h
 67CF1C6B  7419                       jz     L67CF1C86
 67CF1C6D  8B44240C                   mov    eax,[esp+0Ch]
 67CF1C71  53                         push    ebx
 67CF1C72  50                         push    eax
 67CF1C73  E8F8DAFFFF                 call    SUB_L67CEF770
 67CF1C78  83C408                     add    esp,00000008h
 67CF1C7B  E860D4FFFF                 call    SUB_L67CEF0E0
 67CF1C80  0FBFC6                     movsx    eax,si
 67CF1C83  5E                         pop    esi
 67CF1C84  5B                         pop    ebx
 67CF1C85  C3                         retn

ここがエントリーポイントのようで、第3引数に 0x40のビットが立っている場合アンインストールされることがわかりました。

というわけで次のようなコードを書いて強引に実行してみる実験をしてみたところ…。

int main(){
    HINSTANCE hDll;
    hDll=LoadLibraryA("QuickTimeEssentials.qtx");
    if(hDll==NULL)return 0;
    _asm{
       push 0
       push offset test2
       push offset test1
       mov eax, 0x67CF1C60
       call eax
       add esp,0xc
    }
    return 1;
}

qt1

qt2

コードを追ってみると、QTCF.DLL が Apple Application Support の CoreFoundation.dll(shell32.dllのラッパーが必要)を呼び、そこからobjc.dll(kernel32.dllのラッパーが必要)がコールされていました。

Apple Application Support が Quicktimeに追加されてから、インストールされなくなったのも納得って感じですが、原因がわかった所で、解決編へと続きます。

関連記事:
QuickTime 7.65.17.80 がリリース
QuickTimeなどのインストールに関するトラブル
Mozilla Firefox 3 で QuickTime Pluginが使えない問題

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です