Scénarios d’erreur courants de Game Saves
Identificateur de configuration de service mal configuré
Si l’erreur 0x80830002 (E_GS_NO_ACCESS) se produit lorsque vous appelez XGameSaveFilesGetFolderWithUiAsync, l’identificateur de configuration de service (SCID) dans votre code source est probablement incorrect. Assurez-vous que le SCID correspond à celui qui apparaît dans Microsoft Partner Center. Le message d’erreur système suivant peut s’afficher.
Conséquences de la liaison de jeux
Si votre titre utilise la liaison de jeux et ajoute plus tard une version PC du Microsoft Game Development Kit (GDK), il doit utiliser l’AppID du compte Microsoft (MSA) (MSAppID) du produit principal. L’utilisation du MSAAppID du produit secondaire provoque des erreurs 0x80830002.Paramètres de Partner Center mal configurés
Des paramètres de Partner Center mal configurés peuvent être une cause courante d’erreurs de Game Saves. Pour que les Game Saves des utilisateurs se synchronisent vers et depuis le nuage, sélectionnez l’option Connected Storage dans Partner Center, sous Gameplay settings > Title Storage. L’image suivante illustre la configuration de Connected Storage dans Partner Center requise pour que les Game Saves puissent se synchroniser correctement vers et depuis le nuage.
Nettoyage des handles
La synchronisation des Game Saves vers et depuis le nuage est gérée à l’aide de plusieurs handles. Si la durée de vie de ces handles n’est pas gérée correctement, un comportement indéfini peut survenir lors de la synchronisation vers et depuis le nuage.XGameSaveFiles :
- Appelez XGameSaveFilesGetFolderWithUiAsync au lancement du titre et lors de sa reprise. Cet appel crée implicitement un handle de fournisseur Game Saves. Le système d’exploitation le supprime lorsque le titre est suspendu ou se termine.
XGameSave :
- Supprimez
XGameSaveUpdateHandleaprès un appel à XGameSaveSubmitUpdate, que la mise à jour ait réussi ou échoué. - Supprimez
XGameSaveContainerHandlelorsque le titre est suspendu ou se termine. - Supprimez
XGameSaveProviderHandlelorsque le titre est suspendu ou se termine.
Confirmation des Game Saves
Pour confirmer que vos Game Saves sont téléversées dans le nuage, le titre doit commencer le processus de libération du verrou du titre, puis commencer à téléverser les données. Vous pouvez voir ce trafic avec Fiddler en inspectant le trafic réseau de Game Saves. Pour plus d’informations sur le flux de synchronisation de Game Saves, consultez Comprendre le flux de synchronisation de Game Saves.Erreurs courantes
Si la tentative de synchronisation est refusée, appelez de nouveau
XGameSaveFilesGetFolderWithUI afin que le chemin de fichier soit écrit localement. Cet appel retourne S_OK.
Cette erreur se produit également lors de l’appel de XGameSaveFilesGetFolderWithUIResult avec un fournisseur périmé. Cette erreur se produit aussi lorsque les Gaming Runtime Services (GRTS) désinitialisent un fournisseur Game Saves lorsqu’ils suspendent un titre ou lorsque d’autres événements gérés par le système se produisent. Lorsque le titre reprend, appelez XGameSaveFilesGetFolderWithUiAsync pour réinitialiser le fournisseur et vous assurer que les données sauvegardées sont à jour. Si le titre reprend sans effectuer cet appel, le fournisseur reste non initialisé. Les opérations de Game Saves échouent.| | 0x8007000E | E_OUTOFMEMORY | Il ne reste plus de mémoire pour traiter votre demande. | Cette erreur survient habituellement pour plusieurs raisons. Vous pouvez capturer les allocations de mémoire avec PIX et rechercher les fuites de mémoire. Tenez compte de ce qui suit :
1. Les handles font l’objet d’un comptage de références. Recherchez les fuites de handles. Fermez les handles de mise à jour après une mise à jour réussie ou non. Évitez d’avoir de grandes quantités de mises à jour en attente.
2. Utilisez
XMemTransferMemory comme solution de contournement pour transférer de la mémoire vers la partition système.3. Fragmentation importante de la mémoire. | | 0x80070057 | E_INVALIDARG | Un argument non valide a été fourni. Le paramètre est incorrect. | Cette erreur peut se produire si le SCID utilisé dans
XGameSaveFilesGetFolderWithUI sur PC n’est pas un GUID valide. | | --- | --- | XGameSaveFilesGetFolderWithUI se bloque indéfiniment ou échoue de façon sporadique. | Assurez-vous qu’aucune boîte de dialogue système GameSave n’est ouverte sur la machine sur laquelle vous exécutez le titre et qu’aucune boîte de dialogue ne s’affiche sur d’autres consoles pour l’utilisateur. Une boîte de dialogue de connexion ou de synchronisation ouverte peut entraîner un comportement indéfini si elle est ignorée. | 0x80830006 | E_QUOTA_EXCEEDED | Le jeu a dépassé le quota par utilisateur pour le jeu. Par défaut, ce quota est de 256 Mo. | Appliquez les pratiques exemplaires suivantes pour la gestion des données de Game Saves. 1. Ne stockez pas de données dépendantes dans plusieurs conteneurs.
2. Utilisez moins de blobs dans le conteneur pour améliorer les performances.
Pour plus d’informations, consultez Limites et quotas des systèmes de stockage | | 0x80830005 | E_GS_UPDATE_TOO_BIG | La taille de la mise à jour de la sauvegarde est trop grande. | La taille totale d’une mise à jour
XGameSave doit être inférieure à GS_MAX_BLOB_SIZE (16 Mo), quel que soit le nombre total de blobs dans le contexte de mise à jour. | | 0x8924010c | E_GAMERUNTIME_INVALID_HANDLE | Cette valeur de handle n’est plus valide. | Cette erreur se produit lors d’une tentative de réutilisation de handles non fermés provenant d’un utilisateur précédent. Fermez les handles qui ne sont plus utilisés. | | 0x80830001 | E_GS_INVALID_CONTAINER_NAME | Le nom du conteneur n’est pas valide. | Les caractères valides pour la partie chemin (jusqu’à la dernière barre oblique incluse) comprennent les lettres majuscules (A-Z), les lettres minuscules (a-z), les chiffres (0-9), les traits de soulignement (_) et les barres obliques (/). La partie chemin peut être vide.Les caractères valides pour la partie nom de fichier (tout ce qui suit la dernière barre oblique) comprennent les lettres majuscules (A-Z), les lettres minuscules (a-z), les chiffres (0-9), les traits de soulignement (_), les points (.) et les traits d’union (-). Le nom de fichier ne peut pas être vide, se terminer par un point ni contenir deux points consécutifs. | | 0x80830003 | E_GS_OUT_OF_LOCAL_STORAGE | L’appareil n’a pas suffisamment de capacité de stockage pour sauvegarder le jeu. | Les utilisateurs doivent libérer de l’espace de stockage pour les Game Saves sur l’appareil. Cette erreur peut se produire même si le quota par utilisateur n’est pas dépassé.
Pour plus d’informations, consultez Gestion des Game Saves au moyen de l’appareil. | | 0x80830007 | E_GS_PROVIDED_BUFFER_TOO_SMALL | La mémoire tampon fournie à l’API était trop petite. | Cette erreur se produit si l’appelant transmet aux API Game Save une mémoire tampon plus petite que la taille des données de blob lues. Appelez XAsyncGetResultSize si vous utilisez des appels
Async afin de vous assurer que la bonne taille de mémoire tampon est utilisée. | | 0x80830008 | E_GS_BLOB_NOT_FOUND | Le blob spécifié est introuvable. | Pour confirmer qu’un blob existe, utilisez les outils xbstorage ou gamesaveutil pour télécharger le blob. Effectuez cette étape après que le titre a libéré le verrou (lorsqu’il se termine ou est suspendu) afin d’éviter un comportement indéfini.Pour plus d’informations, consultez Outils de Game Saves. | | 0x80830009 | E_GS_NO_SERVICE_CONFIGURATION | Le titre n’est pas correctement configuré pour le stockage connecté. | Cette erreur se produit lorsque le SCID est incorrect ou lorsque le titre n’est pas correctement configuré dans Partner Center.
Pour plus d’informations, consultez Configurations de Partner Center. | | 0x8083000A | E_GS_CONTAINER_NOT_IN_SYNC | Le conteneur n’est pas encore synchronisé. | Assurez-vous que le conteneur XGameSave est synchronisé avant de lui soumettre des mises à jour. | | 0x8083000B | E_GS_CONTAINER_SYNC_FAILED | La synchronisation du conteneur a échoué. | Vérifiez que la connexion Internet est stable lors de la synchronisation des données depuis le nuage. | | 0x8083000C | E_GS_USER_NOT_REGISTERED_IN_SERVICE | Indique que le MSA de l’utilisateur n’est pas encore un compte XBOX services. | Vérifiez que l’utilisateur que vous utilisez est correctement inscrit dans Partner Center. | | 0x8083000D | E_GS_HANDLE_EXPIRED | Le handle utilisé par la fonction a expiré et doit être obtenu de nouveau. |
XGameSaveUpdateHandle ne peut pas être réutilisé après une soumission ou lorsque le titre est suspendu | | 0x8083000E | E_GS_ASYNC_FUNCTION_REQUIRED | La fonction est appelée sur un thread sensible au temps, ce qui risque de provoquer des interblocages. | Utilisez plutôt l’implémentation asynchrone. | | 0x8083000F | E_GS_PROVIDER_MISMATCH | Le jeu mélange des appels XGameSave et XGameSaveFiles, ce qui n’est pas pris en charge. | Un seul type d’API Game Saves peut être initialisé à la fois dans un titre. De plus, utilisez une seule API Game Saves par titre. Si vous travaillez avec plusieurs titres, il existe des méthodes d’interopérabilité entre les différentes API. Pour plus d’informations, consultez Interopérabilité entre XGameSave et XGamesaveFiles | | 0x80831001 | E_GS_TERMINATEDTITLE_STALE_DATA
ou
TerminateApplicationAfterSuspend| Cette information n’est pas exposée par les API destinées aux utilisateurs. Ce comportement est attendu. La gestion de la durée de vie des processus (PLM) arrête le titre lorsqu’elle détecte des données périmées et que l’appareil se reconnecte à Internet. Après un événement de suspension, l’application se ferme. | Cette sortie de débogage n’est pas un bogue. Lorsque le jeu est terminé parce qu’il n’a pas obtenu le verrou de Game Saves à l’initialisation (par exemple, pendant le jeu hors ligne ou lors d’un choix dans la boîte de dialogue de conflit), le système d’exploitation termine le jeu lors de la suspension afin de garantir un état propre au prochain lancement. |
Codes NTSTATUS Win32
AvecXGameSaveFiles, les codes d’état suivants peuvent apparaître.
Documentation de référence des API
- XGameSave (contenu de l’API)
- Fonctions
- XGameSaveFiles (contenu de l’API)
- Fonctions
- xasync (contenu de l’API)
- Fonctions
