Profile Selector
This is the applet presented when launching a game that allows the user to select a user.
See AM_services#Library_Applets. The profile selector expects a two IStorage inputs and a single IStorage output.
Library Applet Versions
| System Version | Value | 
|---|---|
| [1.0.0+] | 0x1 | 
| [2.0.0+] | 0x10000 | 
| [6.0.0+] | 0x20000 | 
UiSettings
This is "nn::account::UiSettings".
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x4 | #UiMode | 
| 0x4 | 0x4 | |
| 0x8 | 0x80 | u128 invalidUidList[8]. This is copied from #UserSelectionSettings. | 
| 0x88 | 0x8 | ApplicationId with ShowUserSelectorForLauncher. | 
| 0x90 | 0x1 | u8 isNetworkServiceAccountRequired. This is copied from #UserSelectionSettings. | 
| 0x91 | 0x1 | u8 isSkipEnabled. This is copied from #UserSelectionSettings. | 
| 0x92 | 0x1 | Set to 0x1 by ShowUserSelectorForSystem/ShowUserSelectorForLauncher. | 
| 0x93 | 0x1 | u8 isPermitted. ShowUserSelector* sets this to the output bool from IsUserRegistrationRequestPermitted. | 
| 0x94 | 0x1 | u8 showSkipButton. This is copied from #UserSelectionSettings. | 
| 0x95 | 0x1 | u8 additionalSelect. This is copied from #UserSelectionSettings. | 
| 0x96 | 0x1 | [2.0.0+] This is copied from #UserSelectionSettingsForSystemService+0x4. ShowUserSelectorForLauncher/ShowUserSelector sets this to value 1. | 
| 0x97 | 0x1 | [6.0.0+] Set to #UserSelectionSettings isUnqualifiedUserSelectable ^ 1. | 
| 0x98 | 0x4 | [2.0.0+] This is copied from the 4-bytes at #UserSelectionSettingsForSystemService+0x0. | 
| 0x9C | 0x4 | 
This has size 0xA0 (0x98 with [1.0.0]) and seems to only affect the UI display. Typical value is all zero with byte 0x96 equal to 0x01. Setting the first byte to 1 will make the applet display in order to create a new user. "starter" sets the first byte to 5 in order to display initial user setup.
UiMode
This is "nn::account::UiMode".
| Value | Description | 
|---|---|
| 0 | UserSelector | 
| 1 | UserCreator | 
| 2 | EnsureNetworkServiceAccountAvailable | 
| 3 | UserIconEditor | 
| 4 | UserNicknameEditor | 
| 5 | UserCreatorForStarter | 
| 6 | NintendoAccountAuthorizationRequestContext | 
| 7 | IntroduceExternalNetworkServiceAccount | 
| 8 | [6.0.0+] IntroduceExternalNetworkServiceAccountForRegistration | 
| 9 | [6.0.0+] NintendoAccountNnidLinker | 
| 10 | [6.0.0+] LicenseRequirementsForNetworkService | 
| 11 | [7.0.0+] LicenseRequirementsForNetworkServiceWithUserContextImpl | 
| 12 | [7.0.0+] UserCreatorForImmediateNaLoginTest | 
UserSelectionSettings
This is "nn::account::UserSelectionSettings ".
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x80 | u128 invalidUidList[8] | 
| 0x80 | 0x1 | u8 isSkipEnabled | 
| 0x81 | 0x1 | u8 isNetworkServiceAccountRequired | 
| 0x82 | 0x1 | u8 showSkipButton | 
| 0x83 | 0x1 | u8 additionalSelect | 
| 0x84 | 0x1 | [6.0.0+] u8 isUnqualifiedUserSelectable | 
UserSelectionSettingsForSystemService
This is "nn::account::UserSelectionSettingsForSystemService". This was added as an additional input param with sdknso [2.0.0+].
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x4 | #UserSelectionPurpose | 
| 0x4 | 0x1 | |
| 0x5 | 0x3 | u8 padding[3] | 
UiReturnArg
This is "nn::account::UiReturnArg".
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x8 | Result (0 = Success, 2 = Failure) | 
| 0x8 | 0x10 | UUID of selected user | 
NintendoAccountStartupDialogType
This is "nn::account::NintendoAccountStartupDialogType".
| Value | Description | 
|---|---|
| 0 | LoginAndCreate | 
| 1 | Login | 
| 2 | Create | 
UserSelectionPurpose
This is "nn::account::UserSelectionPurpose".
| Value | Description | 
|---|---|
| 0 | General | 
| 1 | GameCardRegistration | 
| 2 | EShopLaunch | 
| 3 | EShopItemShow | 
| 4 | PicturePost | 
| 5 | NintendoAccountLinkage | 
| 6 | SettingsUpdate | 
| 7 | SaveDataDeletion | 
| 8 | UserMigration | 
Usage
User-processes should push a common arguments struct and the typical UserSelectionConfig struct as well. After pushing in the data and calling start, user-processes should wait upon the PopOutDataEvent and then pop a single IStorage to obtain the result structure described above.