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

Si la valeur est true, syncOnDemand télécharge des données du service uniquement si nécessaire. Ne fonctionne pas si l'appareil est hors ligne.
La valeur true peut entraîner l'affichage d'une interface utilisateur 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 retournées sont E\_OUTOFMEMORY, E\_INVALIDARG,

## Remarques

<Note>Cette fonction ne peut pas être appelée sans danger sur un thread sensible au temps. Pour plus d'informations, consultez [Threads sensibles au temps](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 d'utiliser les autres API XGameSave. Cette fonction ne doit pas
être appelée sur le thread d'interface utilisateur du jeu, car elle peut bloquer et potentiellement afficher une interface utilisateur pendant qu'elle synchronise
les sauvegardes de jeu du joueur. Si vous devez l'initialiser à partir du thread d'interface utilisateur, envisagez d'appeler
[XGameSaveInitializeProviderAsync](/fr-CA/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync).

<Note>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 fonctionner. Pour plus d'informations sur ces ID requis, consultez [Configuration des bacs à sable pour le développement XBOX
Live](/fr-CA/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 à 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* télécharge des données du
service uniquement si nécessaire, mais cela comporte aussi l'inconvénient que toute opération sur un conteneur peut alors être retardée,
et ce délai peut entraîner l'affichage d'une interface utilisateur de progression de la synchronisation. L'utilisation de l'une des méthodes suivantes peut
forcer une synchronisation :

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

Un autre inconvénient est que, si l'appareil est hors ligne ou a des problèmes de connectivité, l'accès au conteneur est
impossible. Il existe une version asynchrone de cette fonction appelée
[XGameSaveInitializeProviderAsync](/fr-CA/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 infonuagique
qu'ils veulent utiliser. Si le jeu utilise XGameSaveFiles et appelle ensuite XGameSaveInitializeProvider, une erreur
E\_GS\_PROVIDER\_MISMATCH se produit. De même, si le jeu utilisait XGameSave et appelle ensuite XGameSaveFilesGetFolderWithUiAsync,
une erreur E\_GS\_PROVIDER\_MISMATCH se produit également.

## 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 des sauvegardes de jeu](/fr-CA/build/core-features/common/game-save/game-saves-tools)
* [Threads sensibles au temps](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## Voir aussi

[XGameSave](/fr-CA/reference/system/xgamesave/xgamesave_members)\
[XGameSaveInitializeProviderAsync](/fr-CA/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync)\
[Débogage des sauvegardes de jeu](/fr-CA/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)
