BES - Battle Encoder Shirase
for Windows 2000/XP
Changelog
Changelog
1.0 beta5での主な変更点 - 2005年6月10日
- [FIX] プロセスのリストボックスを塗るブラシを毎回生成していた。
1.0 beta4での主な変更点 - 2005年6月7日
- [FIX] 言語変更時、About boxのWindowタイトルがおかしくなることがある。
- [FIX] Typo: Processが一カ所Prosessとなっていた。
1.0 beta3での主な変更点 - 2005年6月6日
- [NEW] 言語設定メニュー。英語、フィンランド語、日本語。
- [NEW] Limit/Watchのときの確認メッセージ。
1.0 beta2での主な変更点 - 2005年6月2日
- [FIX] スライダーの変更がトレイアイコンのツールチップに反映されない。
- [NEW] 二重起動が要求されたとき、単に拒否するのでなく、起動済みのBESをフォアグラウンドにする。
1.0 beta1での主な変更点 - 2005年6月1日
- [FIX] 内蔵「敵性」プロセスのウィンドウをHide/Showできない。
- [FIX] WATCHING_IDLEからUnwatchするとスロット2が再利用可能にならない。
- [FIX] IFFを手動設定するとキーボードフォーカスが無効のボタンになってTabキーなどが利かなくなる。
- [NEW] 色によるIFFインジケーター。
- [NEW] プロセスリストボックスにフォーカスがあるときF5でリロード。
- [NEW] 「GShow」オプション。
- [NEW] Ask/Showは常に画面左上隅にWindowを移動して復元。
- [NEW] URLリンク。
0.9.9.9での主な変更点 - 2005年6月1日
- [FIX] 初回プロセスオープン失敗時の処理。0.9.9.7でも直っていない。バグの本質が分からないが正当に回避。
- [FIX] Showコマンドがもともと不可視のウィンドウを可視化することがある。
0.9.9.8aでの主な変更点 - 2005年5月31日
0.9.9.8での主な変更点 - 2005年5月31日
- [FIX] またトレイのアイコンが変わらない。0.9.9.7のエンバグ。
- [FIX] 内蔵IFFが認識する敵が重ねて敵性登録されINIファイルを汚す。
0.9.9.7での主な変更点 - 2005年5月30日
- [FIX] Watch対象消失時のバルーンメッセージが変。Windows 2000/XPの互換性が面倒なのでバルーン廃止。
- [FIX] 初回プロセスオープン失敗時、正しくエラー表示されない。0.9.9.6のエンバグ。
- [NEW] あるプロセスに属する全ウィンドウを不可視にしたり、戻したりする機能。
- [NEW] プロセスリストの取得法を改善。
0.9.9.6での主な変更点 - 2005年5月30日
- [FIX] トレイアイコンが変化しない。0.9.9.5のエンバグ。
0.9.9.5での主な変更点 - 2005年5月29日
- [FIX] 制限を全解除するとメニューのControlが無効。
- [FIX] Watch待機中、メニューのUnlimit allが無効。
- [NEW] トレイ格納時、ユーザが左隣の別のアプリのアイコンをダブルクリックしたとき、その副作用で自分がWM_LBUTTONUPに反応しないようにした。
- [NEW] タスクトレイを常に表示。バルーンはWatchのときのみ。
- メッセージ一部日本語化。
0.9.9.4での主な変更点 - 2005年5月28日
- [FIX] トレイ右クリックメニューExitを選択→Exitを実行、の時間差内にWatchによってアイドルからアクティブに変わると、トレイアイコンが消えメインウィンドウも不可視になってしまう。
- [NEW] 終了時のウィンドウ位置を記憶。
0.9.9.3での主な変更点 - 2005年5月27日
- [FIX] トレイの右クリックメニューのRestoreが利かない。0.9.9.2でのエンバグ。
- [NEW] IFFのインターフェイス変更。
0.9.9.2での主な変更点 - 2005年5月26日
- [FIX] 対象プロセスの優先度変更に失敗。0.9.9.1でのエンバグ。(変更・復元の両方失敗するので、何も変わらないだけで、まずいことは起きない。)
- [NEW] トレイからの復帰のタイミングをダブルクリック→左ボタンUPに変更。
0.9.9.1での主な変更点 - 2005年5月26日
- [FIX] Unlimit allするとControlボタンが無効になる。
- [FIX] 初回のOpenThreadに失敗するとターゲットが消失していなくても常にTARGET_MISSINGが返る。
- [FIX] Unfreezeのエラーメッセージの書式の間違い。
- [FIX] プロセスリストのタブオーダーが変。
- [FIX] Real-Timeモードのオンオフ時、条件によって存在しないスレッドの優先度を変えようとする(失敗するだけで現実的な影響なし)。
- [FIX] PathToProcess等が単にプロセスIDを知りたいだけなのにプロセスへの全面アクセス権を要求していた(そのせいで失敗する可能性あり)。
- [NEW] List all/sysでエクスプローラと自分自身もリスト。
- [NEW] PathToProcessはフルパスでなくEXEファイル名だけ与えられた場合もプロセスIDの捜索を試みる。
- 既知の問題。現在、意図的に再現できないが、Watch待機中に制限率を変更すると、まれに目標発見時に変更が反映されないことがある?
0.9.9での主な変更点 - 2005年5月25日
- トレイ格納状態でWatchで待って対象検出したときアイコンが変わらないバグの修正。
- トレイ格納状態で制限停止したときアイコンのツールチップが変わらないバグの修正。
- Real-timeモードかどうかの変更がWindowのタイトルバー表示に正しく反映されないバグの修正。
- 「敵性」プロセスを再度、敵登録できる等のバグの修正。
- WatchだけしてアイドルのままUnwatchしたときControlボタンが無効にならないバグの修正。
- Watchだけしてアイドルのとき、Unlimit allでUnwatchできるようにした。
- 現在のIFFの状態を確認できるようにした。「敵性」のシステム定義とユーザ定義の区別も明確にし、システムのプロセス(サービス)を含めて一覧できるコマンドも追加。
- 既に制限中のターゲットは、リストで選択ボタンを無効にした(従来、選択ボタンを押した時点でエラーメッセージ)。この場合でも、ダブルクリックによる選択は意図的に可能なままとした(エラーメッセージが出る)。
- トレイ格納状態で、目標消失またはワッチ状態が変化した場合、バルーンで通知するようにした(うざいかも)。
- メインウィンドウのボタンにツールチップ。
0.9.8bでの主な変更点 - 2005年5月25日
- 内部的にReleaseSemaphoreが失敗するケースは、既にセマフォが解放されているためと判明。どっちにせよ解放されるので問題なかったが、このバグを修正。
- Watch用スレッドが終了するとき、スロット2のセマフォを解放していいのかどうかの判断法を改善。
- Unwatchすると無条件でメニューのWatchが有効になっていたバグの修正。Unwatchしてもスロット2が埋まっているときはWatchメニューは使えない。
0.9.8aでの主な変更点 - 2005年5月24日
- Unwatch後、ファイルメニューから別のターゲットをWatchできないバグの修正。
- 初回のOpenProcessに失敗した子がセマフォを解放しないバグの修正。
- 既知の問題。Watch中のアクティブ対象が消失すると内部的にReleaseSemaphoreが失敗する。動作面などで現実的な影響はないと思われるが。
0.9.8での主な変更点 - 2005年5月24日
- 既に制限中のプロセスを二重選択できてしまうバグの修正。0.9.7bでのエンバグ。
- Unwacthすると制限まで止まってしまうバグの修正。
- 制限率を0~99%から1~99%に変更。
- Windows XPでクリアタイプ。
0.9.7b(実験テスト版)での主な変更点 - 2005年5月23日
- リストから選択したデータを格納するとき、構造体同士の代入でポインタの先の実体までコピーしたつもりになっていたバグの修正。すぐに再度安全な場所に実体をコピーするので問題が表面化していなかった。
- ターゲットの有無にかかわらず全スライダーが有効になっていたバグの修正。
- ターゲットとされた後、制限解除となっている状態のプロセスをリストからWatchすると、Watchでなく単なる制限再開となるバグの修正。
- 既にターゲットとなっているプロセスを重ねてWatchできてしまうバグの修正。
- ターゲット1と2が埋まっている状態でWatchしようとするとセマフォエラーになるバグの修正。
- エクスプローラを対象外にした。エクスプローラのCPU使用率など通常問題にならないし、シェルに干渉して万一トラブルがあればろくなことにならない。
- アクティブ時にいきなり終了できないようにした。理屈ではアプリ側でフォロー可能だが、潜在的に危険。アクティブでも強制終了するには[Pause]を押してください。
- Watch時に制限率設定がiniから読み込まれないバグの修正。
- Watch時のスライダーのダイアログの挙動がおかしかったバグの修正。
- SSTPにて、SSPとCROWにも対応。
0.9.6b(安定系)での主な変更点 - 2005年5月23日
Watchが使えない以外0.9.7bと同じ。
0.9.7a(実験テスト版)での主な変更点 - 2005年5月22日
- 時刻を含むステータスをメインウィンドウに表示するようにした。
- リストの初期状態でWindowタイトルを取得するように戻した。してもしなくても大して速度は変わらない。
- Watchは複雑な使い方をするとまだ表示が変になったりする。
0.9.6a(安定系)での主な変更点 - 2005年5月22日
0.9.6aは安定志向のバージョンで、
「Watch」「Windowsテキストを取得しないで少し高速化」の2機能を無効にしてあります。
それ以外は0.9.7と全く同じソースです。
0.9.7(実験テスト版)での主な変更点 - 2005年5月21日
- プロセスリストの初期状態で、どのプロセスも含まれるスレッド0個と表示されるバグの修正。0.9.5cの変更によるエンバグ。
- プロセスリストの初期状態でUnfreezeコマンドが正常動作しないバグの修正。同上。
- UnwatchしたときStatus Unknownと表示されるバグの修正。
- 複数インスタンス起動中のアプリをプロセスリストからWatchしたとき、どのプロセスがターゲットになるか保証されないバグの修正。
- OpenProcess失敗時の対応を明示。
- プロセスリストのUpdateボタンをRefreshに改名。
0.9.6(安定系)での主な変更点 - 2005年5月21日
0.9.6は安定志向のバージョンで、
「Watch」「Windowsテキストを取得しないで少し高速化」の2機能を無効にしてあります。
それ以外は0.9.7と全く同じソースです。
0.9.5dでの主な変更点 - 2005年5月21日
- プロセスリストからWatch開始するとクラッシュすることがある重大なバグの修正。0.9.5cのエンバグ。使うメモリーを間違えて0パディングしていたが、見かけ上、一応動作していた。
- リストからWatch開始したときセマフォの扱いが正しくなかったバグの修正。
- リストの初期状態で「敵性」プロセスのパスが表示されないバグの修正。
- Watch待機中(アイドル)でもアクティブと表示されるバグの修正。
- Escキーの扱いを、アクティブ時は停止、アイドル時は終了にした。
- IFFの情報をファイル名文字列に含める変なやり方を改め、ちゃんとフィールドを設けた。
0.9.5cでの主な変更点 - 2005年5月20日
- プロセスリストでWindowタイトルを取得しないようにし、リストの表示を高速化(取得にはコストがかかる上、あまり必要ないので)。ただしUpdateを実行したときは取得する。
- リストダイアログのデザインを変更、Watchボタンを追加。
- Watchの確認間隔を10秒から8秒に変更。Watchの細部は依然ちゃんとしてない。
0.9.5bでの主な変更点 - 2005年5月19日
-
アイコンの変更でSetClassLongとWM_SETICONを併用するようにした。XPでウィンドウ左上のアイコンが変化するようになった。
-
再びSSTPを有効に(バージョン情報のみ)。
-
lame.exeを組み込み「敵性」登録。
Watch機能の細部は依然手を付けていない。
0.9.5aでの主な変更点 - 2005年5月18日
- デザインを微妙に変更。フォントにアンチエイリアス。
0.9.5での主な変更点 - 2005年5月18日
- 新機能: Watch(監視)。これまでBESは既に起動しているプロセスを対象とし、制限中に対象が先に終了すれば「目標消失」を報告して作業停止していた。Watch機能は、既に起動しているかどうかにかかわらず、その実行ファイルを監視対象とし、相手が起動していなければ「待ち伏せ」、10秒ごとに確認し、相手が起動したら負荷制限を実行する。さらに、相手が終了した後も監視を続行し、相手が再度起動すれば再度、制限を実行。この機能はまだ実験的で、細かいところができてないので注意。Watch状態を解除するにはUnlimit allまたはDo - Unwatchを行う。
Watchに関する既知の問題。制限率の設定が怪しい(うまくいくときとデフォルトの33%に戻ってしまうときがある)。
- スナップ関係でハンドルを閉じない場所があるバグの修正。
- スナップショット保存先を尋ねるダイアログでlpstrFileを初期化し忘れていたバグの修正。
- ANSI版のコマンドライン解析で一カ所ワイド文字を使っていたバグの修正。
- OpenProcessの要求をPROCESS_ALL_ACCESSからPROCESS_QUERY_INFORMATIONに弱めた。リストアップされる(制御できる可能性が出る)プロセスが増える。
- インターフェイスを微妙に変更。最初のボタン名をLimit...からTarget...に変更。
- スナップ保存機能を充実。
0.9.4aでの主な変更点 - 2005年5月17日
- 0.9.4で同梱し忘れたファイル追加。
- メインウィンドウのLimit...ボタンを大きくした。
0.9.4での主な変更点 - 2005年5月17日
- インターフェイスを微妙に変え、日本語環境で日本語化する部分を増やした(画像参照)。
- BESクラッシュ時など万一ターゲットの一部または全部が止まったまま(無応答など)になってしまった場合に備え「Unfreeze」コマンドを実装。投入するとターゲットの全スレッドのサスペンド・カウントをゼロにリセット。
- アクティブ時のデバッグログ出力間隔を約10秒から約8分(500秒)に変更(特に何もなければ)。
- ターゲットのスレッドのオープン失敗時、THREAD_NOT_OPENEDとエラー表示されるはずがTIME_OUTまたはStatus Unknownと表示されるバグの修正。0.9.2で、子スレッドが親スレッドに異常報告後、親の応答を待たずに終了するようにしたが、このエラーでは親の応答を待つ関数を消し忘れていた。そのため子が終了できず親が子の終了コードを取得できなかった。(BES内部の問題でターゲット側には影響なし)
- ターゲットのスレッドのサスペンドまたはレジュームを連続して多数回失敗した場合、何か異常が起きていると判断して処理を中断するようにした。
- 多重起動できないようにした。
- ファイルにその時点で起動中のプロセスのスナップを保存できるようにした。
- 「敵性」プロセスの表示を [ + ] に変更。
0.9.3での主な変更点 - 2005年5月16日
- Enemy属性のターゲットの制限率設定が次回起動時に保持されないバグの修正
- タスクトレイ格納時、ツールチップに動作状況の詳細を表示
0.9.2での主な変更点 - 2005年5月15日
- ターゲット1消失時(制御中のターゲットが自分で先に終了してしまう場合)、正しく処理されているのに Semaphore error と表示されていたバグの修正。
- ターゲット2または3消失時、BES側で正しく処理が完了しないバグの修正。ターゲット1のHACK_PARAMSにしかメインスレッドのhWndがセットされていなかったため、BES内部での通信に失敗していた。(ターゲット側への悪影響ではない)
- VirtualDubModがEnemy検出されないバグの修正。
- ログファイルを書き出すか設定できるようにした。
- ターゲットの実行ファイル名ごとに、何パーセントの制限を行うか記憶するようにした。
0.9.1での主な変更点 - 2005年5月14日
- すべてのリミッターを解除するとコマンドのControlが無効になっていたバグの修正(制限を再開するのにリストから選び直さなければならなくなっていた)
- メニューのStart/StopをLimit/Unlimitに統一
0.9.0での主な変更点 - 2005年5月13日
- プロセスリストの初期状態で、デフォルトで選択されているアイテムと、表示される詳細情報が対応しないことがある不具合の修正。
- Real-time modeで動作するかどうかメニューのOptionsから選べるようにした。
Real-time modeでは、BESはOSに対して最優先のプライオリティで自分を実行させるように要求します。
これはCPU負荷が100%に達している状態でBESを起動した場合でも、BESが状況を制御しやすくなる、ということを想定しています。
さらに、このモードでは、ターゲットのプロセスのプライオリティを強制的に最低にします。
Real-time modeを無効にすると、これらの処理は行われません。
デフォルトではReal-time modeが有効です。
0.8.9のアーカイブには非ユニコード版を同梱するのを忘れていました。
0.8.9での主な変更点 - 2005年5月12日
- リソースの無駄なだけなのでスキンをなくした。
- 日本語ロケールで日本語化される部分を増やした。
- 何も制御していなくてもControlメニューが有効になっていたのを直した。
- メニューの項目名を一部変更。
- バージョン情報でのソフトの説明を「Limits the CPU usage for a process」に変更。冷却は直接の目的ではなく、このソフトの機能はCPU利用時間を制限することだから。
0.8.8での主な変更点 - 2005年5月11日
- Windows 2000でダイアログの一部が文字化けする不具合の修正。
- システムディレクトリのプロセスには干渉しないように、リストから除外していたが、このリミッターを解除
- イメージのリソースを、Open Clip Art Library の素材に変更。
0.8.7での既知の問題 2004年11月27日
BES 0.8.7: Windows 2000 だと、Unicode版は、
一部のメッセージなどが文字化け(というか文字なし→□□□)になります。
機能上は問題ないですが、ANSI版ならたぶん大丈夫かと。0.8.8で直します。
0.8.7での主な変更点 2004年11月16日
ちょっといじったので、おかしなところができたかも。
タイムスライスのコントロール率(スライダー)の設定が終了時に保存され、次回に引き継がれるようにした。
アクセス権の関係でスレッドのオープンに繰り返し失敗するケースでは、適当にあきらめて停止するようにした。
これまでボタンがディスエイブルになってた IFF関係 をとりあえず実装した。リストのダイアログで項目を選択して [Friend] を指定すると、
そのプロセスは以降「CPUを過熱させることはない」とみなされ、ターゲット選択リストから省略される。
[Enemy] を指定すると、そのプロセスはCPUを過熱させるCPUにとっての敵性プロセスと認識され、
ターゲット選択リストの先頭に来るようになる。
どちらの指定もされていないプロセスは中立的に扱われる。
これらは一度指定すると次回起動時にも引き継がれる。
制御対象と関係ないプロセスを一度 [Friend] 登録しておけば、もうリストに出てこないので、すっきりする。
[Reset IFF] を選択すると、上記のすべての設定はクリアされる。ただし、
VD, VDM, AviUtl, ERMP の4つはデフォルトで ENEMY とされ、それは解除できない。
0.8.6での主な変更点 2004年11月15日
OpenThreadが失敗したとき「Couldn't Open Thread(s)」と表示して処理を中止していたのを改め、
全スレッドのオープンに失敗しない限り、再スナップ、再試行を行うようにした。
これでスレッドの変化が激しいプロセスでも、一応追尾できるようになった。
他方、セキュリティ等の理由によりオープンできないスレッドが対象プロセスに含まれていると、
延々と再スナップを繰り返してしまう(既知の問題)。
前触れなく生成される高負荷スレッドへの対応を早くするため、自動再スナップの間隔を、
従来の約40秒から約10秒にした。高負荷スレッドが急に増えた場合でも、約10秒以内に過熱抑止対応ができる。
ターゲット内のスレッドが減った場合、サスペンドまたはレジュームがフェイルするので0.1秒オーダーで検出され即座に再スナップで自動追尾するが、
スレッドが増えた場合、増えたことをアクティブに検出する方法を思いつけない。
定期的に再スナップで確認するしかない。
自らをリアルタイムのプライオリティにする一方、
処理中にはターゲットのプロセスのプライオリティをアイドルに落とすようにした(処理停止で元に戻す)。
言うほどの実効性はないが、制御側と制御される側の優先順位を明確にすることで、安定性が増すことが期待される。
0.8.5での主な変更点 2004年11月11日
最大3プロセスを独立して制御できるようにした。
0.8.4での主な変更点 2004年11月10日
タイムスライス・コントロールにターゲット情報が表示されていなかったバグを修正。
ステータス表示を簡略にした。
複数のプロセスを制御する準備をした。
他、細かい修正。
0.8.3での主な変更点 2004年11月8日
潜在的にクラッシュの原因になるバグを直した。(十分な配列長を確保していなかった。)
0.8.2での主な変更点 2004年11月8日
「実行ファイルのPath」でターゲットを識別すると、
同じプログラムのインスタンスが複数あるときにあいまいになるので、
プロセスIDで識別するようにしました。
他にも不完全な点が多いですが、とりあえず気になる場所を直しました。
0.8.1での主な変更点 2004年11月8日
v0.8 で完全Unicode対応したら、Windows me で動作できなくなったため
(掲示板での報告 #1838)、
Unicode版と、非Unicode版の両方をビルドしてみました。
他にもやること多いですが、まずはそれを直しました。
0.8を起動できなかった me ユーザは、
0.8.1 の Release 版なら起動できる可能性があります(手元に me ないので動作確認できてません)。
Release 版は、メッセージが日本語で出せません。
Windows 2000/XP以降では、Release Unicode 版を使えば、一部のメッセージが日本語化されます。
Unicode、非Unicodeの切り替えに微妙な部分があるため、
文字化けするかもしれません。フィードバックは掲示板までお願いします。
0.8での主な変更点 2004年11月5日
バッチ処理で捕捉できなくなる問題に対応
BESは、CPU負荷が高いプロセスから強制的に一定割合のタイムスライスを横取りし、
処理速度を遅くする代わりに、CPUの過熱を防ぐソフトCPUクーラーです。
どのプロセスを「ハッキング」するのか、またどの程度の割合のタイムスライスを横取りするのかは、設定でき、
任意のタイミングで開始、終了できます。横取り率はリアルタイムで随時変更可能。
負荷の高い動画エンコードで使うことを念頭に置いていますが、他の応用も可能です。
従来の v0.73 は安定して動作しますが、
複数の動画を連続してバッチ処理するとき、バッチ処理の変わり目で「CPUの負荷を減らす」効き目がなくなってしまう問題がありました。
正確には、バッチ処理でなくても、プロセスの中でスレッドの環境が変化すると、効果が下がっていました。
掲示板でも改善要望いただき、手元でも不便に思っていました。
今回のバージョンアップでは、多くの改善、機能追加が行われていますが、大幅に変えたのでいろいろと細かい不具合もあります。
自分で使う用の動けばいい的な0.73より、まじめにやっていますが、
このプログラムが正統的でない「奇手」「ハッキング」であることには変わりありません。
更新内容
「自動追尾」ターゲットのプロセスのスレッドの数やIDが変化しても、すべて追いかけて、ハッキングを続ける。
具体的に、スレッドが消えて「逃げられた」場合、プロセスのスナップを撮り直して再度ロックオンする。
また、スレッドが消えない場合でも、知らないうちに増えている場合もありうることから、
一定時間ごとに自動的にスナップを撮り直す。
Windowを持たないツールもハッキング対象にできる。
flac.exe のようなコマンドラインツールのスレッドにも干渉できるようになりました。
ユニコード対応: メッセージが日本語で出せるようになった。日本語、韓国語、中国語など、あらゆるファイル名を処理できる。
Windows 98では無理だが、もともと98には対応していない。
2000/XPでは基本的に動く。MEで動くかは分からない。Windows 2000では Arial Unicode MS が存在しないと、ユニコード文字は表示できない場合がある。
タイムスライス制御の向上。0%から99%まで1%刻みで「横取り率」を設定できる。
設定変更はスライドバーを動かすとすぐその場で反映される。
同時に複数のプロセスに干渉したい、との要望もあったので、横取り率設定ダイアログはスライダーが3つあって、3種類設定できるかっこうになってます。
これはまだ実装されてません。
コマンドライン。
"BES.exe" "C:\path\AviUtl.exe"
のようにすると(引用符は必須)引数のプロセスをターゲットとして起動する。
温度上昇をトリガーとしてコマンドラインを起動できる他のソフトと連携して使う用。
既知の問題。たくさんある。設定が保存されず、常に初期状態は横取り率33%とか。
付記
このソフトは「BEY バトル・エンコーダ・ユキカゼ」というネタを書いた次の日に、ネタでおもしろがって作ってみたものです。
mion <mion@faireal.net>
[ index ]