> ## 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.

# XGameSaveInitializeProvider

> XGameSaveInitializeProvider

# XGameSaveInitializeProvider

XGameSave プロバイダー ハンドルを提供し、初期化します。

## Syntax

```cpp theme={null}
HRESULT XGameSaveInitializeProvider(  
         XUserHandle requestingUser,  
         const char* configurationId,  
         bool syncOnDemand,  
         XGameSaveProviderHandle* provider  
)  
```

### Parameters

*requestingUser*   \_In\_\
型: XUserHandle

XBOX Live ユーザーのハンドル。

*configurationId*   \_In\_z\_\
型: char\*

サービス構成 ID (SCID)。

*syncOnDemand*   \_In\_\
型: bool

true の場合、syncOnDemand は必要な場合にのみサービスからデータをダウンロードします。デバイスがオフラインの場合は機能しません。
true に設定すると、同期進行状況の UI が表示される場合があります。

*provider*   \_Outptr\_result\_nullonfailure\_\
型: XGameSaveProviderHandle\*

作成する XGameSave プロバイダーへのハンドル。

### Return value

型: HRESULT

関数の結果。

#### Common errors

* E\_GS\_USER\_CANCELED
* E\_GS\_USER\_NOT\_REGISTERED\_IN\_SERVICE
* E\_GS\_NO\_ACCESS
* E\_GS\_NO\_SERVICE\_CONFIGURATION

最も一般的に返されるエラーは、E\_OUTOFMEMORY、E\_INVALIDARG です。

## Remarks

<Note>この関数は、時間依存スレッドから呼び出しても安全ではありません。詳細については、[Time-sensitive threads](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads) を参照してください。</Note>

この関数は、他の XGameSave API を使用する前に正常に呼び出す必要があります。この関数は、プレイヤーのゲーム セーブを同期する際にブロックされ、ユーザーに UI が表示される可能性があるため、ゲームの UI スレッドで呼び出すべきではありません。UI スレッドからこの関数を初期化する必要がある場合は、[XGameSaveInitializeProviderAsync](/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync) の呼び出しを検討してください。

<Note>XGameSave API を動作させるには、タイトルのタイトル ID とサービス構成 ID (SCID) が</Note>
適切に構成されている必要があります。これらの必要な ID の詳細については、[Setting Up Sandboxes for XBOX Live Development](/services/xbox-services/fundamentals/sandboxes/live-setting-up-sandboxes) を参照してください。ゲームは Partner Center で XBOX Live に対して有効化されている必要があります。

SCID とタイトル ID が適切に構成されていない場合、XSaveGame API の呼び出しは次のエラー コードで失敗します。

E\_GS\_NO\_ACCESS - 0x80830002 - タイトルがコンテナー ストレージ領域にアクセスできないため、操作は失敗しました。

この API が *syncOnDemand* を true に設定して呼び出されると、呼び出し元の観点では同じように動作しますが、残りの API での動作にいくつかの違いが生じます。*SyncOnDemand* **XGameSaveProvider** は、必要な場合にのみサービスからデータをダウンロードしますが、この場合、コンテナー操作が遅延する可能性があり、この遅延によって同期進行状況の UX がユーザーに表示されることがあるという欠点もあります。次のいずれかのメソッドを使用すると強制的に同期を発生させることができます。

* [XGameSaveCreateUpdate](/reference/system/xgamesave/functions/xgamesavecreateupdate)
* [XGameSaveEnumeratorBlobInfo](/reference/system/xgamesave/functions/xgamesaveenumerateblobinfo)
* [XGameSaveEnumerateBlobInfoByName](/reference/system/xgamesave/functions/xgamesaveenumerateblobinfobyname)
* [XGameSaveEnumerateContainerInfo](/reference/system/xgamesave/functions/xgamesaveenumeratecontainerinfo)
* [XGameSaveEnumerateContainerInfoByName](/reference/system/xgamesave/functions/xgamesaveenumeratecontainerinfobyname)

もう 1 つの欠点は、デバイスがオフラインまたは接続に問題がある場合、コンテナーへのアクセスが不可能であることです。この関数には、[XGameSaveInitializeProviderAsync](/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync) と呼ばれる非同期バージョンがあります。

```cpp theme={null}
// SYNC Init - should not be called on time sensitive thread 
//             as this will block until the operation is complete 
void Sample::_InitializeSync() 
{ 
    HRESULT hr; 
    XGameSaveProviderHandle provider = nullptr; 
    hr = XGameSaveInitializeProvider(this->_xalUser, "SERVICE_CONFIG_ID-DEADBEEF0123", false, &provider); 
    if (SUCCEEDED(hr)) 
    { 
        this->_provider = provider; 
    } 
    else 
    { 
        _HandleInitializeErrors(this->_xalUser, hr); 
    } 
} 
 
// handle initialization errors  
void Sample::_HandleInitializeErrors(XUserHandle userContext, HRESULT hr) 
{ 
    switch (hr) 
    { 
    case E_GS_USER_CANCELED: 
        printf("User %p canceled initialization hr=0x%08x\n", userContext, hr); 
        break; 
    case E_GS_USER_NOT_REGISTERED_IN_SERVICE: 
        printf("User %p has no service registration\n", userContext); 
        break; 
    /* NOTE These should only be seen if there is a configuration issue */ 
    case E_GS_NO_ACCESS: 
    case E_GS_NO_SERVICE_CONFIGURATION: 
        printf("Problems with Service Configuration registration\n"); 
        break; 
    case S_OK: 
        break; 
    default: 
        printf("Unknown initialization error for User %p hr=0x%08X\n", userContext, hr); 
    } 
} 
```

ゲームは、XGameSaveFiles の使用と XGameSave の使用を混在させることはできません。ゲームは、どちらのクラウド セーブ システムを使用するかを選択する必要があります。ゲームが XGameSaveFiles を使用していて、後で XGameSaveInitializeProvider を呼び出すと、E\_GS\_PROVIDER\_MISMATCH でエラーになります。同様に、ゲームが XGameSave を使用していて、後で XGameSaveFilesGetFolderWithUiAsync を呼び出す場合も、E\_GS\_PROVIDER\_MISMATCH でエラーになります。

## Requirements

**ヘッダー:** XGameSave.h

**ライブラリ:** xgameruntime.lib

**サポートされているプラットフォーム:** Windows、XBOX One ファミリー本体および XBOX Series 本体

## Conceptual documentation

* [Game Saves tools](/build/core-features/common/game-save/game-saves-tools)
* [Time-sensitive threads](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## See also

[XGameSave](/reference/system/xgamesave/xgamesave_members)\
[XGameSaveInitializeProviderAsync](/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync)\
[Debugging Game Saves](/build/core-features/common/game-save/game-saves-debugging)


## Related topics

- [XGameSaveInitializeProviderAsync](/ja-jp/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync.md)
- [XGameSaveCloseProvider](/ja-jp/reference/system/xgamesave/functions/xgamesavecloseprovider.md)
- [Game Saves ツール](/ja-jp/build/core-features/common/game-save/game-saves-tools.md)
- [XGameSave API の概要](/ja-jp/build/core-features/common/game-save/xgamesave.md)
- [Game Saves のチュートリアルとサンプル](/ja-jp/build/core-features/common/game-save/game-saves-walkthroughs-and-samples.md)
