SHLWAPIのベースアドレスの大幅な変更とXPモードでの振る舞い

先日のWindows Update のInternet Explorer 用の累積的なセキュリティ更新プログラム (978207/MS10-002) では、いつものファイルに加えて、Windows Shellハンドラのアップデートもこっそり前もってされていた、Windows 2000/XPSP2ですが、Baseアドレスの大幅な変更がなされています。


6.0.2800.1982では 0x70A70000 だったベースアドレスが、6.0.2800.1995では 0x77280000 に変更になっています。

ちなみに、Windows 2000の SHLWAPI.DLLは XPSP1のDLLと同じモジュールが使用されていたため、現在もその内部で、OSバージョンによって分岐処理が行われています。
だから、OSバージョンを XP に偽装すると、Explorerでアイコン表示が乱れたり、表示されなかったりする現象が発生します。

          mov    esi,[KERNEL32.dll!GetVersionExA]
          mov    edi,L772DE1E0
          push    edi
          mov    [L772DE1DC],ebx
          mov    dword ptr [L772DE1E0],0000009Ch
          call    esi <- GetVersionExA
          test    eax,eax
          jnz    L77285838
          jmp    L7728582B
 L7728581B:
          cmp    edx,00000023h
          ja     CASE_77285A82_PROC001F
          jmp    [CASE_PROCTABLE_77285A82+edx*4]
 L7728582B:
          push    edi
          mov    dword ptr [L772DE1E0],00000094h
          call    esi <- GetVersionExA
 L77285838:
          mov    eax,[L772DE1E4]
          mov    edx,[esp+10h]
          mov    ecx,[L772DE1E8]
          push    00000005h
          pop    esi
          cmp    eax,esi
          jnz    L7728581B
          test    ecx,ecx
          jnz    L7728581B <-XPの場合分岐処理

          cmp    edx,00000015h
          jnz    L7728581B <-21番関数以外はXPと共通処理

具体的にはこの箇所で、OSバージョンを偽装すると不具合が発生しています。

KDWの 0.83より追加された shlwfixerは、この処理分岐を強制的にWindows 2000用に書き換える事によって、XP互換モードで動かしたときも、Explorer系サービスが正常に動作するようにサポートします。

おすすめ

4件のフィードバック

  1. W2k Fan より:

    新KDWを入れたら、atl.dllがANSI版だったことに
    気づかされました; いつもお世話にならして貰って
    おります。
    ところで、一度どうしても質問させて頂きたい事が
    あるのですが、
    当方、XP&2K(Pen4),Vista&2K(Core2Duo)のデュアルで使用しておるのですが、なぜかXPやVistaより2Kの通信速度が
    どこで測っても一割以上は遅いのです。実際、体感的にも
    XPやVistaより通信がやや遅く感じられます。
    勿論、毎月のupdateはきちんとし、通信設定もXPと同じにし、また黒翼猫さんのブログも色々と参考にさせて頂いて、出来る限りファイルを新しくしてみたのですが、
    やはりどうも改善されません;
    もしかして自分だけの現象なのかもしれませんが、
    もし何らかの理由があって原因をご存知でしたら、
    お暇な時にでもご教授頂けたら、有難いですm○m
    長文、素人的な質問、すいませんでした;

  2. W2k Fan より:

    新KDWを入れたら、atl.dllがANSI版だったことに
    気づかされました; いつもお世話にならして貰って
    おります。
    ところで、一度どうしても質問させて頂きたい事が
    あるのですが、
    当方、XP&2K(Pen4),Vista&2K(Core2Duo)のデュアルで使用しておるのですが、なぜかXPやVistaより2Kの通信速度が
    どこで測っても一割以上は遅いのです。実際、体感的にも
    XPやVistaより通信がやや遅く感じられます。
    勿論、毎月のupdateはきちんとし、通信設定もXPと同じにし、また黒翼猫さんのブログも色々と参考にさせて頂いて、出来る限りファイルを新しくしてみたのですが、
    やはりどうも改善されません;
    もしかして自分だけの現象なのかもしれませんが、
    もし何らかの理由があって原因をご存知でしたら、
    お暇な時にでもご教授頂けたら、有難いですm○m
    長文、素人的な質問、すいませんでした;

  3. blackwingcat より:

    フレッツ光導入時の記事は参考にされましたか?

  4. blackwingcat より:

    フレッツ光導入時の記事は参考にされましたか?

コメントを残す

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