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

# XUserAddResult

> XUserAddResult

# XUserAddResult

Recupera um identificador para um usuário criado por [XUserAddAsync](/pt-BR/reference/system/xuser/functions/xuseraddasync).

## Sintaxe

```cpp theme={null}
HRESULT XUserAddResult(  
         XAsyncBlock* async,  
         XUserHandle* newUser  
)  
```

### Parâmetros

*async*   \_Inout\_\
Tipo: [XAsyncBlock\*](/pt-BR/reference/system/xasync/structs/xasyncblock)

O bloco assíncrono enviado para [XUserAddAsync](/pt-BR/reference/system/xuser/functions/xuseraddasync).

*newUser*   \_Out\_\
Tipo: XUserHandle\*

Contém um identificador para o novo usuário.

### Valor retornado

Tipo: HRESULT

Código de sucesso ou de erro HRESULT.

| Código de retorno | Descrição |
| - | - |
| S\_OK | A operação foi bem-sucedida. |
| E\_GAMEUSER\_NO\_DEFAULT\_USER | Um usuário padrão não está disponível. [XUserAddAsync](/pt-BR/reference/system/xuser/functions/xuseraddasync) precisa ser chamado sem [XUserAddOptions::AddDefaultUserSilently](/pt-BR/reference/system/xuser/enums/xuseraddoptions). |
| E\_GAMEUSER\_RESOLVE\_USER\_ISSUE\_REQUIRED | O usuário deve usar uma interface do usuário para resolver o problema. Chame [XUserResolveIssueWithUiAsync](/pt-BR/reference/system/xuser/functions/xuserresolveissuewithuiasync) para exibir a interface do usuário. |
| E\_ABORT | O usuário cancelou a operação. |

## Comentários

**XUserAddAsync** inicia uma operação assíncrona para adicionar um usuário ao jogo. Use
[XUserAddResult](/pt-BR/reference/system/xuser/functions/xuseraddresult) para recuperar os resultados da operação.

**XUserAddAsync** sempre exibe uma interface do usuário do seletor de contas, a menos que você passe
[XUserAddOptions::AddDefaultUserSilently](/pt-BR/reference/system/xuser/enums/xuseraddoptions)
para o parâmetro *options*.

Se você usar [XUserAddOptions::AddDefaultUserSilently](/pt-BR/reference/system/xuser/enums/xuseraddoptions), **XUserAddAsync** não exibirá
uma interface do usuário. O usuário retornado por **XUserAddOptions::AddDefaultUserSilently** continuará sendo retornado até que o usuário
saia. Se um usuário padrão não estiver disponível, [XUserAddResult](/pt-BR/reference/system/xuser/functions/xuseraddresult) retornará
**E\_GAMEUSER\_NO\_DEFAULT\_USER**. Isso indica que você deve chamar **XUserAddAsync** sem
**XUserAddOptions::AddDefaultUserSilently** para selecionar um usuário.

Se um usuário estiver banido do XBOX Live, o jogo não poderá obter um XUserHandle para esse usuário.
Se **XUserAddOptions::AddDefaultUserSilently** for usado e o jogo tiver sido iniciado por um usuário banido,
**XUserAddResult** retornará E\_GAMEUSER\_NO\_DEFAULT\_USER. Caso contrário, se a interface do usuário for exibida, um usuário não banido
precisará entrar ou o usuário precisará cancelar a interface do usuário, e **XUserAddResult**
retornará E\_ABORT.

Você não pode usar [XUserAddOptions::AllowGuests](/pt-BR/reference/system/xuser/enums/xuseraddoptions) com **XUserAddOptions::AddDefaultUserSilently**. Um convidado
não pode ser o usuário padrão. Você pode usar **XUserAddOptions::AllowGuests** com segurança, independentemente de a plataforma atual
oferecer suporte a convidados.

Você deve fechar cada identificador **XUserHandle** recuperado de uma API **XUsers** uma vez, chamando
[XUserCloseHandle](/pt-BR/reference/system/xuser/functions/xuserclosehandle).

O exemplo a seguir demonstra como adicionar um usuário a uma sessão de jogo de forma assíncrona.

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

**Cabeçalho:** XUser.h

**Biblioteca:** xgameruntime.lib

**Plataformas com suporte:** Windows,Steam Deck, consoles da família XBOX One e consoles XBOX Series

## Documentação conceitual

* [Executar tarefa de API do Microsoft Game Development Kit (GDK)](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync-example-run-gdk-task)
* [Metas de design e melhorias da programação assíncrona](/pt-BR/build/core-features/common/async/async-whitepaper)

## Confira também

[XUser](/pt-BR/reference/system/xuser/xuser_members)

[XUserAddAsync](/pt-BR/reference/system/xuser/functions/xuseraddasync)

[XUserAddOptions](/pt-BR/reference/system/xuser/enums/xuseraddoptions)

[XUserCloseHandle](/pt-BR/reference/system/xuser/functions/xuserclosehandle)


## Related topics

- [XUserAddOptions](/pt-BR/reference/system/xuser/enums/xuseraddoptions.md)
- [Exemplo de execução de tarefa de API do Microsoft Game Development Kit](/pt-BR/build/core-features/common/async/async-libraries/async-library-xasync-example-run-gdk-task.md)
- [Identidade do usuário e XUser](/pt-BR/build/core-features/common/user/player-identity-xuser.md)
- [XUserAddAsync](/pt-BR/reference/system/xuser/functions/xuseraddasync.md)
- [Metas de design e melhorias da programação assíncrona](/pt-BR/build/core-features/common/async/async-whitepaper.md)
