XP 非対応で起動できなくなったSTEAMをWindows 2000で起動だけしてみた

Steam の実行ファイル、SetThreadErrorMode というつまらない Windows 7 以降専用関数が実装されてるのですが、これを Windows 2000に実装してみて動かしてみました。

STM7
起動するとXP対応版で出ていたエラーダイアログが出てきました。

そのまま待っていると
STM8
普通に起動しました・ω・

STM9
ログイン画面までは行きますが入力すると落ちます
(これは以前と同じ)

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 すごいな

おすすめ

1件の返信

  1. みけCAT より:

    嫌がらせでのつもりはなく、SetErrorMode関数の説明
    https://msdn.microsoft.com/en-us/library/windows/desktop/ms680621
    に書かれている「システムに影響を与えにくいからSetThreadErrorModeを優先すべき」というのに従っただけ…という可能性は無いですかね?

コメントを残す

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