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経由で ファイアーウォールのオブジェクトにアクセスしようとしてエラーになってるようだ

他に、 IcfConnect と IcfDisconnect のアドレスが mswsock 内部で呼ばれているのだがなぜかこの2つの関数は実際には使われていない(謎)

WINAPI DWORD IcfOpenDynamicFwPort(HINSTANCE hDll, SOCKET socket, INT flag);
多分こんな関数。

MSWSOCK の中身を見てみると、HNETCFG がなかった場合、処理しないようになってる(((・ω・)))

あれ?つまり、あると有害なんじゃね?ってのが結論

で、削除後 Steam 起動してみたところ、例外はなくなったのですが、同じところでクラッシュ。
原因は HNETCFG ではなかったことが判明したのでした。

おすすめ

コメントを残す

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