Windows 2000で HNETCFG が呼ばれたときに 例外 0x000006D9 が出ている?
Windows XP SP3 版の MSWSOCK を使うと、内部的に HNETCFG を読んでいるのだが、どうも、このHNETCFG の挙動によってはアプリが異常終了してるのでは?という仮定を立ててみた・ω・
(実際Steam はログイン直後に 例外 6D9をはく)
L71985062: call [KERNEL32.dll!GetLastError] 71985068 mov [ebp-74h],eax 7198506B push [ebp-54h] 7198506E push [ebp+08h] 71985071 push [L719B7578] 71985077 call [L719B757C] 7198507D FF758C push [ebp-74h] 71985080 call [KERNEL32.dll!SetLastError] L71985086: 71985086 cmp dword ptr [ebp-50h],00000000h 7198508A jnz L71991C71 L71985090: 71985090 push esi |
例外を出すのは L719B757C をコールしたときなのだが
トレースしてみると、HNETCFG の IcfOpenDynamicFwPort がコール されてRPC経由で ファイアーウォールのオブジェクトにアクセスしようとしてエラーになってるようだ
WINAPI DWORD IcfOpenDynamicFwPort(HINSTANCE hDll, SOCKET socket, INT flag);
多分こんな関数。
MSWSOCK の中身を見てみると、HNETCFG がなかった場合、処理しないようになってる(((・ω・)))
あれ?つまり、あると有害なんじゃね?ってのが結論
で、削除後 Steam 起動してみたところ、例外はなくなったのですが、同じところでクラッシュ。
原因は HNETCFG ではなかったことが判明したのでした。
Comments