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