XGameSaveGetContainerInfo

Retrieves info for the containers in an XGameSaveProvider.

Syntax

HRESULT XGameSaveGetContainerInfo(  
         XGameSaveProviderHandle provider,  
         const char* containerName,  
         void* context,  
         XGameSaveContainerInfoCallback* callback  
)  

Parameters

provider   _In_
Type: XGameSaveProviderHandle

An XGameSaveProvider handle with the desired container.

containerName   _In_z_
Type: char*

Name of container to retrieve info about, will return only one result if found. If more than one container is desired use XGameSaveEnumerateContainerInfo or XGameSaveEnumerateContainerInfoByName.

context   _In_opt_
Type: void*

Pointer to the calling object for context.

callback   _In_
Type: XGameSaveContainerInfoCallback*

Callback function to determine the results of and collect data from the XGameSaveContainerInfo call.

Return value

Type: HRESULT

Function result

Common errors

  • E_GS_INVALID_CONTAINER_NAME
  • E_GS_USER_CANCELED
  • E_GS_CONTAINER_NOT_IN_SYNC
  • E_GS_CONTAINER_SYNC_FAILED
  • E_GS_HANDLE_EXPIRED

Remarks

Note

This function isn't safe to call on a time-sensitive thread. For more information, see Time-sensitive threads.

A container is a collection of metadata and a reference point for the set of blobs within it. If the container name is known ahead of time it is possible to use this API to return the information for just that container. This is useful for bringing back specific information about a player instead of calling for all of it each time you need information. You can find the make up of an XGameSaveContainer in the XGameSaveContainerInfo struct.

void Sample::_GetContainerInfo(const char* name) 
{ 
    XGameSaveContainerInfoCallback* callback = [](_In_ const XGameSaveContainerInfo* info, _In_ void* ctx) -> bool 
    { 
        auto self = reinterpret_cast<Sample*>(ctx); 
        self->_UpdateContainerList(info); 
        return true; 
    }; 
  
    HRESULT hr = XGameSaveGetContainerInfo(_provider, name, this, callback); 
    if (FAILED(hr)) 
    { 
        _HandleContainerErrors(name, hr); 
    } 
} 
 
void Sample::_UpdateContainerList(const XGameSaveContainerInfo* container) 
{ 
    //update UX 
    printf("%s - %s: %I64dbytes %d blobs\n", container->name, container->displayName, container->totalSize, container->blobCount); 
    if (strcmp(container->name, "AutoSave") == 0) 
    { 
        _ReadContainerBlobsAsync(container); 
    } 
} 
 
void Sample::_HandleContainerErrors(const char* name, HRESULT hr) 
{ 
    switch (hr) 
    { 
    case E_GS_INVALID_CONTAINER_NAME: 
        printf("\'%s\' name is invalid for a container", name); 
        break; 
    case E_GS_USER_CANCELED: 
        printf("Container %s failed to sync user canceled hr=0x%08x\n", name, hr); 
        break; 
    case E_GS_CONTAINER_NOT_IN_SYNC: 
    case E_GS_CONTAINER_SYNC_FAILED: 
        printf("Container %s failed to sync hr=0x%08x\n", name, hr); 
        break; 
    case E_GS_HANDLE_EXPIRED: 
        printf("Container %s failed, re-initialize provider", name); 
        break; 
    case S_OK: 
        break; 
    default: 
        printf("Unknown Container error %s hr=0x%08X\n", name, hr); 
    } 
}

Requirements

Header: XGameSave.h

Library: xgameruntime.lib

Supported platforms: Windows, Xbox One family consoles and Xbox Series consoles

See also

XGameSave
XGameSaveCreateContainer
XGameSaveContainerInfo
Game save errors