
roaf
(2008/12/09)
nProtectが削除された新ROクライアントをroafが検出しない、という報告が。
もう同期落ちもなくなったみたいだし完全にお役御免だと思っていたのですが、まだ動かしたいという方が
いらっしゃるようなので対応してみました。
新ROクライアント(2008/12/3以降)対応版
新クライアントではProcessAPIが一部ブロックされているようです。OpenProcess()まではいけますが、
モジュール名を取得するのにEnumProcessModules()を使うとエラーが返ります。
タスクマネージャでプロセスは見えるけどタスクが見えなかったり、ウィンドウハンドル列挙でROウィンドウが見えなかったりするので、
そっち系のAPIも同様なんじゃないでしょうか。
MicrosoftのProcess Explorerを使うとRagexe.exeにAffinity値を設定出来ますので、とりあえずプロセス名の取得をProcessAPIから
ToolHelp32系のAPIに変更して対応しました。
将来ToolHelp32APIもブロックされた場合、おそらく対応は出来なくなると思います(不正対策の方針に逆らうつもりはありませんので)。
(2008/11)
公式で症状が改善したらしいです(これ)。
雰囲気的にクライアントもしくはサーバで通信タイムアウト値を緩和したのかなという感じですが、ほとんどの人は問題なくなったようで。
RTMの遅れは治ったという人とまだ発生するという人の双方報告があって謎な感じ。
もうこれも要らないかなと思いつつ、何かの時のために放置しておきます。
マルチCPUコア環境下でROクライアントを1コアでのみ動作させようとする試み。
roaf.zip (※2008/12/3以降のROクライアントには対応してません)
- WindowsのSetProcessAffinityMask APIを使用しragexe.exeのAFMASKを強制的に0x01(#0コアでのみ動作)にします。
- 「特定のIntelCPU+特定のGeForceで発生する同期落ちエラー」を回避 or 軽減する事が出来る…かもしれません。その検証用プログラムです。
- 検証用プログラムなのでエラー処理とか適当です。
- 検証用プログラムなのでCUIです。
- ソースも入れておきました。exeが気になる人はソースチェックするなり自力コンパイルするなりして下さい。VisualStudio2005 C++です。
- 基本アイデアはRagnarok Online板@MMOBBSの「いろんなエラーに悩まされている人の相談室」スレからです。
使い方
- ROクライアント起動前にroafをあらかじめ実行しておきます。CUIなのでコマンドプロンプト窓が開きます。
- roafがragexe.exeプロセスを発見すると"ragexe.exe detected. set affinity mask to 0x0001"とメッセージが表示され、ragexe.exeのAFMASKが変更されます。
- AFMASK設定後、念の為ragexe.exeのAFMASK値を取得し"process-af-mask is xxxx / system-af-mask is xxxx"とメッセージを表示します。
- roafを終了するにはCTRL+Cを押すかコマンドプロンプトを終了させて下さい。
- 通常ragexe.exeはnProtectによりプロセスリストから隠蔽されています。
roafは「ragexe.exeが起動してnProtectによりプロセス隠蔽される」までのタイミングでragexe.exeプロセスを見つけてAFMASK設定を行います。
よってPCスペック等の環境によってうまく動作しない可能性があります。
---
958 ◆hEsAku.mLk