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

# XStoreQueryAddOnLicensesAsync

> XStoreQueryAddOnLicensesAsync

# XStoreQueryAddOnLicensesAsync

Énumère les licences de tous les modules complémentaires durables qui sont rattachés à une licence de jeu numérique.
Cela s'applique uniquement aux types durables sans package et ne peut être utilisé qu'avec une licence numérique, et non avec les licences sur disque.
L'exécution de cette fonction avec une licence sur disque produira des résultats vides, même s'il existe des durables individuels que l'utilisateur possède ou pour lesquels il peut obtenir une licence.
Pour les scénarios sur disque, utilisez plutôt [XStoreAcquireLicenseForDurablesAsync](/fr-CA/reference/system/xstore/functions/xstoreacquirelicensefordurablesasync).

## Syntaxe

```cpp theme={null}
HRESULT XStoreQueryAddOnLicensesAsync(  
         const XStoreContextHandle storeContextHandle,  
         XAsyncBlock* async  
)  
```

### Paramètres

*storeContextHandle*   \_In\_\
Type : XStoreContextHandle

Le handle de contexte de magasin de l'utilisateur retourné par [XStoreCreateContext](/fr-CA/reference/system/xstore/functions/xstorecreatecontext).

*async*   \_Inout\_\
Type : [XAsyncBlock\*](/fr-CA/reference/system/xasync/structs/xasyncblock)

Un [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock) qui définit le travail asynchrone en cours.
Le [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock) peut servir à interroger l'état de l'appel et à récupérer les résultats de l'appel. Pour plus d'informations, consultez [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock).

### Valeur de retour

Type : HRESULT

Code de réussite ou d'erreur HRESULT.

## Remarques

Pour récupérer la licence du module complémentaire ainsi que le résultat d'exécution de cette fonction, appelez [XStoreQueryAddonLicensesResult](/fr-CA/reference/system/xstore/functions/xstorequeryaddonlicensesresult) après avoir appelé cette fonction.
Pour récupérer le nombre de licences obtenues par cette fonction, appelez [XStoreQueryAddonLicensesResultCount](/fr-CA/reference/system/xstore/functions/xstorequeryaddonlicensesresultcount) après avoir appelé cette fonction.
La fonction de nombre de résultats est importante, car elle vous permet de déterminer la taille appropriée du tableau à passer à la fonction de résultat.

L'extrait de code suivant montre un exemple de récupération des licences de modules complémentaires durables (sans package) que l'utilisateur possède ou pour lesquels il peut obtenir une licence :

```cpp theme={null}
void CALLBACK QueryAddOnLicensesCallback(XAsyncBlock* asyncBlock)
{
    uint32_t count;
    HRESULT hr = XStoreQueryAddOnLicensesResultCount(
        asyncBlock,
        &count);

    if (FAILED(hr))
    {
        printf("Failed retrieve the add-on license count: 0x%x\r\n", hr);
        return;
    }

    printf("Number of add-on licenses: %d", count);

    XStoreAddonLicense* addOnLicenses = new XStoreAddonLicense[count];
    hr = XStoreQueryAddOnLicensesResult(asyncBlock, count, &addOnLicenses);

    if (FAILED(hr))
    {
        printf("Failed retrieve the add-on licenses: 0x%x\r\n", hr);
        delete[] addOnLicenses;
        return;
    }

    for (uint32_t index = 0; index < count; index++)
    {
        printf("expirationDate : %d\r\n", addOnLicenses[index].expirationDate);
        printf("inAppOfferToken: %s\r\n", addOnLicenses[index].inAppOfferToken);
        printf("isActive       : %s\r\n", addOnLicenses[index].isActive ? "true" : "false");
        printf("skuStoreId     : %s\r\n", addOnLicenses[index].skuStoreId);
    }

    delete[] addOnLicenses;
}

void QueryAddOnLicenses(XStoreContextHandle storeContextHandle, XTaskQueueHandle taskQueueHandle)
{
    auto asyncBlock = std::make_unique<XAsyncBlock>();
    ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
    asyncBlock->queue = taskQueueHandle;
    asyncBlock->callback = QueryAddOnLicensesCallback;

    HRESULT hr = XStoreQueryAddOnLicensesAsync(
        storeContextHandle,
        asyncBlock.get());

    if (FAILED(hr))
    {
        printf("Failed to get add-on licenses: 0x%x\r\n", hr);
        return;
    }
}


```

## Configuration requise

**En-tête :** XStore.h (inclus dans XGameRuntime.h)

**Bibliothèque :** xgameruntime.lib

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

## Documentation conceptuelle

* [Opérations de base du magasin](/fr-CA/publishing/xstore-commerce/xstore-basic-operations)
* [Activation des tests de licences](/fr-CA/publishing/xstore-commerce/xstore-licensing-setup)

## Voir aussi

[XStore](/fr-CA/reference/system/xstore/xstore_members)\
[XStoreQueryAddonLicensesResult](/fr-CA/reference/system/xstore/functions/xstorequeryaddonlicensesresult)\
[XStoreQueryAddonLicensesResultCount](/fr-CA/reference/system/xstore/functions/xstorequeryaddonlicensesresultcount)


## Related topics

- [XStoreQueryAddOnLicensesAsync](/reference/system/xstore/functions/xstorequeryaddonlicensesasync.md)
- [XStoreQueryAddOnLicensesResult](/reference/system/xstore/functions/xstorequeryaddonlicensesresult.md)
