Difference between revisions of "ACT Services"
DaniElectra (talk | contribs) m (Add link to ACTU:GetCommonInfo and add more commands) |
DaniElectra (talk | contribs) m (Add more command names) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
[[Category:Services]] | [[Category:Services]] | ||
− | The ACT module handles NNID accounts. | + | The ACT module handles NNID accounts. This module behaves very similarly to the [https://github.com/devkitPro/wut/blob/master/cafe/nn_act.def Wii U] implementation (nn::act) |
= ACT service "act:u" = | = ACT service "act:u" = | ||
Line 22: | Line 22: | ||
| 0x00030000 | | 0x00030000 | ||
| | | | ||
− | | | + | | GetLastResponseCode |
|- | |- | ||
− | | 0x00040000 | + | | 0x00040000 |
| | | | ||
| ? | | ? | ||
Line 34: | Line 34: | ||
| 0x000600C2 | | 0x000600C2 | ||
| | | | ||
− | | [[ACTU:GetAccountDataBlock|GetAccountDataBlock]] | + | | [[ACTU:GetAccountDataBlock|GetAccountDataBlock]]/GetAccountInfo |
|- | |- | ||
| 0x00070082 | | 0x00070082 | ||
Line 58: | Line 58: | ||
| 0x000C0082 | | 0x000C0082 | ||
| | | | ||
− | | | + | | AcquireTimeZoneList |
|- | |- | ||
| 0x000D0040 | | 0x000D0040 | ||
Line 64: | Line 64: | ||
| GenerateUuid | | GenerateUuid | ||
|- | |- | ||
− | | 0x000E0080 | + | | 0x000E0080 |
| | | | ||
| ? | | ? | ||
Line 72: | Line 72: | ||
| FindSlotNoByUuid | | FindSlotNoByUuid | ||
|- | |- | ||
− | | 0x00100000 | + | | 0x00100000 |
| | | | ||
− | | | + | | SaveData |
|- | |- | ||
| 0x00110080 | | 0x00110080 | ||
Line 82: | Line 82: | ||
| 0x00120102 | | 0x00120102 | ||
| | | | ||
− | | | + | | AcquireNexServiceToken |
|- | |- | ||
| 0x00130002 | | 0x00130002 | ||
Line 90: | Line 90: | ||
| 0x00140382 | | 0x00140382 | ||
| | | | ||
− | | | + | | AcquireIndependentServiceToken |
|- | |- | ||
| 0x00150002 | | 0x00150002 | ||
Line 98: | Line 98: | ||
| 0x00160082 | | 0x00160082 | ||
| | | | ||
− | | | + | | AcquireAccountInfo |
|- | |- | ||
| 0x00170084 | | 0x00170084 | ||
| | | | ||
− | | | + | | AcquireAccountIdByPrincipalId |
|- | |- | ||
| 0x00180044 | | 0x00180044 | ||
| | | | ||
− | | | + | | AcquirePrincipalIdByAccountId |
|- | |- | ||
| 0x00190044 | | 0x00190044 | ||
Line 114: | Line 114: | ||
| 0x001A0042 | | 0x001A0042 | ||
| | | | ||
− | | | + | | AcquireAccountInfoEx |
|- | |- | ||
| 0x001B0084 | | 0x001B0084 | ||
| | | | ||
− | | | + | | AcquireOtherTypePrincipalID? |
|- | |- | ||
| 0x001C0342 | | 0x001C0342 | ||
Line 126: | Line 126: | ||
| 0x001D0004 | | 0x001D0004 | ||
| | | | ||
− | | | + | | InquireMailAddress |
|- | |- | ||
| 0x001E0082 | | 0x001E0082 | ||
Line 135: | Line 135: | ||
| | | | ||
| AcquireEulaLanguageList | | AcquireEulaLanguageList | ||
+ | |- | ||
+ | | 0x00200382 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00210002 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00220342 | ||
+ | | | ||
+ | | ? | ||
|- | |- | ||
|} | |} | ||
Line 146: | Line 158: | ||
! Available since system-version | ! Available since system-version | ||
! Description | ! Description | ||
+ | |- | ||
+ | | 0x04010080 | ||
+ | | | ||
+ | | ? | ||
|- | |- | ||
| 0x04020000 | | 0x04020000 | ||
| | | | ||
− | | [[ACTA: | + | | [[ACTA:CreateConsoleAccount|CreateConsoleAccount]] |
+ | |- | ||
+ | | 0x04030040 | ||
+ | | | ||
+ | | CommitConsoleAccount | ||
|- | |- | ||
| 0x04040080 | | 0x04040080 | ||
| | | | ||
− | | [[ACTA: | + | | [[ACTA:UnbindServerAccount|UnbindServerAccount]] |
+ | |- | ||
+ | | 0x04050040 | ||
+ | | | ||
+ | | DeleteConsoleAccount | ||
+ | |- | ||
+ | | 0x04060240 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04070000 | ||
+ | | | ||
+ | | UnloadConsoleAccount | ||
+ | |- | ||
+ | | 0x04080080 | ||
+ | | | ||
+ | | EnableAccountPasswordCache | ||
|- | |- | ||
| 0x04090040 | | 0x04090040 | ||
| | | | ||
| [[ACTA:SetDefaultAccount|SetDefaultAccount]] | | [[ACTA:SetDefaultAccount|SetDefaultAccount]] | ||
+ | |- | ||
+ | | 0x040A0040 | ||
+ | | | ||
+ | | ReplaceAccountId | ||
+ | |- | ||
+ | | 0x040B0040 | ||
+ | | | ||
+ | | GetSupportContext | ||
+ | |- | ||
+ | | 0x040C0100 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x040D00C0 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x040E02C0 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x040F0280 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04100040 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04110040 | ||
+ | | | ||
+ | | ? | ||
|- | |- | ||
| 0x041207C0 | | 0x041207C0 | ||
Line 166: | Line 234: | ||
| | | | ||
| UpdateMiiImage | | UpdateMiiImage | ||
+ | |- | ||
+ | | 0x04140182 | ||
+ | | | ||
+ | | InquireAccountIdAvailability | ||
+ | |- | ||
+ | | 0x04150EC4 | ||
+ | | | ||
+ | | BindToNewServerAccount | ||
+ | |- | ||
+ | | 0x041602C4 | ||
+ | | | ||
+ | | BindToExistentServerAccount | ||
+ | |- | ||
+ | | 0x041702C4 | ||
+ | | | ||
+ | | InquireBindingToExistentServerAccount | ||
+ | |- | ||
+ | | 0x04180042 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04190042 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x041A01C2 | ||
+ | | | ||
+ | | AcquireAccountTokenEx | ||
|- | |- | ||
| 0x041B0142 | | 0x041B0142 | ||
| | | | ||
| AgreeEula | | AgreeEula | ||
+ | |- | ||
+ | | 0x041C0042 | ||
+ | | | ||
+ | | SyncAccountInfo | ||
+ | |- | ||
+ | | 0x041D0080 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x041E0182 | ||
+ | | | ||
+ | | UpdateAccountPassword | ||
+ | |- | ||
+ | | 0x041F0042 | ||
+ | | | ||
+ | | ReissueAccountPassword | ||
+ | |- | ||
+ | | 0x04200180 | ||
+ | | | ||
+ | | SetAccountPasswordInput | ||
|- | |- | ||
| 0x04210042 | | 0x04210042 | ||
| | | | ||
| UploadMii | | UploadMii | ||
+ | |- | ||
+ | | 0x04220042 | ||
+ | | | ||
+ | | ? | ||
|- | |- | ||
| 0x04230082 | | 0x04230082 | ||
| | | | ||
| ValidateMailAddress | | ValidateMailAddress | ||
+ | |- | ||
+ | | 0x04240044 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04250042 | ||
+ | | | ||
+ | | SendConfirmationMail | ||
+ | |- | ||
+ | | 0x04260044 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04270084 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04280044 | ||
+ | | | ||
+ | | ApproveByCreditCard | ||
+ | |- | ||
+ | | 0x04290082 | ||
+ | | | ||
+ | | SendCoppaCodeMail | ||
+ | |- | ||
+ | | 0x042A0080 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x042B01C4 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x042C0042 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x042D0042 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x042E0080 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x042F0084 | ||
+ | | | ||
+ | | UpdateAccountInfoEx | ||
+ | |- | ||
+ | | 0x04300044 | ||
+ | | | ||
+ | | UpdateAccountMailAddress | ||
+ | |- | ||
+ | | 0x04310042 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04320042 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04330042 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04340003 | ||
+ | | | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x04350042 | ||
+ | | | ||
+ | | DeleteServerAccount | ||
|} | |} | ||
Line 183: | Line 375: | ||
This is the service used by regular applications. | This is the service used by regular applications. | ||
− | =HTTPS Requests= | + | = Account slots = |
+ | |||
+ | Like the friends sysmodule, the ACT module supports multiple accounts internally, although this functionality is not exposed to the users. Unlike the Wii U which supports up to 12 accounts, the 3DS only has 8 account slots. | ||
+ | |||
+ | Some commands require require the account slot as an argument, which is 1-indexed. The value for using the current loaded account is 0xFE. | ||
+ | |||
+ | = DataBlocks = | ||
+ | |||
+ | Data blocks can be accessed from specific commands depending on the data that is requested. These follow a similar order to the Wii U [https://github.com/decaf-emu/decaf-emu/blob/master/src/libdecaf/src/nn/act/nn_act_enum.h ACTInfoTypes]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! BlkID | ||
+ | ! Size | ||
+ | ! Command needed | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetCommonInfo|GetCommonInfo]] | ||
+ | | Number of accounts | ||
+ | |- | ||
+ | | 0x2 | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetCommonInfo|GetCommonInfo]] | ||
+ | | Current account slot | ||
+ | |- | ||
+ | | 0x3 | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetCommonInfo|GetCommonInfo]] | ||
+ | | Default account slot | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x8 | ||
+ | | [[ACTU:GetCommonInfo|GetCommonInfo]] | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x5 | ||
+ | | 0x4 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | PersistentId | ||
+ | |- | ||
+ | | 0x6 | ||
+ | | 0x8 | ||
+ | | [[ACTU:GetCommonInfo|GetCommonInfo]]/[[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | CommonTransferableIdBase on GetCommonInfo / TransferableIdBase on GetAccountInfo | ||
+ | |- | ||
+ | | 0x7 | ||
+ | | 0x60 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | [[Mii#Mii_format|MiiData]] | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x11 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | AccountId (ASCII NUL-terminated Nintendo Network ID) | ||
+ | |- | ||
+ | | 0x9 | ||
+ | | 0x101 | ||
+ | | AcquireAccountInfo | ||
+ | | Mail address | ||
+ | |- | ||
+ | | 0xA | ||
+ | | 0x4 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | Birthday {u16 year; u8 month; u8 day;} | ||
+ | |- | ||
+ | | 0xB | ||
+ | | 0x3 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | ASCII NUL-terminated Country Name | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | PrincipalId | ||
+ | |- | ||
+ | | 0xE | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | IsPasswordCacheEnabled | ||
+ | |- | ||
+ | | 0xF | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | Does nothing? | ||
+ | |- | ||
+ | | 0x11 | ||
+ | | 0xA0 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | struct{u32 PersistentID; u32 padding; u64 TransferableIDBase; u8[0x60] MiiData; char16_t[0xB] MachinUserName?; char[0x11] AccountID; u8 padding; struct{u16 year; u8 month; u8 day;}Birthday; u32 PrincipalID;} | ||
+ | |- | ||
+ | | 0x12 | ||
+ | | 0x4 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x13 | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | Gender | ||
+ | |- | ||
+ | | 0x14 | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | LastAuthenticationResult | ||
+ | |- | ||
+ | | 0x15 | ||
+ | | 0x11 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | AssignedAccountId (ASCII NUL-terminated Nintendo Network ID) | ||
+ | |- | ||
+ | | 0x16 | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | ParentalControlSlotNo | ||
+ | |- | ||
+ | | 0x17 | ||
+ | | 0x4 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | SimpleAddressId ([[Config_Savegame#CountryInfo|CountryInfo]]) | ||
+ | |- | ||
+ | | 0x19 | ||
+ | | 0x8 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | UtcOffset | ||
+ | |- | ||
+ | | 0x1A | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | IsCommited | ||
+ | |- | ||
+ | | 0x1B | ||
+ | | 0x16 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | MiiName (NUL-terminated UTF-16 Mii name) | ||
+ | |- | ||
+ | | 0x1C | ||
+ | | 0x11 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | NfsPassword | ||
+ | |- | ||
+ | | 0x1D | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | Bool: if EciVirtualAccount has a value | ||
+ | |- | ||
+ | | 0x1E | ||
+ | | 0x41 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | TimeZoneId (ASCII Time Zone Location) | ||
+ | |- | ||
+ | | 0x1F | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | IsMiiUpdated | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | IsMailAddressValidated | ||
+ | |- | ||
+ | | 0x21 | ||
+ | | 0x4C | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x24 | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | IsServerAccountDeleted | ||
+ | |- | ||
+ | | 0x25 | ||
+ | | 0x101 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | MiiImageUrl (ASCII NUL-terminated URL to account mii image) | ||
+ | |- | ||
+ | | 0x26 | ||
+ | | 0x4 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | AssignedPrincipalId | ||
+ | |- | ||
+ | | 0x27 | ||
+ | | 0x4 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | ? (Only accessible with param[1] = 0xFE) | ||
+ | |- | ||
+ | | 0x28 | ||
+ | | 0x24 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | struct{char[0x21] NnasSubDomain?; char[0x3] NnasNfsEnv;} | ||
+ | |- | ||
+ | | 0x29 | ||
+ | | 0x24 | ||
+ | | [[ACTU:GetCommonInfo|GetCommonInfo]] | ||
+ | | struct{char[0x21] DefaultNnasSubDomain?; char[0x3] DefaultNnasNfsEnv;} | ||
+ | |- | ||
+ | | 0x2A | ||
+ | | 0x8 | ||
+ | | [[ACTU:GetCommonInfo|GetCommonInfo]] | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x2B | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | FpLocalAccountId | ||
+ | |- | ||
+ | | 0x2C | ||
+ | | 0x2 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | Age | ||
+ | |- | ||
+ | | 0x2D | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | IsEnabledReceiveAds | ||
+ | |- | ||
+ | | 0x2E | ||
+ | | 0x1 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | IsOffDeviceAccessEnabled | ||
+ | |- | ||
+ | | 0x2F | ||
+ | | 0x4 | ||
+ | | [[ACTU:GetAccountDataBlock|GetAccountInfo]] | ||
+ | | [[Cfg:TranslateCountryInfo|Translated]] SimpleAddressId ([[Config_Savegame#CountryInfo|CountryInfo]]) | ||
+ | |} | ||
+ | |||
+ | = HTTPS Requests = | ||
With each request, ACT-sysmodule specifies request-header "X-Nintendo-Device-Model". This is the only *dedicated* request-header that's contains anything Old3DS/New3DS specific. This was implemented with [[9.0.0-20|9.0.0-X]], and presumably [[8.1.0-0_New3DS]]. The value is from a string initialized during ACT-sysmodule startup. The value-string is the [[Cfg:GetSystemModel|codename]] string for all 5 of the model values from [[Cfg:GetSystemModel]]. When the output from GetSystemModel is >=5(switch statement default case), it runs this: "len = snprintf(outstr, outmaxsize, "3DS-%u", model);" | With each request, ACT-sysmodule specifies request-header "X-Nintendo-Device-Model". This is the only *dedicated* request-header that's contains anything Old3DS/New3DS specific. This was implemented with [[9.0.0-20|9.0.0-X]], and presumably [[8.1.0-0_New3DS]]. The value is from a string initialized during ACT-sysmodule startup. The value-string is the [[Cfg:GetSystemModel|codename]] string for all 5 of the model values from [[Cfg:GetSystemModel]]. When the output from GetSystemModel is >=5(switch statement default case), it runs this: "len = snprintf(outstr, outmaxsize, "3DS-%u", model);" | ||
− | ==Trusted Root CAs== | + | == Trusted Root CAs == |
ACT module uses a [[HTTP_Services|RootCertChain]] for all HTTPS requests, the only trusted root CA is [[SSLC:RootCertChainAddDefaultCert|default]] CertID 0x3. | ACT module uses a [[HTTP_Services|RootCertChain]] for all HTTPS requests, the only trusted root CA is [[SSLC:RootCertChainAddDefaultCert|default]] CertID 0x3. | ||
− | =New3DS= | + | = New3DS = |
Even though ACT-sysmodule uses [[PTM_Services|ptm:s]], it doesn't use CheckNew3DS at all. | Even though ACT-sysmodule uses [[PTM_Services|ptm:s]], it doesn't use CheckNew3DS at all. |
Latest revision as of 23:28, 20 August 2024
The ACT module handles NNID accounts. This module behaves very similarly to the Wii U implementation (nn::act)
ACT service "act:u"[edit]
These commands are common to both act:u and act:a
Command Header | Available since system-version | Description |
---|---|---|
0x00010084 | Initialize | |
0x00020040 | GetErrorCode | |
0x00030000 | GetLastResponseCode | |
0x00040000 | ? | |
0x00050082 | GetCommonInfo | |
0x000600C2 | GetAccountDataBlock/GetAccountInfo | |
0x00070082 | GetResultAsync | |
0x000800C2 | GetMiiImageData | |
0x00090180 | SetNfsPassword | |
0x000A0040? | ? | |
0x000B0042 | AcquireEulaList | |
0x000C0082 | AcquireTimeZoneList | |
0x000D0040 | GenerateUuid | |
0x000E0080 | ? | |
0x000F0140 | FindSlotNoByUuid | |
0x00100000 | SaveData | |
0x00110080 | GetTransferableId | |
0x00120102 | AcquireNexServiceToken | |
0x00130002 | GetNexServiceToken | |
0x00140382 | AcquireIndependentServiceToken | |
0x00150002 | GetIndependentServiceToken | |
0x00160082 | AcquireAccountInfo | |
0x00170084 | AcquireAccountIdByPrincipalId | |
0x00180044 | AcquirePrincipalIdByAccountId | |
0x00190044 | AcquireMii | |
0x001A0042 | AcquireAccountInfoEx | |
0x001B0084 | AcquireOtherTypePrincipalID? | |
0x001C0342 | ? | |
0x001D0004 | InquireMailAddress | |
0x001E0082 | AcquireEula | |
0x001F0082 | AcquireEulaLanguageList | |
0x00200382 | ? | |
0x00210002 | ? | |
0x00220342 | ? |
ACT service "act:a"[edit]
These commands are exclusive to act:a
Command Header | Available since system-version | Description |
---|---|---|
0x04010080 | ? | |
0x04020000 | CreateConsoleAccount | |
0x04030040 | CommitConsoleAccount | |
0x04040080 | UnbindServerAccount | |
0x04050040 | DeleteConsoleAccount | |
0x04060240 | ? | |
0x04070000 | UnloadConsoleAccount | |
0x04080080 | EnableAccountPasswordCache | |
0x04090040 | SetDefaultAccount | |
0x040A0040 | ReplaceAccountId | |
0x040B0040 | GetSupportContext | |
0x040C0100 | ? | |
0x040D00C0 | ? | |
0x040E02C0 | ? | |
0x040F0280 | ? | |
0x04100040 | ? | |
0x04110040 | ? | |
0x041207C0 | UpdateMii | |
0x041300C2 | UpdateMiiImage | |
0x04140182 | InquireAccountIdAvailability | |
0x04150EC4 | BindToNewServerAccount | |
0x041602C4 | BindToExistentServerAccount | |
0x041702C4 | InquireBindingToExistentServerAccount | |
0x04180042 | ? | |
0x04190042 | ? | |
0x041A01C2 | AcquireAccountTokenEx | |
0x041B0142 | AgreeEula | |
0x041C0042 | SyncAccountInfo | |
0x041D0080 | ? | |
0x041E0182 | UpdateAccountPassword | |
0x041F0042 | ReissueAccountPassword | |
0x04200180 | SetAccountPasswordInput | |
0x04210042 | UploadMii | |
0x04220042 | ? | |
0x04230082 | ValidateMailAddress | |
0x04240044 | ? | |
0x04250042 | SendConfirmationMail | |
0x04260044 | ? | |
0x04270084 | ? | |
0x04280044 | ApproveByCreditCard | |
0x04290082 | SendCoppaCodeMail | |
0x042A0080 | ? | |
0x042B01C4 | ? | |
0x042C0042 | ? | |
0x042D0042 | ? | |
0x042E0080 | ? | |
0x042F0084 | UpdateAccountInfoEx | |
0x04300044 | UpdateAccountMailAddress | |
0x04310042 | ? | |
0x04320042 | ? | |
0x04330042 | ? | |
0x04340003 | ? | |
0x04350042 | DeleteServerAccount |
This is the service used by regular applications.
Account slots[edit]
Like the friends sysmodule, the ACT module supports multiple accounts internally, although this functionality is not exposed to the users. Unlike the Wii U which supports up to 12 accounts, the 3DS only has 8 account slots.
Some commands require require the account slot as an argument, which is 1-indexed. The value for using the current loaded account is 0xFE.
DataBlocks[edit]
Data blocks can be accessed from specific commands depending on the data that is requested. These follow a similar order to the Wii U ACTInfoTypes.
BlkID | Size | Command needed | Description |
---|---|---|---|
0x1 | 0x1 | GetCommonInfo | Number of accounts |
0x2 | 0x1 | GetCommonInfo | Current account slot |
0x3 | 0x1 | GetCommonInfo | Default account slot |
0x4 | 0x8 | GetCommonInfo | ? |
0x5 | 0x4 | GetAccountInfo | PersistentId |
0x6 | 0x8 | GetCommonInfo/GetAccountInfo | CommonTransferableIdBase on GetCommonInfo / TransferableIdBase on GetAccountInfo |
0x7 | 0x60 | GetAccountInfo | MiiData |
0x8 | 0x11 | GetAccountInfo | AccountId (ASCII NUL-terminated Nintendo Network ID) |
0x9 | 0x101 | AcquireAccountInfo | Mail address |
0xA | 0x4 | GetAccountInfo | Birthday {u16 year; u8 month; u8 day;} |
0xB | 0x3 | GetAccountInfo | ASCII NUL-terminated Country Name |
0xC | 0x4 | GetAccountInfo | PrincipalId |
0xE | 0x1 | GetAccountInfo | IsPasswordCacheEnabled |
0xF | 0x1 | GetAccountInfo | Does nothing? |
0x11 | 0xA0 | GetAccountInfo | struct{u32 PersistentID; u32 padding; u64 TransferableIDBase; u8[0x60] MiiData; char16_t[0xB] MachinUserName?; char[0x11] AccountID; u8 padding; struct{u16 year; u8 month; u8 day;}Birthday; u32 PrincipalID;} |
0x12 | 0x4 | GetAccountInfo | ? |
0x13 | 0x1 | GetAccountInfo | Gender |
0x14 | 0x1 | GetAccountInfo | LastAuthenticationResult |
0x15 | 0x11 | GetAccountInfo | AssignedAccountId (ASCII NUL-terminated Nintendo Network ID) |
0x16 | 0x1 | GetAccountInfo | ParentalControlSlotNo |
0x17 | 0x4 | GetAccountInfo | SimpleAddressId (CountryInfo) |
0x19 | 0x8 | GetAccountInfo | UtcOffset |
0x1A | 0x1 | GetAccountInfo | IsCommited |
0x1B | 0x16 | GetAccountInfo | MiiName (NUL-terminated UTF-16 Mii name) |
0x1C | 0x11 | GetAccountInfo | NfsPassword |
0x1D | 0x1 | GetAccountInfo | Bool: if EciVirtualAccount has a value |
0x1E | 0x41 | GetAccountInfo | TimeZoneId (ASCII Time Zone Location) |
0x1F | 0x1 | GetAccountInfo | IsMiiUpdated |
0x20 | 0x1 | GetAccountInfo | IsMailAddressValidated |
0x21 | 0x4C | GetAccountInfo | ? |
0x24 | 0x1 | GetAccountInfo | IsServerAccountDeleted |
0x25 | 0x101 | GetAccountInfo | MiiImageUrl (ASCII NUL-terminated URL to account mii image) |
0x26 | 0x4 | GetAccountInfo | AssignedPrincipalId |
0x27 | 0x4 | GetAccountInfo | ? (Only accessible with param[1] = 0xFE) |
0x28 | 0x24 | GetAccountInfo | struct{char[0x21] NnasSubDomain?; char[0x3] NnasNfsEnv;} |
0x29 | 0x24 | GetCommonInfo | struct{char[0x21] DefaultNnasSubDomain?; char[0x3] DefaultNnasNfsEnv;} |
0x2A | 0x8 | GetCommonInfo | ? |
0x2B | 0x1 | GetAccountInfo | FpLocalAccountId |
0x2C | 0x2 | GetAccountInfo | Age |
0x2D | 0x1 | GetAccountInfo | IsEnabledReceiveAds |
0x2E | 0x1 | GetAccountInfo | IsOffDeviceAccessEnabled |
0x2F | 0x4 | GetAccountInfo | Translated SimpleAddressId (CountryInfo) |
HTTPS Requests[edit]
With each request, ACT-sysmodule specifies request-header "X-Nintendo-Device-Model". This is the only *dedicated* request-header that's contains anything Old3DS/New3DS specific. This was implemented with 9.0.0-X, and presumably 8.1.0-0_New3DS. The value is from a string initialized during ACT-sysmodule startup. The value-string is the codename string for all 5 of the model values from Cfg:GetSystemModel. When the output from GetSystemModel is >=5(switch statement default case), it runs this: "len = snprintf(outstr, outmaxsize, "3DS-%u", model);"
Trusted Root CAs[edit]
ACT module uses a RootCertChain for all HTTPS requests, the only trusted root CA is default CertID 0x3.
New3DS[edit]
Even though ACT-sysmodule uses ptm:s, it doesn't use CheckNew3DS at all.