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

[XUserAddAsync](/reference/system/xuser/functions/xuseraddasync)가 만든 사용자에 대한 핸들을 가져옵니다.

## 구문

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

### 매개변수

*async*   \_Inout\_\
형식: [XAsyncBlock\*](/reference/system/xasync/structs/xasyncblock)

[XUserAddAsync](/reference/system/xuser/functions/xuseraddasync)에 전달된 async 블록입니다.

*newUser*   \_Out\_\
형식: XUserHandle\*

새 사용자에 대한 핸들을 포함합니다.

### 반환값

형식: HRESULT

HRESULT 성공 또는 오류 코드입니다.

| 반환 코드                                       | 설명                                                                                                                                                                                          |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| S\_OK                                       | 작업이 성공했습니다.                                                                                                                                                                                 |
| E\_GAMEUSER\_NO\_DEFAULT\_USER              | 기본 사용자를 사용할 수 없습니다. [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync)를 [XUserAddOptions::AddDefaultUserSilently](/reference/system/xuser/enums/xuseraddoptions) 없이 호출해야 합니다. |
| E\_GAMEUSER\_RESOLVE\_USER\_ISSUE\_REQUIRED | 사용자가 UI를 사용하여 문제를 해결해야 합니다. 사용자에게 UI를 표시하려면 [XUserResolveIssueWithUiAsync](/reference/system/xuser/functions/xuserresolveissuewithuiasync)를 호출합니다.                                          |
| E\_ABORT                                    | 사용자가 작업을 취소했습니다.                                                                                                                                                                            |

## 설명

**XUserAddAsync**는 게임에 사용자를 추가하는 비동기 작업을 시작합니다. 작업 결과를 가져오려면
[XUserAddResult](/reference/system/xuser/functions/xuseraddresult)를 사용합니다.

**XUserAddAsync**는
[XUserAddOptions::AddDefaultUserSilently](/reference/system/xuser/enums/xuseraddoptions)를
*options* 매개변수에 전달하지 않는 한 항상 계정 선택 UI를 표시합니다.

[XUserAddOptions::AddDefaultUserSilently](/reference/system/xuser/enums/xuseraddoptions)를 사용하는 경우, **XUserAddAsync**는
UI를 표시하지 않습니다. **XUserAddOptions::AddDefaultUserSilently**가 반환한 사용자는 사용자가
로그아웃할 때까지 계속 반환됩니다. 기본 사용자를 사용할 수 없는 경우, [XUserAddResult](/reference/system/xuser/functions/xuseraddresult)는
**E\_GAMEUSER\_NO\_DEFAULT\_USER**를 반환합니다. 이는 사용자를 선택하기 위해
**XUserAddOptions::AddDefaultUserSilently** 없이 **XUserAddAsync**를 호출해야 함을 나타냅니다.

사용자가 XBOX Live에서 금지된 경우, 게임은 해당 사용자에 대한 XUserHandle을 얻을 수 없습니다.
**XUserAddOptions::AddDefaultUserSilently**가 사용되었고 게임이 금지된 사용자에 의해 시작된 경우,
**XUserAddResult**는 E\_GAMEUSER\_NO\_DEFAULT\_USER를 반환합니다. 그렇지 않은 경우 UI가 표시되면 금지되지 않은
사용자가 로그인해야 하거나 사용자가 UI를 취소해야 하며 **XUserAddResult**는
E\_ABORT를 반환합니다.

[XUserAddOptions::AllowGuests](/reference/system/xuser/enums/xuseraddoptions)는 **XUserAddOptions::AddDefaultUserSilently**와 함께 사용할 수 없습니다. 게스트는
기본 사용자가 될 수 없습니다. 현재 플랫폼이 게스트를 지원하는지 여부와 관계없이 **XUserAddOptions::AllowGuests**를
안전하게 사용할 수 있습니다.

**XUsers** API에서 가져오는 각 **XUserHandle** 핸들은
[XUserCloseHandle](/reference/system/xuser/functions/xuserclosehandle)을 호출하여 한 번 닫아야 합니다.

다음 예제는 게임 세션에 사용자를 비동기적으로 추가하는 방법을 보여줍니다.

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

## 요구 사항

**헤더:** XUser.h

**라이브러리:** xgameruntime.lib

**지원되는 플랫폼:** Windows, Steam Deck, XBOX One 계열 콘솔 및 XBOX Series 콘솔

## 개념 문서

* [Microsoft Game Development Kit(GDK) API 작업 실행](/build/core-features/common/async/async-libraries/async-library-xasync-example-run-gdk-task)
* [비동기 프로그래밍 설계 목표 및 개선 사항](/build/core-features/common/async/async-whitepaper)

## 함께 보기

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

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

[XUserAddOptions](/reference/system/xuser/enums/xuseraddoptions)

[XUserCloseHandle](/reference/system/xuser/functions/xuserclosehandle)


## Related topics

- [XUserAddOptions](/ko/reference/system/xuser/enums/xuseraddoptions.md)
- [Microsoft Game Development Kit API 작업 실행 예제](/ko/build/core-features/common/async/async-libraries/async-library-xasync-example-run-gdk-task.md)
- [사용자 ID 및 XUser](/ko/build/core-features/common/user/player-identity-xuser.md)
- [XUserAddAsync](/ko/reference/system/xuser/functions/xuseraddasync.md)
- [GDK 초기화](/ko/build/steam-porting-guide/initializing-the-gdk.md)
