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

Especifica las opciones para agregar un usuario.

## Sintaxis

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

## Constantes

| Constante                | Descripción                                                                                                                                                                                                                                                                                                                     |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| None                     | Sin opciones.                                                                                                                                                                                                                                                                                                                   |
| AddDefaultUserSilently   | Obtiene el usuario que inició el juego sin mostrar ninguna interfaz de usuario.                                                                                                                                                                                                                                                 |
| AllowGuests              | Los invitados se incluirán en la interfaz de usuario del selector de usuarios.                                                                                                                                                                                                                                                  |
| AddDefaultUserAllowingUI | Intenta obtener de forma silenciosa el usuario inicial que inició el juego. Si el sistema puede obtener ese usuario sin mostrar ninguna interfaz de usuario, intentará hacerlo. Si ese usuario necesita dar su consentimiento o corregir problemas de la cuenta, se mostrará una interfaz de usuario para resolver el problema. |

## Comentarios

Hay algunos casos extremos que los desarrolladores deben conocer si llaman repetidamente
a [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync) con *options* establecido en XUserAddOptions::AddDefaultUserSilently:

* Si llama a esta función repetidamente y se conoce el usuario predeterminado que inició el juego, devolverá ese mismo usuario.
* Si el usuario predeterminado conocido anteriormente ha cerrado sesión y solo hay un usuario con sesión iniciada en el dispositivo,
  marcará a ese usuario como el nuevo usuario "predeterminado" y lo devolverá.
* Si el usuario predeterminado conocido anteriormente ha cerrado sesión y hay varios usuarios con sesión iniciada en el dispositivo,
  devolverá E\_GAMEUSER\_NO\_DEFAULT\_USER.
* En los inicios de desarrollador, el usuario que será el usuario predeterminado es el usuario de inicio de sesión automático, que se puede especificar estableciendo ese usuario como el usuario de inicio de sesión automático en DevHome o mediante [xbconfig (tema NDA)](/tools/tools-console/commandlinetools/xbconfig) DefaultUser.

Si no hay disponible un usuario predeterminado\*, [XUserAddResult](/reference/system/xuser/functions/xuseraddresult) devuelve
E\_GAMEUSER\_NO\_DEFAULT\_USER. Debe llamar a [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync) con *options* no establecido en
XUserAddOptions::AddDefaultUserSilently.

También hay algunos casos extremos que los desarrolladores deben conocer si llaman repetidamente a
[XUserAddAsync](/reference/system/xuser/functions/xuseraddasync) con *options* establecido en XUserAddOptions::AddDefaultUserAllowingUI. Son muy
similares (pero no idénticos) al caso de interfaz de usuario silenciosa:

* Si llama a esta función repetidamente y se conoce el usuario predeterminado que inició el juego, devolverá ese mismo usuario.
* Si el usuario predeterminado conocido anteriormente ha cerrado sesión y solo hay un usuario con sesión iniciada en el dispositivo,
  marcará a ese usuario como el nuevo usuario "predeterminado" y lo devolverá.
* Si el usuario que inició inicialmente el juego ha cerrado sesión y el número de usuarios es 0 o más de 1,
  el sistema mostrará una interfaz de usuario para obtener el usuario y, a continuación, establecerá a ese usuario como el predeterminado.

En [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync), no puede usar XUserAddOptions::AllowGuests con
XUserAddOptions::AddDefaultUserSilently. Un invitado no puede ser el usuario predeterminado.

Puede usar XUserAddOptions::AllowGuests, aunque la plataforma actual no admita invitados.

El siguiente ejemplo muestra cómo agregar de forma asincrónica un usuario a una sesión de juego.

```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;
}
```

## Requisitos

**Encabezado:** XUser.h

**Plataformas compatibles:** Windows, consolas de la familia XBOX One y consolas XBOX Series

## Consulte también

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

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

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


## Related topics

- [XUserAddResult](/es/reference/system/xuser/functions/xuseraddresult.md)
- [XUserAddAsync](/es/reference/system/xuser/functions/xuseraddasync.md)
- [XUser](/es/reference/system/xuser/xuser_members.md)
- [Información general sobre usuarios invitados](/es/build/core-features/common/user/users-guest-overview.md)
- [XUserPrivilegeOptions](/es/reference/system/xuser/enums/xuserprivilegeoptions.md)
