Difference between revisions of "Profile Selector"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 16: Line 16:
  
 
== UiSettings ==
 
== UiSettings ==
 +
This is "nn::account::UiSettings".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || [[#UiMode]]
 +
|-
 +
| 0x4 || 0x4 ||
 +
|-
 +
| 0x8 || 0x80 || u128 invalidUidList[8]. This is copied from [[#UserSelectionSettings]].
 +
|-
 +
| 0x88 || 0x8 ||
 +
|-
 +
| 0x90 || 0x1 || u8 isNetworkServiceAccountRequired. This is copied from [[#UserSelectionSettings]].
 +
|-
 +
| 0x91 || 0x1 || u8 isSkipEnabled. This is copied from [[#UserSelectionSettings]].
 +
|-
 +
| 0x92 || 0x1 ||
 +
|-
 +
| 0x93 || 0x1 || u8 isPermitted.
 +
|-
 +
| 0x94 || 0x1 || u8 showSkipButton. This is copied from [[#UserSelectionSettings]].
 +
|-
 +
| 0x95 || 0x1 || u8 additionalSelect. This is copied from [[#UserSelectionSettings]].
 +
|-
 +
| 0x96 || 0x1 || This is copied from [[#UserSelectionSettingsForSystemService]].
 +
|-
 +
| 0x97 || 0x1 ||
 +
|-
 +
| 0x98 || 0x4 || This is copied from [[#UserSelectionSettingsForSystemService]].
 +
|-
 +
| 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.
 
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.
 
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.
 
"starter" sets the first byte to 5 in order to display initial user setup.
  
[2.0.0+]: sdknso ShowUserSelectorForSystem now has an additional input param UserSelectionSettingsForSystemService: u8 +4 is copied to UiSettings+0x96, and u32 +0 is copied to UiSettings+0xA0. sdknso ShowUserSelectorForLauncher/ShowUserSelector now sets u8 UiSettings+0x96 to value 1.
+
[2.0.0+]: sdknso ShowUserSelectorForSystem now has an additional input param UserSelectionSettingsForSystemService: u8 +4 is copied to UiSettings+0x96, and u32 +0 is copied to UiSettings+0x98. sdknso ShowUserSelectorForLauncher/ShowUserSelector now sets u8 UiSettings+0x96 to value 1.
  
== Result ==  
+
== UiMode ==
This is 0x18-bytes.
+
This is "nn::account::UiMode".
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Offset || Size || Notes
+
! Value || Description
 +
|-
 +
| 0 || SelectUser
 +
|-
 +
| 1 || CreateUser
 +
|-
 +
| 2 || EnsureNsaAvailable
 +
|-
 +
| 3 || EditUserIcon
 +
|-
 +
| 4 || EditUserNickname
 +
|-
 +
| 5 || CreateUserForStarter
 +
|-
 +
| 6 || AcquireNintendoAccountAuthorization
 +
|-
 +
| 7 || IntroduceExternalNetworkServiceAccount
 +
|-
 +
| 8 || IntroduceExternalNetworkServiceAccountForRegistration
 +
|-
 +
| 9 || [3.0.0+] LinkAccountNnid
 +
|-
 +
| 10 || [6.0.0+] ShowLicenseRequirementsForNetworkService
 +
|-
 +
| 11 || [6.0.0+] ShowLicenseRequirementsForNetworkServiceWithUserContext
 +
|-
 +
| 12 || [8.0.0+] CreateUserForImmediateNaLoginTest
 +
|}
 +
 
 +
== UserSelectionSettings ==
 +
This is "nn::account::UserSelectionSettings ".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! 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 || u8 isUnqualifiedUserSelectable
 +
|}
 +
 
 +
== UserSelectionSettingsForSystemService ==
 +
This is "nn::account::UserSelectionSettingsForSystemService".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 ||
 +
|-
 +
| 0x4 || 0x1 ||
 +
|-
 +
| 0x5 || 0x3 || u8 padding[3]
 +
|}
 +
 
 +
== UiResult ==
 +
This is "nn::account::UiResult".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 
|-
 
|-
 
| 0x0 || 0x8 || Result (0 = Success, 2 = Failure)
 
| 0x0 || 0x8 || Result (0 = Success, 2 = Failure)
 
|-
 
|-
 
| 0x8 || 0x10 || UUID of selected user
 
| 0x8 || 0x10 || UUID of selected user
|-
 
 
|}
 
|}
  

Revision as of 21:09, 2 December 2019

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
0x90 0x1 u8 isNetworkServiceAccountRequired. This is copied from #UserSelectionSettings.
0x91 0x1 u8 isSkipEnabled. This is copied from #UserSelectionSettings.
0x92 0x1
0x93 0x1 u8 isPermitted.
0x94 0x1 u8 showSkipButton. This is copied from #UserSelectionSettings.
0x95 0x1 u8 additionalSelect. This is copied from #UserSelectionSettings.
0x96 0x1 This is copied from #UserSelectionSettingsForSystemService.
0x97 0x1
0x98 0x4 This is copied from #UserSelectionSettingsForSystemService.
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.

[2.0.0+]: sdknso ShowUserSelectorForSystem now has an additional input param UserSelectionSettingsForSystemService: u8 +4 is copied to UiSettings+0x96, and u32 +0 is copied to UiSettings+0x98. sdknso ShowUserSelectorForLauncher/ShowUserSelector now sets u8 UiSettings+0x96 to value 1.

UiMode

This is "nn::account::UiMode".

Value Description
0 SelectUser
1 CreateUser
2 EnsureNsaAvailable
3 EditUserIcon
4 EditUserNickname
5 CreateUserForStarter
6 AcquireNintendoAccountAuthorization
7 IntroduceExternalNetworkServiceAccount
8 IntroduceExternalNetworkServiceAccountForRegistration
9 [3.0.0+] LinkAccountNnid
10 [6.0.0+] ShowLicenseRequirementsForNetworkService
11 [6.0.0+] ShowLicenseRequirementsForNetworkServiceWithUserContext
12 [8.0.0+] CreateUserForImmediateNaLoginTest

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 u8 isUnqualifiedUserSelectable

UserSelectionSettingsForSystemService

This is "nn::account::UserSelectionSettingsForSystemService".

Offset Size Description
0x0 0x4
0x4 0x1
0x5 0x3 u8 padding[3]

UiResult

This is "nn::account::UiResult".

Offset Size Description
0x0 0x8 Result (0 = Success, 2 = Failure)
0x8 0x10 UUID of selected user

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.