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

Fournit et initialise un handle de fournisseur XGameSave.

## Syntaxe

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

### Paramètres

*requestingUser*   \_In\_\
Type : XUserHandle

Handle vers un utilisateur XBOX Live.

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

ID de configuration de service (SCID).

*syncOnDemand*   \_In\_\
Type : bool

Lorsque la valeur est true, syncOnDemand ne télécharge les données depuis le service que si nécessaire. Ne fonctionne pas si l'appareil est hors connexion.
La valeur true peut entraîner l'affichage d'une interface de progression de la synchronisation.

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

Handle vers le fournisseur XGameSave à créer.

### Valeur de retour

Type : HRESULT

Résultat de la fonction.

#### Erreurs courantes

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

Les erreurs les plus fréquemment renvoyées sont E\_OUTOFMEMORY, E\_INVALIDARG,

## Remarques

<Note>Cette fonction ne peut pas être appelée sans risque sur un thread à durée critique. Pour plus d'informations, consultez [Threads à durée critique](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads).</Note>

Cette fonction doit être appelée avec succès avant toute utilisation des autres API XGameSave. Cette fonction ne doit pas
être appelée sur le thread d'interface utilisateur du jeu, car elle peut bloquer et éventuellement afficher une interface à l'utilisateur pendant la synchronisation
des sauvegardes de jeu du joueur. Si vous devez effectuer l'initialisation à partir du thread d'interface utilisateur, envisagez d'appeler
[XGameSaveInitializeProviderAsync](/fr/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync).

<Note>Pour fonctionner, l'API XGameSave exige que l'ID de titre et l'ID de configuration de service (SCID) de votre titre soient</Note>
correctement configurés. Pour plus d'informations sur ces ID requis, consultez [Configuration de sandbox pour le développement
XBOX Live](/fr/services/xbox-services/fundamentals/sandboxes/live-setting-up-sandboxes). Votre jeu doit être activé pour XBOX Live dans Partner Center.

Si vous ne configurez pas correctement votre SCID et votre ID de titre, vos appels à l'API XSaveGame échoueront avec le code d'erreur suivant :

E\_GS\_NO\_ACCESS - 0x80830002 - L'opération a échoué, car le titre n'a pas accès aux espaces de stockage des conteneurs.

Lorsque cette API est appelée avec *syncOnDemand* défini sur true, elle se comporte de la même façon du point de vue de l'appelant, mais elle entraîne
certaines différences de comportement dans le reste de l'API. Le **XGameSaveProvider** *SyncOnDemand* ne télécharge les données depuis
le service que si nécessaire, mais cela présente l'inconvénient que toute opération sur un conteneur peut alors être retardée,
et ce retard peut entraîner l'affichage d'une interface de progression de la synchronisation pour l'utilisateur. L'utilisation de l'une des méthodes suivantes peut
forcer une synchronisation :

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

Un autre inconvénient est que, si l'appareil est hors connexion ou rencontre des problèmes de connectivité, l'accès au conteneur est
impossible. Il existe une version asynchrone de cette fonction, appelée
[XGameSaveInitializeProviderAsync](/fr/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); 
    } 
} 
```

Les jeux ne peuvent pas combiner l'utilisation de XGameSaveFiles et celle de XGameSave. Les jeux doivent choisir le système de sauvegarde dans le cloud
qu'ils souhaitent utiliser. Si le jeu utilise XGameSaveFiles et appelle ensuite XGameSaveInitializeProvider, l'appel échoue
avec E\_GS\_PROVIDER\_MISMATCH. De même, si le jeu utilisait XGameSave et appelle ensuite XGameSaveFilesGetFolderWithUiAsync,
cet appel échoue également avec E\_GS\_PROVIDER\_MISMATCH.

## Configuration requise

**En-tête :** XGameSave.h

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** Windows, consoles de la famille XBOX One et consoles XBOX Series

## Documentation conceptuelle

* [Outils Game Saves](/fr/build/core-features/common/game-save/game-saves-tools)
* [Threads à durée critique](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## Voir aussi

[XGameSave](/fr/reference/system/xgamesave/xgamesave_members)\
[XGameSaveInitializeProviderAsync](/fr/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync)\
[Débogage des sauvegardes de jeu](/fr/build/core-features/common/game-save/game-saves-debugging)


## Related topics

- [XGameSaveInitializeProvider](/reference/system/xgamesave/functions/xgamesaveinitializeprovider.md)
- [XGameSaveInitializeProviderAsync](/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync.md)
