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

# XUserAddOptions

> XUserAddOptions

# XUserAddOptions

Spécifie les options d'ajout d'un utilisateur.

## Syntaxe

```cpp theme={null}
enum class XUserAddOptions  : uint32_t  
{  
    None = 0x00,  
    AddDefaultUserSilently = 0x01,  
    AllowGuests = 0x02,  
    AddDefaultUserAllowingUI = 0x04,
}  
```

## Constantes

| Constante | Description |
| - | - |
| None | Aucune option. |
| AddDefaultUserSilently | Obtient l'utilisateur qui a lancé le jeu sans afficher d'interface utilisateur. |
| AllowGuests | Les invités seront inclus dans l'interface utilisateur de sélection d'utilisateur. |
| AddDefaultUserAllowingUI | Tente d'obtenir silencieusement l'utilisateur initial qui a lancé le jeu. Si le système peut obtenir cet utilisateur sans afficher d'interface utilisateur, il tente de le faire. Si cet utilisateur doit donner son consentement ou résoudre des problèmes de compte, une interface utilisateur s'affiche pour résoudre le problème. |

## Remarques

Il existe certains cas limites que les développeurs doivent connaître s'ils appellent de manière répétée
[XUserAddAsync](/fr/reference/system/xuser/functions/xuseraddasync) avec *options* défini sur XUserAddOptions::AddDefaultUserSilently :

* Si vous appelez cette fonction de manière répétée et que l'utilisateur par défaut qui a lancé le jeu est connu, elle retourne ce même utilisateur.
* Si l'utilisateur par défaut précédemment connu s'est déconnecté et qu'un seul utilisateur est connecté sur l'appareil, elle
  marque cet utilisateur comme nouvel utilisateur « par défaut » et le retourne.
* Si l'utilisateur par défaut précédemment connu s'est déconnecté et que plusieurs utilisateurs sont connectés sur l'appareil, elle
  retourne E\_GAMEUSER\_NO\_DEFAULT\_USER.
* Lors des lancements en mode développeur, l'utilisateur par défaut est l'utilisateur à connexion automatique, que vous pouvez spécifier en le définissant comme utilisateur à connexion automatique dans DevHome ou en utilisant DefaultUser de [xbconfig (rubrique sous NDA)](/fr/tools/tools-console/commandlinetools/xbconfig).

Si aucun utilisateur par défaut n'est disponible\*, [XUserAddResult](/fr/reference/system/xuser/functions/xuseraddresult) retourne
E\_GAMEUSER\_NO\_DEFAULT\_USER. Vous devez appeler [XUserAddAsync](/fr/reference/system/xuser/functions/xuseraddasync) avec *options* non défini sur
XUserAddOptions::AddDefaultUserSilently.

Il existe également certains cas limites que les développeurs doivent connaître s'ils appellent de manière répétée
[XUserAddAsync](/fr/reference/system/xuser/functions/xuseraddasync) avec *options* défini sur XUserAddOptions::AddDefaultUserAllowingUI. Ils sont très
semblables (mais pas identiques) au cas silencieux :

* Si vous appelez cette fonction de manière répétée et que l'utilisateur par défaut qui a lancé le jeu est connu, elle retourne ce même utilisateur.
* Si l'utilisateur par défaut précédemment connu s'est déconnecté et qu'un seul utilisateur est connecté sur l'appareil, elle
  marque cet utilisateur comme nouvel utilisateur « par défaut » et le retourne.
* Si l'utilisateur qui a initialement lancé le jeu s'est déconnecté et que le nombre d'utilisateurs est égal à 0 ou supérieur à 1,
  le système affiche une interface utilisateur pour obtenir l'utilisateur, puis définit cet utilisateur comme utilisateur par défaut.

Dans [XUserAddAsync](/fr/reference/system/xuser/functions/xuseraddasync), vous ne pouvez pas utiliser XUserAddOptions::AllowGuests avec
XUserAddOptions::AddDefaultUserSilently. Un invité ne peut pas être l'utilisateur par défaut.

Vous pouvez utiliser XUserAddOptions::AllowGuests, même si la plateforme actuelle ne prend pas en charge les invités.

L'exemple suivant montre comment ajouter de façon asynchrone un utilisateur à une session de jeu.

```cpp theme={null}
HRESULT AddUserComplete(XAsyncBlock* ab)
{
    unique_user_handle user;
    RETURN_IF_FAILED(XUserAddResult(ab, &user));

    XUserLocalId userLocalId;
    XUserGetLocalId(user.get(), &userLocalId);

    auto iter = std::find_if(
        _users.begin(),
        _users.end(),
        [&userLocalId](const User& candidate)
    {
        XUserLocalId candidateUserLocalId;
        XUserGetLocalId(candidate.Handle(), &candidateUserLocalId);
        return candidateUserLocalId == userLocalId;
    });

    // User already known
    if (iter != _users.end())
    {
        appLog.AddLog("User already in list\n");
        return S_OK;
    }

    try
    {
        _users.emplace_back(user.get());
        _users.back().LoadGamerPicAsync(_queue);
    }
    CATCH_RETURN();

    return S_OK;
}

HRESULT AddUser(bool allowGuests, bool silent)
{
    auto asyncBlock = std::make_unique<XAsyncBlock>();
    ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
    asyncBlock->queue = _queue;
    asyncBlock->context = this;
    asyncBlock->callback = [](XAsyncBlock* ab)
    {
        auto asyncBlock = std::unique_ptr<XAsyncBlock>(ab);
        LOG_IF_FAILED(static_cast<UserWindow*>(ab->context)->AddUserComplete(ab));
    };

    XUserAddOptions options = XUserAddOptions::None;

    if (allowGuests)
    {
        WI_SET_FLAG(options, XUserAddOptions::AllowGuests);
    }

    if (silent)
    {
        WI_SET_FLAG(options, XUserAddOptions::AddDefaultUserSilently);
    }

    if (SUCCEEDED_LOG(XUserAddAsync(
        options,
        asyncBlock.get())))
    {
        // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
        // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
        asyncBlock.release();
    }

    return S_OK;
}
```

## Configuration requise

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

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

## Voir aussi

[XUser](/fr/reference/system/xuser/xuser_members)

[XUserAddAsync](/fr/reference/system/xuser/functions/xuseraddasync)

[XUserAddResult](/fr/reference/system/xuser/functions/xuseraddresult)


## Related topics

- [XUserAddOptions](/reference/system/xuser/enums/xuseraddoptions.md)
- [XUserAddResult](/reference/system/xuser/functions/xuseraddresult.md)
- [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync.md)
