背景
先日、Windows 11 のアップデート直後から Xbox App が完全に機能しなくなり、起動時に 0x80070426 エラーが吐き出される現象に見舞われました。
システムサービス(services.msc)を確認すると、そこにはなぜか同名の「Gaming Services」が2つ並んでいるという異常事態。一方はすべてのボタンがグレーアウトして操作を受け付けず、もう一方は起動を試みると 「エラー 1060: 指定されたサービスはインストールされていません。」 と返される状態でした。
解決に向けて一通りの定番手順を試したものの、結果はすべて全滅。
- PowerShell の
Remove-AppxPackageによるクリーンアップと Microsoft Store からの再インストール ⇒ 効果なし - Microsoft 公式の専用修復ツール(
GamingRepairTool.exe)の実行 ⇒ 無反応で効果なし PsExecを使って SYSTEM 権限に昇格し、sc deleteでサービスの強制削除を試行 ⇒ 「Error 5: アクセスが拒否されました。」 で失敗- WinRE(Windows 回復環境)に入り、
WindowsApps配下のファイルを物理削除。さらに「個人用ファイルとアプリを引き継ぐ」形でのインプレースアップグレード(システム上書き重装)を敢行 ⇒ 執念深く復活し、効果なし
SYSTEM 権限すら拒絶され、OSの上書きインストールでも初期化できないという、極めて不可解な挙動です。しかし、この時点で「問題の本質はファイル権限や AppX デプロイエンジンではなく、Windows のカーネルドライバの状態にあるのではないか」という疑念が浮かびました。以下、その調査の記録です。
調査のアプローチ
SYSTEM 権限でさえ Error 5 が返り、上書きインストールでも解消されない(=破損したステートが正当な構成として引き継がれている)以上、UWP のエコシステムを迂回し、ハードコーディングでシステムにサービスを直接注入する必要があると判断しました。
そこで、sc.exe create を用いて物理パスを強制的に書き込み、起動を試みたところ、明確な兆候が現れました。 システムは 「[SC] StartService 失敗 1056: サービスのインスタンスは既に実行されています。」 を返したのです。さらに詳細なステータスを確認すると、STATE : 2 START_PENDING(起動保留中) となっていました。
これで先ほどの Error 5 の理由が氷解しました。バックグラウンドプロセスが「起動中」のまま無限にスタックしていたのです。Windows のカーネル保護メカニズムは、Pending 状態にあるサービスの変更や削除を絶対に変えないため、結果としてこのプロセスがシステム級の「無敵の盾」を得ていたわけです。
原因分析
では、なぜ無限スタック(ハング)が起きていたのでしょうか。 Gaming Services は単なる一般的なバックグラウンドプログラムではなく、Xbox の仮想ディスク(XVD)をマウントするために、システム最下層のファイルシステムミニフィルタドライバ(Minifilter Driver)に深く依存しています。
そこで下層のドライバ群を芋づる式にチェックしたところ、基礎的なブロックデバイスドライバである xvdd.sys は正常に動作していましたが、専用のゲームフィルタドライバである gameflt.sys が「1060: 未インストール」 になっているのを発見しました。
どうやら Windows Update の際に、何らかの理由で gameflt ドライバのレジストリ情報(登録情報)が消失してしまったようです。サービス起動時にカーネルへこのフィルタドライバの呼び出しを要求したものの、応答が得られず、プロセスが無限のブロッキング(死のループ)に陥っていたのが真相でした。
解決策
原因が「ドライバ不足によるプロセスのハング(デッドロック)」と判明したため、対症療法ではなく根本原因を叩きます。
1. デッドロックを破壊し、ハンドルを解放する
まずはスタックしているプロセスを強制終了します。
taskkill /F /IM GamingServices.exe /T
taskkill /F /IM GamingServicesNet.exe /T
2. ドライバストアからオリジナルドライバを発掘・再注入
C:\Windows\System32\DriverStore\FileRepository に移動し、gameflt.inf を検索します。見つかったら、Windows 標準のパッケージ管理ツール(PnPUtil)を使ってカーネルに強制再インストール(注入)します。
pnputil /add-driver "見つかった gameflt.inf の絶対パス" /install
3. カーネルドライバを呼び出し、サービスを再起動
sc start gameflt
sc start GamingServicesNet
sc start GamingServices
これで Xbox App を起動したところ、何事もなかったかのように一瞬で正常起動しました。
まとめ
SYSTEM 権限をもってしてもサービス操作で Error 5 が出る場合、その多くはプロセスが START_PENDING でスタックしています。
特に、仮想ディスクロジックを持つ Xbox コンポーネントのように、OSのコア領域と深く結びついている UWP アプリがデッドロックに陥った場合、アプリケーションレイヤーでの重装や権限設定に固執するのは時間の無駄になりかねません。一歩引いて、その下に隠れている .sys カーネルドライバの依存関係を直接疑うのが、解決への最短ルートです。


