Windowsの本気をOSに止めさせない。
Windows 11/10 の EcoQoS スロットリングをイベント駆動でリアルタイム無効化。
待機中 CPU 0%。設定したら、あとは忘れていい。
Windowsが密かにかけていたCPUの枷を、UnLeafが完全に外す。
PCが重い。それ、あなたのせいじゃありません。
ゲームから別の画面に切り替えたら急に重くなった。Chromeのタブがクリックするたびにグルグル読み込む。音楽制作ソフトがバックグラウンドでプチプチ途切れる——スペックは十分なはずなのに、なぜか重い。「もしかして故障?」いいえ、違います。
Windowsが知らない間に、あなたのCPUをこっそり絞っています。
⚠ Windowsの省エネ機能が「このアプリ、もう暇でしょ?」と勝手に判断しています
Windowsには、バックグラウンドに回ったアプリのCPU使用率を自動で絞る省エネ機能(EcoQoS)が搭載されています。ノートPCのバッテリー節約には役立つのですが、ゲームや音楽制作・動画編集のように「裏でも全力で動いてほしい」アプリには完全に逆効果です。さらに困ったことに、この制限をオフにする設定画面は、Windowsには用意されていません。UnLeafはこの制限を、自動で解除し続けます。
使いたいアプリを登録するだけ。
あとはUnLeafが24時間自動で守り続けます。
難しい設定は一切不要です。アプリ名をリストに追加したら、それだけで完了。「あれ、なんか軽くなった気がする」——それがスタートです。
タスクマネージャーを眺めていたとき、Chromeのプロセスに謎の葉っぱアイコンがずらっと並んでいるのを見かけたことはないでしょうか。あれの正体が EcoQoS です。Windows 10(1709)以降に搭載された機能で、バックグラウンドに回ったプロセスのCPU優先度をOSが自動で引き下げます。省電力ノートPCにとっては「ありがたい機能」ですが、常時高性能を求めるデスクトップ・ゲーミング環境では完全に有害となります。
EcoQoS はウィンドウの前後関係だけを見て発動します。DAW がバックグラウンドで必死にレンダリング中でも、ゲームが Alt-Tab 直後に全力で復帰しようとしていても、OS はそれを一切考慮しません。あなたが「今すぐフル性能が欲しい」その瞬間にも、OS は静かに絞り続けます。
さらに厄介なことに、EcoQoS は「1箇所塞げば終わり」ではありません。OS は NT API、Win32 API、スレッドスケジューラ、レジストリポリシーの複数の経路から同時に再適用を試みます。一箇所を封じても、別の経路からひょっこり顔を出します。まるでモグラ叩きですが、相手はOS本体です。
UnLeaf はポーリング(定期的な監視)を一切使わない。Windows カーネルの ETW(Event Tracing for Windows) に直接接続し、プロセス起動・スレッド生成のイベントを受信した瞬間に 5 層の防御解除を実行する。OS が EcoQoS を適用しようとする前に、UnLeaf がそれを上回る速度で対処する。
「高スペックPCを組んだはずなのに、なんかもっさりする…」
高性能なCPUを積んだPCを新調した。大量のChromeタブを開いたり、バックグラウンドのChromeタブに切り替えると、読み込みが信じられないほど遅い。「え、このPC壊れてる?」——おかしいと思ってタスクマネージャーを開いたら、Chromeのプロセスに見慣れない葉っぱのアイコンがずらっと並んでいた。
調べてみると、それは Windows 10/11 に標準搭載された「EcoQoS(効率モード)」だとわかった。OS が自動でバックグラウンドプロセスのCPU使用率を絞り、電力消費を抑える機能だ。省エネの観点からは確かに理にかなっている——ただ私は、省エネのためにPCを買ったわけではなかった。
いくつかの対策を試みたが、いずれも「惜しかった」で終わった。
--disable-features=UseEcoQoSForBackgroundProcess を追加
最初は効果があるように見えた。しかし Windows のアップデート後にひっそりと無効化されていた。Microsoftの気まぐれに付き合うことはどう考えても割に合わず現実的ではない。
「OSが自己修復するよりも速く、EcoQoS を解除し続けることはできないか?」——その答えは、Windows カーネルの深部に眠っていた。ETW(Event Tracing for Windows)を使えば、OS がプロセスを起動した「その瞬間」のイベントを直接受け取り、ミリ秒で EcoQoS を解除できる。ポーリングではなく、純粋なイベント駆動。OS が動く前に動く。仕事が終われば CPU はゼロに戻る。こうして UnLeaf は、C++20 でゼロから書き上げられた。
カーネルプロバイダ Microsoft-Windows-Kernel-Process から直接イベントを受信。プロセス起動(ID:1)とスレッド生成(ID:3)を ~1ms で捕捉し、即時解除を発火します。
NT API・Win32 API・優先度クラス・スレッド個別制御・レジストリポリシーの 5 段階で同時介入。OS がどの経路から再適用を試みても、すべての入口を封鎖します。
AGGRESSIVE(起動直後)→ STABLE(定常)→ PERSISTENT(頑固な OS 対応)の 3 状態を自動推移。不要な処理を排除しながら、必要な局面では監視を強化します。
WaitForMultipleObjects(INFINITE) により、イベントが来るまで CPU を一切使いません。待機中は文字通り 0.00%。ゲームのフレームを奪いません。
SYSTEM 権限で常駐するツールだからこそ、コアエンジンは MIT ライセンスで全公開。誰でもソースコードを読み、ビルドして安全性を自ら確認できます。
ETW セッションの死活を 30 秒毎に 3 段階で監視。「ウォームアップ猶予 120 秒 + イベント枯渇閾値 + セッション生存確認」で、真の異常のみを検知して自動復旧します。
最適化したいアプリを追加して「サービス登録・実行」を押すだけ。 あとは Manager を閉じても、エンジンが自動で動き続けます。
葉っぱアイコン(効率モード)が消え、プロセスが本来の優先度で動作するようになります。 この変化が、フレームレート改善やレイテンシ低減として体感されます。
| 項目 | 手動設定 | CMD / スクリプト | 他社常駐ツール | UnLeaf |
|---|---|---|---|---|
| 検知・適用速度 | 手動(遅い) | 手動 / 起動時のみ | 数秒間隔ポーリング | ~1ms イベント駆動 |
| 子プロセス追跡 | 不可 | 不可 | 困難 | 完全対応(ETW) |
| スレッド再適用対応 | 不可 | 不可 | 不可 | リアルタイム解除 |
| 待機時 CPU 負荷 | 0% | 0% | 0.1~1.0% | 0.00%(完全休眠) |
| メモリ使用量 | — | — | 15~20 MB | 約 15 MB |
| OS 再起動後の持続性 | 上書きされる | 再実行が必要 | ポーリング再開 | サービス自動起動 |
| ライセンス | — | — | 有料 / サブスク | MIT オープンソース |
ページをスクロールして 「Assets」 という項目をクリックし、UnLeaf_v1.x.x.zip を選んでダウンロードしてください。
UnLeaf はポーリングを一切使わず、ETW (Event Tracing for Windows) を通じて Windows カーネルと直結します。プロセスやスレッドの生成というOSレベルのイベントを直接受け取り、即時に処理します。
- プロバイダ: Microsoft-Windows-Kernel-Process (GUID: {22FB2CD6-0E7D-4BF9-9B98-2FAD1FD0E716})
- Event ID 1 — Process Start: 新規プロセスの起動を検知し、即座に最適化を適用します。
- Event ID 3 — Thread Start: 実行中に OS が EcoQoS を再適用した際に発火するスレッド生成イベントも追跡します。
- 待機中 CPU 0.00%: WaitForMultipleObjects(INFINITE) により、イベントが来るまで CPU サイクルを消費しません。
OS は複数の独立した経路で EcoQoS を適用・維持しようとします。UnLeaf はこれを防ぐため、5 つの層で同時に介入します。
- Layer 1 — Background Mode Exit: SetPriorityClass(PROCESS_MODE_BACKGROUND_END) で背景モードを明示的に終了させます。
- Layer 2 — NT API(Win11 主経路): 低レベル NT API NtSetInformationProcess (Class 77) で Power Throttling を直接 OFF にします。
- Layer 3 — Win32 API(Win10 互換): SetProcessInformation による Power Throttling OFF。OS バージョンを自動検出して切り替えます。
- Layer 4 — Priority Class: HIGH_PRIORITY_CLASS を設定し、OS が自動的に EcoQoS を再適用しにくくします。
- Layer 5 — Thread-Level Control: 全スレッドを走査して個別に Throttling を無効化。スレッド生成のたびに再実行されます。
プロセスの「OS に対する頑固さ」に応じて監視強度を自動調整し、無駄な処理を排除しながら確実な保護を維持します。
| フェーズ | 発動条件 | 動作 |
|---|---|---|
| AGGRESSIVE | プロセス登録から 3 秒間 | 200ms / 1s / 3s の 3 タイミングで精密検証を実施。EcoQoS が即座に再適用されないかを確認。 |
| STABLE | 検証通過後の定常状態 | ETW イベントが発生するまで完全休眠。CPU 使用率はゼロ。 |
| PERSISTENT | OS が頻繁に再適用する場合 | 5 秒周期の強制再適用ループへ移行。60 秒安定したら STABLE へ自動復帰。 |
- DACL によるアクセス制御: Named Pipe \\\\.\\pipe\\UnLeafPipe の通信を SYSTEM + Administrators のみに制限します。
- 保護プロセスリスト: csrss.exe・lsass.exe・svchost.exe 等のシステムクリティカルプロセスは登録不可として保護します。
- 完全オフライン設計: 外部ネットワークへの接続を一切行いません。ファイアウォールで遮断しても動作します。
- RAII によるリソース管理: すべてのハンドル・メモリを RAII で管理。24 時間ストレステストでリーク検出ゼロを確認済みです。
UnLeaf が書き込むレジストリキーをすべて公開します。これらはサービス停止・アンインストール時にマニフェストに基づいて自動的に完全削除されます(クラッシュ後も安全)。
| レジストリパス | 用途 |
|---|---|
| HKLM\\SYSTEM\\CurrentControlSet\\Control\\Power\\PowerThrottling\\<FullExePath> | プロセスの電力スロットリング除外設定(EcoQoS の永続的 OFF) |
| HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\<ExeName>\\PerfOptions\\CpuPriorityClass | exe 起動時の CPU 優先度クラスを HIGH に固定(IFEO 経由) |
| 対象 OS | Windows 10 (1709+) / Windows 11 (22000+) |
|---|---|
| エンジン | C++20 Native / MSVC / x64・ARM64 ネイティブバイナリ |
| 動作権限 | SYSTEM(Windows サービスとして常駐) |
| 検知速度 | ~1ms(ETW イベント駆動、ポーリングなし) |
| 待機時 CPU | 0.00%(WaitForMultipleObjects INFINITE) |
| メモリ使用量 | 約 15 MB(1 週間ストレステストでリーク検出ゼロ) |
| IPC 通信 | Named Pipe(DACL: SYSTEM + Administrators のみ許可) |
| 外部依存 | なし(DLL 不要・スタンドアロンバイナリ) |
| ネットワーク | 一切なし(完全オフライン設計) |
| 自動テスト | 151 / 151 Pass(GitHub Actions CI にて自動実行) |
SYSTEM 権限でプロセスを監視するソフトウェアには、絶対的な透明性が必要だ。UnLeaf は「コアエンジンは MIT 完全オープンソース、Manager UI はクローズドソース(バイナリ配布)」というオープンコアモデルを採用している。世界中のエンジニアがソースコードを確認し、自らビルドして安全性を証明できる。
- ETW イベント処理・EcoQoS 解除ロジック
- 5 層防御解除シーケンス(PulseEnforceV6)
- 3 フェーズ適応制御システム
- レジストリポリシーマネージャ v5
- IPC Named Pipe サーバー(DACL 付き)
- 151 項目のユニットテストスイート
- GitHub Actions CI/CD パイプライン
- Win32 GUI アプリケーション(GDI+)
- ダークテーマ・カスタムウィジェット
- 仮想 ListView リアルタイムログビューア
- 対象アプリ管理インターフェース
- ビルド済み exe としてのみ配布
- エンジン同様、完全オフライン動作
初回起動時のみ、Windows サービス登録のために UAC プロンプトが表示されます。2 回目以降はサービスが自動起動するため確認不要です。Set and Forget で動作します。
任意の exe を対象に指定できます。ただし csrss.exe・lsass.exe・svchost.exe 等のシステムクリティカルプロセスは安全のため登録をブロックしています。
コアエンジンは完全なオープンソースです。GitHub でソースコードを確認し、自分でビルドして使うことも可能です。疑問があれば SYSTEM 権限で何を行っているかをコードレベルで確認できます。
UnLeaf Manager を管理者として起動し「Unregister Service」をクリック。レジストリへの書き込み(2 キー)が自動クリーンアップされます。その後フォルダを削除するだけで完了です。
はい。x64 と ARM64 の両アーキテクチャ向けネイティブバイナリを提供しています。Surface Pro X・Snapdragon X Elite 搭載機でも x64 と同等のパフォーマンスで動作します。
UnLeaf はプロセスの優先度と電力スロットリング設定を変更するだけで、ゲームのコードやメモリ領域には一切干渉しません。Windows 標準 OS API の範囲内の操作です。EAC・BattlEye で検知対象となる操作は行っていませんが、使用は自己責任でお願いします。
一切通信しません。完全なオフライン設計です。テレメトリ・使用状況の送信・ライセンス認証は行いません。ファイアウォールで遮断した状態でも完全に動作します。
対象アプリごとに 2 箇所のみ書き込みます。
① HKLM\\SYSTEM\\...\\PowerThrottling\\<FullExePath> — EcoQoS 除外
② HKLM\\SOFTWARE\\...\\Image File Execution Options\\<ExeName>\\PerfOptions\\CpuPriorityClass — CPU 優先度固定
いずれもアンインストール時に自動削除。マニフェスト追跡により、クラッシュ後も確実にクリーンアップされます。
- jobObjects_ エントリ削除漏れを修正。RemoveTrackedProcess() がプロセス終了ごとに Windows Job Object ハンドルを蓄積し続けていた真のリークを根絶。jobObjects_.erase(pid) を jobCs_ 単独取得で追加し、lock inversion を回避。
- TDH パースバッファを thread_local 化。ParseProcessStartEvent() がイベントごとに alloc/free していた反復ヒープ確保をゼロに削減し、長時間稼働時のヒープ断片化を抑制。
- ProcessMonitor の 4 ログサイトで wstringstream を std::to_wstring() に置換。一時オブジェクト生成を最小化。
- engineControlThreadId_ を std::atomic<DWORD> に変更。クロススレッドの可視性を保証し、DEBUG アサートの検出精度を向上。Release ビルドへの実行時コスト影響なし。
- HeapSetInformation(GetProcessHeap(), HeapOptimizeResources, ...) を EngineCore::Start() に追加。プロセスヒープが idle 時に未使用コミットページを積極的にデコミット (Windows 8.1+)。6.5 時間実動テストでメモリ増加率が約 5 倍改善 (3.78→6.26 MB / 6.5h)。
- ETW ヘルスチェックを 3 段判定に再設計(ウォームアップ猶予 120s + lost event 閾値 + セッション生存確認)。idle と ETW セッション死を正確に区別し、不要な再起動を防止。
- instance_ を atomic 化し TOCTOU 競合を排除。ETW シャットダウン契約の 5 ステップ順序を厳密化。
- TDH ペイロードのバウンデッド・コピー実装により領域外読みリスク(AV)を排除(セキュリティ強化)。
- CrashDump オプトイン機能を追加。UnLeaf.ini で CrashDump=1 を設定すると MiniDump を出力。PDB 常時出力で完全なシンボル解析が可能。
- RegistryPolicyManager v5 搭載。IFEO(exe 名単位)と PowerThrottle(パス単位)を完全独立管理。Chrome + Canary 等の同名複数パスも個別追跡。
- CPU 96.9% 暴走バグを修正。条件付き SetEvent パターンとスピン検知ログを追加。
- TrackedProcesses のハード上限(2000 件)設定。zombie 優先・最古優先の eviction でメモリリークを根絶。
- enforcementQueue を CRITICAL / NON-CRITICAL の 2 キューに分離。長期稼働時のメモリ線形増加を根絶。
- サービス起動時に config 全エントリへ事前ポリシー適用(プロアクティブ化)。name-only ターゲットの適用漏れを解消。
- MAX_PATH 制限を撤廃。CanonicalizePath(GetFullPathNameW)に正規化を統一。
- ログローテーション 2 サイクル目のスタックオーバーフロークラッシュを修正(無限再帰を排除)。
- 2 サイクル目のリネーム失敗を修正。SetFileInformationByHandle(POSIX_SEMANTICS) によりオープンハンドルがあっても原子的置換が可能に。
- Manager のライブログ表示を RichEdit から仮想 ListView に刷新。高ログ量時の自動スクロール停止・空行アーティファクトを解消。
- ETW バッファ設定を明示化(64KB, Min:4, Max:32)。ゾンビセッションの自動クリーンアップを追加。
- ETW ロストイベント検知を追加。バッファオーバーフロー時に累積カウントを LOG_ALERT で通知。
- Manager のウィンドウ位置・サイズを UnLeaf.ini に永続化。
- エンジン判断ロジックを純粋 C++ モジュール(engine_logic)として分離。Win32 非依存でユニットテスト可能に。
- ユニットテストを 72 件から 104 件に拡充。GitHub Actions CI を統合し、push/PR 時に自動ビルド+テスト実行。
- EnginePolicy 構造体を導入しタイミング定数を一元管理。
- ETW を用いたイベント駆動 EcoQoS オプティマイザとして初リリース。
- 3 フェーズ適応制御(AGGRESSIVE → STABLE → PERSISTENT)を実装。
- 5 層 EcoQoS ポリシー強制(NT API + Win32 API + レジストリ)を実装。
- DACL 付き Named Pipe IPC・Win32 GUI Manager(ダークテーマ)・72 項目ユニットテストを実装。
本リポジトリには UnLeaf の心臓部である UnLeaf_Service の完全なソースコードが含まれています。クローン直後からエンジン単体をビルド可能です。
前提条件- Windows 10 / 11 SDK
- CMake 3.20 以上
- MSVC Compiler(Visual Studio 2022 推奨)
ソース構成: src/common/ (logger, config, registry, crash_handler) | src/engine/ (Win32 非依存の純粋 C++ ロジック) | src/service/ (ETW, サービス制御) | tests/ (151 テスト)