> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Game Saves のデバッグ

> SCID の構成ミス、パートナー センターの Connected Storage 設定、ハンドルのクリーンアップ、および NTSTATUS コードなど、XBOX GDK Game Saves の一般的なエラーを修正します。

この記事では、デバッグが必要な Game Saves の一般的なシナリオと、その修正方法について取り上げます。

## Game Saves の一般的なエラー シナリオ

### 誤って構成されたサービス構成識別子

[XGameSaveFilesGetFolderWithUiAsync](/reference/system/xgamesavefiles/functions/xgamesavefilesgetfolderwithuiasync) の呼び出し時にエラー 0x80830002 (E\_GS\_NO\_ACCESS) が発生する場合、ソース コード内のサービス構成識別子 (SCID) が正しくない可能性があります。SCID が Microsoft パートナー センターに表示されているものと一致していることを確認してください。次のようなシステム エラー メッセージが表示されることがあります。

<img src="https://mintcdn.com/microsoft-4404708b/CwRBzaXvHw9zaPoe/images/gdk/features/common/temporary-network-error.png?fit=max&auto=format&n=CwRBzaXvHw9zaPoe&q=85&s=d43a9f64593871f84957ae415351e491" alt="ダイアログ: 一時的なネットワークの問題があります。" width="2218" height="923" data-path="images/gdk/features/common/temporary-network-error.png" />

#### Game Binding への影響

タイトルが [Game Binding](/services/xbox-services/fundamentals/game-binding/game-binding-overview) を使用しており、後で Microsoft Game Development Kit (GDK) の PC バージョンを追加する場合、プライマリ製品の Microsoft アカウント (MSA) の AppID (MSAppID) を使用する必要があります。セカンダリ製品の MSAAppID を使用すると 0x80830002 エラーが発生します。

### パートナー センター設定の構成ミス

パートナー センター設定の構成ミスは Game Saves エラーの一般的な原因になることがあります。ユーザーの Game Saves がクラウドに対して同期されるようにするには、パートナー センターの **\[Gameplay settings]** > **\[Title Storage]** で **\[Connected Storage]** オプションを選択します。次の図は、Game Saves がクラウドに対して適切に同期できるようにするために必要なパートナー センターの Connected Storage 構成のセットアップを示しています。

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/partner-center-config-setup.png?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=3e538fa1fdfd3ea926e2dea68e8ed584" alt="パートナー センターの Connected Storage 構成のセットアップ。" width="2187" height="895" data-path="images/gdk/features/common/partner-center-config-setup.png" />

### ハンドルのクリーンアップ

Game Saves のクラウドとの同期は複数のハンドルで管理されます。これらのハンドルのライフタイムが適切に管理されていない場合、クラウドとの同期時に未定義の動作が発生する可能性があります。

`XGameSaveFiles`:

* タイトルの起動時および再開時に [XGameSaveFilesGetFolderWithUiAsync](/reference/system/xgamesavefiles/functions/xgamesavefilesgetfolderwithuiasync) を呼び出します。この呼び出しは、Game Saves プロバイダー ハンドルを暗黙的に作成します。タイトルの中断または終了時に OS がそれを破棄します。

`XGameSave`:

* 更新が成功したか失敗したかにかかわらず、[XGameSaveSubmitUpdate](/reference/system/xgamesave/functions/xgamesavesubmitupdate) の呼び出しの後に `XGameSaveUpdateHandle` を削除します。
* タイトルが中断または終了したときに `XGameSaveContainerHandle` を削除します。
* タイトルが中断または終了したときに `XGameSaveProviderHandle` を削除します。

### Game Saves の確認

Game Saves がクラウドにアップロードされていることを確認するには、タイトルがそのタイトルへのロックの解放プロセスを開始し、その後データのアップロードを開始する必要があります。このトラフィックは、Fiddler で [Game Saves ネットワーク トラフィックの検査](/build/core-features/common/game-save/game-saves-tools#inspecting-game-saves-network-traffic) を行うことで確認できます。

Game Saves の同期フローの詳細については、[Game Saves の同期フローについて](/build/core-features/common/game-save/game-saves-syncing) を参照してください。

## 一般的なエラー

| エラー コード    | 名前                      | 説明                                              | トラブルシューティング                                                                                                                                                                                                                                                                                                                                                                                                        |
| ---------- | ----------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 0x80830002 | E\_GS\_NO\_ACCESS       | タイトルがコンテナー ストレージ スペースへのアクセスを持っていないため、操作が失敗しました。 | このエラーは、SCID と TitleID が正しく構成されておらず、API 呼び出しが失敗したときに発生します。ゲームの .config ファイルで正しい TitleID を確認し、ソース コードで正しい SCID を確認してください。<br /><br />コンソール システム プロンプトに表示されるエラー メッセージは、「サービス障害が発生している可能性があります。サービスの状態を確認してください。サービスに障害が発生している場合は、少し待ってからもう一度試すか、このゲームまたはアプリをオフラインで使用してください。」となります。 <br /> <br />このエラーは、適切なクロスタイトル アクセス ポリシーが提供されていない別のタイトルにアクセスしようとしたときに発生します。パートナー センターで必要なアクセス ポリシーを構成して、クロスタイトルの読み込みと保存を有効にしてください。 |
| 0x000000DF | ERROR\_FILE\_TOO\_LARGE | ファイル サイズが許容される上限を超えているため、保存できません。               | このエラーは、256 MB のタイトル クォータを超えた `XGameSaveFiles` パスにデータを書き込もうとしたときに発生します。このエラーは E\_QUOTA\_EXCEEDED と同じエラーです。<br /><br />詳細については、[ストレージ システムの上限とクォータ](/build/core-features/common/game-save/game-saves-storage-systems#limits-and-quotas) を参照してください。                                                                                                                                                                   |
| 0x80830004 | E\_GS\_USER\_CANCELED   | ユーザーがセーブ ゲームのダウンロードをキャンセルしました。                  | このエラーは、ユーザーが同期の試行をキャンセルし、プロバイダーがロックを取得しようとして失敗したときに発生します。                                                                                                                                                                                                                                                                                                                                                          |

同期の試行が拒否された場合は、ローカルにファイル パスが書き込まれるように、`XGameSaveFilesGetFolderWithUI` を再度呼び出してください。この呼び出しは `S_OK` を返します。

このエラーは、古いプロバイダーを指定して `XGameSaveFilesGetFolderWithUIResult` を呼び出した場合にも発生します。このエラーは、Gaming Runtime Services (GRTS) がタイトルの中断時や他のシステム管理イベント発生時に Game Saves プロバイダーを初期化解除したときにも発生します。タイトルが再開したら、`XGameSaveFilesGetFolderWithUiAsync` を呼び出してプロバイダーを再初期化し、保存されたデータが最新であることを確認してください。この呼び出しを行わずにタイトルが再開すると、プロバイダーは初期化されていない状態のままになります。Game Saves の操作は失敗します。| | 0x8007000E | E\_OUTOFMEMORY | 要求を処理するためのメモリが残っていません。  | このエラーは通常、いくつかの理由で発生します。PIX を使用してメモリの割り当てをキャプチャし、メモリ リークを確認できます。  <br />  <br />次の点に注意してください:<br />  <br />1. ハンドルは参照カウントで管理されます。ハンドルのリークを確認します。更新の成功や失敗にかかわらず、更新されたハンドルを閉じてください。大量の保留中の更新がある状態を避けてください。<br />  <br />2. 回避策として、`XMemTransferMemory` を使用してシステム パーティションに一部のメモリを転送します。<br />  <br />3. メモリの深刻な断片化。 | | 0x80070057 | E\_INVALIDARG | 無効な引数が指定されました。パラメーターが正しくありません。 | このエラーは、PC で `XGameSaveFilesGetFolderWithUI` に使用される SCID が有効な GUID でない場合に発生することがあります。 | | ---        | ---  | `XGameSaveFilesGetFolderWithUI` が無期限にハングまたは断続的に失敗する。 | 実行中のマシンで開いている GameSave システム ダイアログがないことを確認し、そのユーザーの他のコンソールでダイアログが表示されていないことも確認してください。サインインまたは同期のために開いているダイアログは、無視されると未定義の動作を引き起こす可能性があります。 | 0x80830006 | E\_QUOTA\_EXCEEDED | ゲームが、そのゲームのユーザーごとのクォータを超えました。既定では、このクォータは 256 MB です。 | Game Saves のデータ管理には次のベスト プラクティスを使用してください。 <br />  <br />1. 依存関係のあるデータをコンテナー間で保存しないでください。<br />  <br />2. パフォーマンスを向上させるためにコンテナー内の BLOB を少なくしてください。 <br /><br />詳細については、[ストレージ システムの上限とクォータ](/build/core-features/common/game-save/game-saves-storage-systems#limits-and-quotas) を参照してください。 | | 0x80830005 | E\_GS\_UPDATE\_TOO\_BIG  | セーブ更新のサイズが大きすぎます。 | 更新コンテキスト内の BLOB の総数に関係なく、`XGameSave` 更新の合計サイズは GS\_MAX\_BLOB\_SIZE (16 MB) より小さい必要があります。 | | 0x8924010c | E\_GAMERUNTIME\_INVALID\_HANDLE  | このハンドルの値は無効です。  | このエラーは、前のユーザーの閉じられていないハンドルを再利用しようとしたときに発生します。使用されなくなったハンドルは閉じてください。 | | 0x80830001 | E\_GS\_INVALID\_CONTAINER\_NAME | コンテナーの名前が無効です。 | パス部分 (最終スラッシュを含むまで) に有効な文字には、大文字 (A-Z)、小文字 (a-z)、数字 (0-9)、アンダースコア (\_)、およびスラッシュ (/) が含まれます。パス部分は空でも構いません。<br /> <br />ファイル名部分 (最終スラッシュ以降のすべて) に有効な文字には、大文字 (A-Z)、小文字 (a-z)、数字 (0-9)、アンダースコア (\_)、ピリオド (.)、およびハイフン (-) が含まれます。ファイル名は空、ピリオドで終わる、または連続する 2 つのピリオドを含むことはできません。  | | 0x80830003 | E\_GS\_OUT\_OF\_LOCAL\_STORAGE  | デバイスにゲームを保存するのに十分なストレージ容量がありません。  | ユーザーはデバイス上の Game Save ストレージ容量を確保する必要があります。このエラーは、ユーザーごとのクォータを超えていない場合でも発生することがあります。 <br /><br />詳細については、[デバイスを介した Game Saves の管理](/build/core-features/common/game-save/game-saves-walkthroughs-and-samples#managing-game-saves-through-the-device) を参照してください。  | | 0x80830007 | E\_GS\_PROVIDED\_BUFFER\_TOO\_SMALL  | API に提供されたバッファーが小さすぎます。  | このエラーは、呼び出し元が Game Save API に、読み取られる BLOB データのサイズよりも小さいバッファーを渡した場合に発生します。`Async` 呼び出しを使用している場合は、正しいバッファー サイズが使用されるように [XAsyncGetResultSize](/reference/system/xasync/functions/xasyncgetresultsize) を呼び出してください。  | | 0x80830008 | E\_GS\_BLOB\_NOT\_FOUND | 指定された BLOB が見つかりません。  | BLOB が存在することを確認するには、`xbstorage` または `gamesaveutil` ツールを使用して BLOB をダウンロードしてください。未定義の動作を防ぐため、この手順はタイトルがロックを解放した後 (終了または中断時) に実行してください。<br /><br />詳細については、[Game Saves のツール](/build/core-features/common/game-save/game-saves-tools) を参照してください。  | | 0x80830009 | E\_GS\_NO\_SERVICE\_CONFIGURATION  | タイトルが Connected Storage 用に正しく構成されていません。   | このエラーは、SCID が正しくないか、タイトルがパートナー センターで正しく構成されていない場合に発生します。<br /><br />詳細については、[パートナー センターの構成](/build/core-features/common/game-save/game-saves-walkthroughs-and-samples#partner-center-configurations) を参照してください。  | | 0x8083000A | E\_GS\_CONTAINER\_NOT\_IN\_SYNC  | コンテナーがまだ同期されていません。   | 更新を送信する前に、XGameSave コンテナーが同期されていることを確認してください。  | | 0x8083000B | E\_GS\_CONTAINER\_SYNC\_FAILED  | コンテナーの同期に失敗しました。 | クラウドからデータを同期する際にインターネット接続が安定していることを確認してください。  | | 0x8083000C | E\_GS\_USER\_NOT\_REGISTERED\_IN\_SERVICE | ユーザーの MSA がまだ XBOX services アカウントになっていないことを示します。      | 使用しているユーザーがパートナー センターに正しく登録されていることを確認してください。   | | 0x8083000D | E\_GS\_HANDLE\_EXPIRED  | 関数で使用されたハンドルの有効期限が切れており、再取得する必要があります。  | `XGameSaveUpdateHandle` は、送信後またはタイトルが中断された後は再利用できません。 | | 0x8083000E | E\_GS\_ASYNC\_FUNCTION\_REQUIRED  | 関数がタイム センシティブ スレッドで呼び出されており、デッドロックのリスクがあります。  | 代わりに非同期の実装を使用してください。  | | 0x8083000F | E\_GS\_PROVIDER\_MISMATCH | ゲームが `XGameSave` と `XGameSaveFiles` の呼び出しを混在させていますが、これはサポートされていません。   | 1 つのタイトル内では一度に 1 種類の Game Saves API のみを初期化できます。また、タイトルには 1 つの Game Saves API を使用してください。複数のタイトルで作業する場合には、異なる API 間の相互運用のためのメソッドがあります。<br /><br />詳細については、[XGameSave と XGamesaveFiles の相互運用](/build/core-features/common/game-save/game-saves-walkthroughs-and-samples#interop-between-xgamesave-and-xgamesavefiles) を参照してください。  | | 0x80831001 | E\_GS\_TERMINATEDTITLE\_STALE\_DATA<br />または<br />`TerminateApplicationAfterSuspend`| この情報はユーザー向け API を通じては公開されません。この動作は想定されています。プロセス ライフタイム管理 (PLM) は、古いデータを検出し、デバイスがインターネットに再接続したときにタイトルを停止します。中断イベントの後、アプリケーションは閉じられます。 | このデバッグ出力はバグではありません。ゲームが初期化時に Game Saves のロックを取得できないために終了された場合 (たとえば、オフライン プレイ中や競合ダイアログの選択時など)、OS は次回起動時のクリーンな状態を確保するために中断時にゲームを終了させます。  |

### Win32 NTSTATUS コード

`XGameSaveFiles` では、次のステータス コードが表示されることがあります。

| 値          | 名前                              | `XGameSaveFiles` の説明                                   |
| ---------- | ------------------------------- | ------------------------------------------------------ |
| 0xC0000106 | STATUS\_NAME\_TOO\_LONG         | ディレクトリ名が長すぎます。                                         |
| 0xC0000033 | STATUS\_OBJECT\_NAME\_INVALID   | ディレクトリ名にクラウド サービスで無効な文字が含まれています。                       |
| 0xC0000106 | STATUS\_NAME\_TOO\_LONG         | ファイル名 (フォルダー パスを含む) が長すぎます。                            |
| 0xC0000904 | STATUS\_FILE\_TOO\_LARGE        | ファイル サイズが 64 MB を超えたか、ゲームがゲーム セーブのユーザーごとの最大クォータを超えました。 |
| 0xC000009A | STATUS\_INSUFFICIENT\_RESOURCES | ゲームがデバイス上の割り当てられたストレージ容量を超えました。                        |

## リファレンス API ドキュメント

* [XGameSave (API 目次)](/reference/system/xgamesave/xgamesave_members)
  * 関数
    * [XGameSaveSubmitUpdate](/reference/system/xgamesave/functions/xgamesavesubmitupdate)
* [XGameSaveFiles (API 目次)](/reference/system/xgamesavefiles/xgamesavefiles_members)
  * 関数
    * [XGameSaveFilesGetFolderWithUiAsync](/reference/system/xgamesavefiles/functions/xgamesavefilesgetfolderwithuiasync)
* [xasync (API 目次)](/reference/system/xasync/xasync_members)
  * 関数
    * [XAsyncGetResultSize](/reference/system/xasync/functions/xasyncgetresultsize)

## 関連項目

[Game Saves 目次](/build/core-features/common/game-save/game-saves-toc)


## Related topics

- [Game Saves の概要](/ja-jp/build/core-features/common/game-save/game-saves-overview.md)
- [Game Save](/ja-jp/build/core-features/common/game-save/index.md)
- [Game Saves (目次)](/ja-jp/build/core-features/common/game-save/game-saves-toc.md)
- [Visual Studio を使用した XBOX プロジェクトのデバッグ](/ja-jp/tools/tools-console/visualstudio/debugging-with-visualstudio.md)
- [カスタム HTTP スタックのデバッグ](/ja-jp/build/console-features/networking/web-requests/debugging-custom-http-stacks.md)
