XP 非対応で起動できなくなったSTEAMをWindows 2000で起動だけしてみた
Steam の実行ファイル、SetThreadErrorMode というつまらない Windows 7 以降専用関数が実装されてるのですが、これを Windows 2000に実装してみて動かしてみました。
起動するとXP対応版で出ていたエラーダイアログが出てきました。
そのまま待っていると
普通に起動しました・ω・
ログイン画面までは行きますが入力すると落ちます
(これは以前と同じ)
00:26:35.219: \src\common\tcpconnection.cpp (2873) : Assertion Failed: sm_cOutstandingSendsAllConnections > 0 00:26:35.250: \src\common\tcpconnection.cpp (2873) : Assertion Failed: sm_cOutstandingSendsAllConnections > 0 00:26:35.266: First chance exception 0x80000003 (Breakpoint) occurred in "Steam\tier0_s.dll" at address 0x3F005731 by thread 23 "CIPCServer::Thread_MainLoop()". 00:26:35.281: \src\common\tcpconnection.cpp (2873) : Assertion Failed: sm_cOutstandingSendsAllConnections > 0 00:26:35.313: \src\common\tcpconnection.cpp (2873) : Assertion Failed: sm_cOutstandingSendsAllConnections > 0 00:26:35.328: First chance exception 0x80000003 (Breakpoint) occurred in "Steam\tier0_s.dll" at address 0x3F005731 by thread 23 "CIPCServer::Thread_MainLoop()". 00:26:35.391: First chance exception 0x000006D9 (不明 ) occurred in "C:\WINNT\system32\KERNEL32.dll" at address 0x77E7BCB1 by thread 23 "CIPCServer::Thread_MainLoop()". 00:26:35.594: First chance exception 0xC0000005 (不正なアクセス) occurred in "Steam\tier0_s.dll" at address 0x3F01521D by thread 22 "IOCP Thread 0". 00:26:35.610: Starting minidump reporter process 00:26:40.250: Failed spawning steam error reporter process. 00:26:40.281: Thread 42 started in "C:\WINNT\system32\KERNEL32.dll" at address 0x77E5B740. |
3つの例外に注目してみた、ちなみに1つ目は Asert 失敗時にBREAK を読んでるのでアプリが落ちてるらしい。
1つめは環境変数に
DONT_BREAK_ON_ASSERT=1 を設定することで実は回避できる
2つめは HNETCFG.DLLを削除することで回避できる
3つ目は TSListBase_Pop という関数内でクラッシュするのだがよくわからない ・ω・
とりあえず、結論としては 特別な機能の実現のためではなく、単に XP とVistaで 起動させないようにするためにだけ関数を追加してるのが判明 ((((・ω・)))) Steam すごいな
嫌がらせでのつもりはなく、SetErrorMode関数の説明
https://msdn.microsoft.com/en-us/library/windows/desktop/ms680621
に書かれている「システムに影響を与えにくいからSetThreadErrorModeを優先すべき」というのに従っただけ…という可能性は無いですかね?