拡張カーネルで irsetup.exe が落ちる理由

Nvidia Omega Drivers 2.169.21 が拡張カーネルでこけるというコメントをいただいたので調べてみました。

omg

インストール時に一時フォルダを作成して、
irsetup.exe が生成され、そこでクラッシュしています。

デバッガで確認してみると user32の直後で ダイアログハンドル取得時に0が返ってきて落っこちてることがわかりました。

 SUB_L77E355A0:
          mov    eax,[ebp+0Ch]
          and    eax,eax
          jz     L77E355C4
          cmp    dword ptr [eax],FFFF0001h
          jnz    L77E355B2
          add    eax,0000000Ch
 L77E355B2:
          push    eax
          push    00000004h
          push    eax
          call    [L77E3630C]
          and    eax,eax
          pop    eax
          jnz    L77E355C4
          or    byte ptr [eax],10h
 L77E355C4:
          pop    eax
          push    [ebp+0Ch]
          push    [ebp+08h]
          jmp    eax

拡張カーネルでは、強制的に ダイアログ生成時に無効なオブジェクトがあっても強制的にWindow を作ってるのですが、そこで問題が出たようです。

10hで or してるところを 00hにしたら正常に動作するようになりました。
バイナリエディタでいうと 0x54bc3 の 0x10を 0x00に変更するということになります。

まぁ、展開後のバイナリにオリジナルの user32.dllをコピーしても動作するのですが|。・ω・)

こういうこともあるんですね

次のバージョンは無効化も検討してみます。

おすすめ

コメントを残す

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