NS services: Difference between revisions
No edit summary |
|||
(75 intermediate revisions by 2 users not shown) | |||
Line 349: | Line 349: | ||
== ListApplicationRecord == | == ListApplicationRecord == | ||
Takes a type-0x6 output buffer containing an array of | Takes a type-0x6 output buffer containing an array of [[#ApplicationRecord]] and an s32 entry_offset, returns an output s32 out_entrycount. | ||
Returns an array of entries with the below format using the specified offset and count. | Returns an array of entries with the below format using the specified offset and count. | ||
== LaunchApplication == | == LaunchApplication == | ||
Line 430: | Line 398: | ||
Loads cached [[control.nacp]] to buf+0 and the cached icon to buf+0x4000. Returns an error if the buffer is too small. | Loads cached [[control.nacp]] to buf+0 and the cached icon to buf+0x4000. Returns an error if the buffer is too small. | ||
=== | == ListApplicationContentMetaStatus == | ||
Takes a type-0x6 output buffer containing an array of [[#ApplicationContentMetaStatus]], an input s32 index and [[NCM_services#ApplicationId|ApplicationId]], returns an output s32 out_entrycount. | |||
Returns 0x10-byte entries using the specified [[NCM_services#ApplicationId|ApplicationId]] starting at the specified index. Can only return game titles. The second entry if any is the update-title usually. When the input entryindex is >= totalentries, this will return 0 with out_entrycount=0. | |||
= ns:am2, ns:ec, ns:rid, ns:rt, ns:web, ns:ro, ns:sweb = | |||
These are "nn::ns::detail::IServiceGetterInterface". | |||
These commands check a state field for a command-specific bit and returns an error if not set, this is a permissions check for service+command. | |||
[11.0.0+] ns:ro was added. | |||
[15.0.0+] ns:sweb was added. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name || Permission bit | ||
|- | |||
| 7988 || [6.0.0+] [[#IDynamicRightsInterface|GetDynamicRightsInterface]] || 10 | |||
|- | |- | ||
| | | 7989 || [5.1.0+] [[#IReadOnlyApplicationControlDataInterface|GetReadOnlyApplicationControlDataInterface]] || 9 | ||
| | |||
|- | |- | ||
| | | 7991 || [5.0.0+] [[#IReadOnlyApplicationRecordInterface|GetReadOnlyApplicationRecordInterface]] || 8 | ||
| | |||
|- | |- | ||
| | | 7992 || [4.0.0+] [[#IECommerceInterface|GetECommerceInterface]] || 7 | ||
| | |||
| | |||
|- | |- | ||
| 7993 || [4.0.0+] [[#IApplicationVersionInterface|GetApplicationVersionInterface]] || 6 | |||
|- | |- | ||
| | | 7994 || [[#IFactoryResetInterface|GetFactoryResetInterface]] || 5 | ||
| | |||
| [[ | |||
|- | |- | ||
| | | 7995 || [[#IAccountProxyInterface|GetAccountProxyInterface]] || 4 | ||
| | |||
| [[ | |||
|- | |- | ||
| | | 7996 || [[#IApplicationManagerInterface|GetApplicationManagerInterface]] || 3 | ||
| | |||
| | |||
|- | |- | ||
| | | 7997 || [[#IDownloadTaskInterface|GetDownloadTaskInterface]] || 1 | ||
| | |||
| | |||
|- | |- | ||
| | | 7998 || [[#IContentManagementInterface|GetContentManagementInterface]] || 0 | ||
| | |||
| | |||
|- | |- | ||
| | | 7999 || [[#IDocumentInterface|GetDocumentInterface]] || 2 | ||
| | |||
| [[ | |||
|} | |} | ||
Permissions state field with each service: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Service || Permissions | ||
|- | |- | ||
| | | ns:web || 0x304 | ||
|- | |- | ||
| | | ns:ec || 0x83 | ||
|- | |- | ||
| | | ns:sweb || 0x387 | ||
|- | |- | ||
| | | ns:rid || 0x10 | ||
|- | |- | ||
| | | ns:rt || 0x20 | ||
|- | |- | ||
| | | ns:ro || 0x301 | ||
|- | |- | ||
| | | ns:am2 || 0x7FF | ||
|} | |} | ||
Line 729: | Line 670: | ||
|- | |- | ||
| 307 || TerminateOverlayApplet | | 307 || TerminateOverlayApplet | ||
|- | |||
| 308 || [S2] | |||
|- | |||
| 309 || [S2] | |||
|- | |- | ||
| 400 || [[#GetApplicationControlData]] | | 400 || [[#GetApplicationControlData]] | ||
Line 742: | Line 687: | ||
| 405 || ListApplicationControlCacheEntryInfo | | 405 || ListApplicationControlCacheEntryInfo | ||
|- | |- | ||
| 406 || [6.0.0 | | 406 || [6.0.0-18.1.0] [[#GetApplicationControlProperty]] | ||
|- | |- | ||
| 407 || [8.0.0+] [[#ListApplicationTitle]] | | 407 || [8.0.0+] [[#ListApplicationTitle]] | ||
Line 748: | Line 693: | ||
| 408 || [8.0.0+] [[#ListApplicationIcon]] | | 408 || [8.0.0+] [[#ListApplicationIcon]] | ||
|- | |- | ||
| | | 409 || [S2] | ||
|- | |- | ||
| 503 || [[#RequestGameCardRegistrationGoldPoint]] | | 410 || [S2] | ||
|- | |||
| 411 || [19.0.0+] | |||
|- | |||
| 412 || [19.0.0+] | |||
|- | |||
| 413 || [19.0.0+] | |||
|- | |||
| 414 || [19.0.0+] | |||
|- | |||
| 415 || [19.0.0+] | |||
|- | |||
| 416 || [19.0.0+] | |||
|- | |||
| 417 || [19.0.0+] InvalidateAllApplicationControlCacheOfTheStage | |||
|- | |||
| 418 || [19.0.0+] InvalidateApplicationControlCacheOfTheStage | |||
|- | |||
| 419 || [19.0.0+] RequestDownloadApplicationControlDataInBackground | |||
|- | |||
| 420 || [19.0.0+] CloneApplicationControlDataCacheForDebug | |||
|- | |||
| 421 || [20.0.0+] | |||
|- | |||
| 422 || [20.0.0+] | |||
|- | |||
| 423 || [20.0.0+] | |||
|- | |||
| 424 || [20.0.0+] | |||
|- | |||
| 425 || [20.0.0+] | |||
|- | |||
| 426 || [20.0.0+] | |||
|- | |||
| 427 || [20.0.0+] | |||
|- | |||
| 502 || [[#RequestCheckGameCardRegistration]] | |||
|- | |||
| 503 || [[#RequestGameCardRegistrationGoldPoint]] | |||
|- | |- | ||
| 504 || [[#RequestRegisterGameCard]] | | 504 || [[#RequestRegisterGameCard]] | ||
Line 765: | Line 748: | ||
|- | |- | ||
| 510 || [9.0.0+] [[#GetGameCardPlatformRegion]] | | 510 || [9.0.0+] [[#GetGameCardPlatformRegion]] | ||
|- | |||
| 511 || [19.0.0+] GetGameCardWakenReadyEvent | |||
|- | |||
| 512 || [19.0.0+] IsGameCardApplicationRunning | |||
|- | |||
| 513 || [20.0.0+] | |||
|- | |||
| 514 || [20.0.0+] | |||
|- | |||
| 515 || [20.0.0+] | |||
|- | |- | ||
| 600 || [[#CountApplicationContentMeta]] | | 600 || [[#CountApplicationContentMeta]] | ||
Line 840: | Line 833: | ||
| 916 || [11.0.0+] IsApplicationAutoDeleteDisabled | | 916 || [11.0.0+] IsApplicationAutoDeleteDisabled | ||
|- | |- | ||
| | | 917 || [20.0.0+] | ||
|- | |- | ||
| | | 918 || [20.0.0+] | ||
|- | |- | ||
| | | 919 || [20.0.0+] | ||
|- | |- | ||
| | | 920 || [20.0.0+] | ||
|- | |- | ||
| | | 921 || [20.0.0+] | ||
|- | |- | ||
| | | 922 || [20.0.0+] | ||
|- | |- | ||
| | | 923 || [20.0.0+] | ||
|- | |- | ||
| | | 924 || [S2] | ||
|- | |- | ||
| | | 925 || [S2] | ||
|- | |- | ||
| | | 926 || [S2] | ||
|- | |- | ||
| | | 927 || [S2] | ||
|- | |- | ||
| | | 928 || [20.0.0+] | ||
|- | |- | ||
| | | 929 || [20.0.0+] | ||
|- | |- | ||
| 1310 || [10.0.0+] [[#RequestMoveApplicationEntity]] | | 930 || [20.0.0+] | ||
|- | |||
| 931 || [20.0.0+] | |||
|- | |||
| 933 || [20.1.0+] | |||
|- | |||
| 1000 || [[#RequestVerifyApplicationDeprecated]] | |||
|- | |||
| 1001 || CorruptApplicationForDebug | |||
|- | |||
| 1002 || [3.0.0-9.2.0] [[#RequestVerifyAddOnContentsRights]] | |||
|- | |||
| 1003 || [5.0.0+] [[#RequestVerifyApplication]] | |||
|- | |||
| 1004 || [5.0.0+] CorruptContentForDebug | |||
|- | |||
| 1200 || [[#NeedsUpdateVulnerability]] | |||
|- | |||
| 1300 || [[#IsAnyApplicationEntityInstalled]] | |||
|- | |||
| 1301 || DeleteApplicationContentEntities | |||
|- | |||
| 1302 || CleanupUnrecordedApplicationEntity | |||
|- | |||
| 1303 || [3.0.0-9.2.0] CleanupAddOnContentsWithNoRights | |||
|- | |||
| 1304 || [3.0.0+] DeleteApplicationContentEntity | |||
|- | |||
| 1308 || [5.0.0+] DeleteApplicationCompletelyForDebug | |||
|- | |||
| 1309 || [6.0.0+] [[#CleanupUnavailableAddOnContents]] | |||
|- | |||
| 1310 || [10.0.0+] [[#RequestMoveApplicationEntity]] | |||
|- | |- | ||
| 1311 || [10.0.0+] [[#EstimateSizeToMove]] | | 1311 || [10.0.0+] [[#EstimateSizeToMove]] | ||
Line 889: | Line 914: | ||
|- | |- | ||
| 1506 || [9.0.0+] GetSdCardStartupStatus | | 1506 || [9.0.0+] GetSdCardStartupStatus | ||
|- | |||
| 1508 || [20.0.0+] | |||
|- | |||
| 1509 || [20.0.0+] | |||
|- | |||
| 1510 || [20.0.0+] | |||
|- | |||
| 1511 || [20.0.0+] | |||
|- | |||
| 1512 || [20.0.0+] | |||
|- | |- | ||
| 1600 || GetSystemSeedForPseudoDeviceId | | 1600 || GetSystemSeedForPseudoDeviceId | ||
Line 905: | Line 940: | ||
|- | |- | ||
| 1705 || [11.0.0+] [[#IsPatchAutoDeletableApplication]] | | 1705 || [11.0.0+] [[#IsPatchAutoDeletableApplication]] | ||
|- | |||
| 1706 || [20.0.0+] | |||
|- | |- | ||
| 1800 || IsNotificationSetupCompleted | | 1800 || IsNotificationSetupCompleted | ||
Line 910: | Line 947: | ||
| 1801 || GetLastNotificationInfoCount | | 1801 || GetLastNotificationInfoCount | ||
|- | |- | ||
| 1802 || ListLastNotificationInfo | | 1802 || [[#ListLastNotificationInfo]] | ||
|- | |- | ||
| 1803 || [3.0.0+] ListNotificationTask | | 1803 || [3.0.0+] [[#ListNotificationTask]] | ||
|- | |- | ||
| 1900 || [3.0.0-12.1.0] IsActiveAccount | | 1900 || [3.0.0-12.1.0] IsActiveAccount | ||
Line 959: | Line 996: | ||
|- | |- | ||
| 2018 || [5.0.0+] [[#GetApplicationDeliveryInfoHash]] | | 2018 || [5.0.0+] [[#GetApplicationDeliveryInfoHash]] | ||
|- | |||
| 2019 || [20.0.0+] | |||
|- | |- | ||
| 2050 || [6.0.0+] [[#GetApplicationRightsOnClient]] | | 2050 || [6.0.0+] [[#GetApplicationRightsOnClient]] | ||
|- | |- | ||
| 2051 || [9.0.0+] InvalidateRightsIdCache | | 2051 || [9.0.0+] InvalidateRightsIdCache | ||
|- | |||
| 2052 || [20.0.0+] | |||
|- | |||
| 2053 || [20.0.0+] | |||
|- | |- | ||
| 2100 || [6.0.0+] [[#GetApplicationTerminateResult]] | | 2100 || [6.0.0+] [[#GetApplicationTerminateResult]] | ||
Line 995: | Line 1,038: | ||
|- | |- | ||
| 2182 || [6.0.0+] SetActiveRightsContextUsingStateToRightsEnvironment | | 2182 || [6.0.0+] SetActiveRightsContextUsingStateToRightsEnvironment | ||
|- | |||
| 2183 || [20.1.0+] | |||
|- | |- | ||
| 2190 || [6.0.0+] [[#GetRightsEnvironmentHandleForApplication]] | | 2190 || [6.0.0+] [[#GetRightsEnvironmentHandleForApplication]] | ||
Line 1,027: | Line 1,072: | ||
|- | |- | ||
| 2359 || [15.0.0+] IsMultiCoreDownloadEnabled | | 2359 || [15.0.0+] IsMultiCoreDownloadEnabled | ||
|- | |||
| 2360 || [19.0.0+] GetApplicationDownloadTaskCount | |||
|- | |||
| 2361 || [19.0.0+] GetMaxApplicationDownloadTaskCount | |||
|- | |||
| 2362 || [20.0.0+] | |||
|- | |||
| 2363 || [20.0.0+] | |||
|- | |||
| 2364 || [20.0.0+] | |||
|- | |||
| 2365 || [20.0.0+] | |||
|- | |||
| 2366 || [20.0.0+] | |||
|- | |||
| 2367 || [20.0.0+] | |||
|- | |||
| 2368 || [20.0.0+] | |||
|- | |- | ||
| 2400 || [8.0.0+] [[#GetPromotionInfo]] | | 2400 || [8.0.0+] [[#GetPromotionInfo]] | ||
Line 1,032: | Line 1,095: | ||
| 2401 || [8.0.0+] CountPromotionInfo | | 2401 || [8.0.0+] CountPromotionInfo | ||
|- | |- | ||
| 2402 || [8.0.0+] ListPromotionInfo | | 2402 || [8.0.0+] [[#ListPromotionInfo|ListPromotionInfo]] | ||
|- | |- | ||
| 2403 || [8.0.0+] [[#ImportPromotionJsonForDebug]] | | 2403 || [8.0.0+] [[#ImportPromotionJsonForDebug]] | ||
Line 1,065: | Line 1,128: | ||
|- | |- | ||
| 2523 || [17.0.0+] GetProgramId | | 2523 || [17.0.0+] GetProgramId | ||
|- | |||
| 2524 || [19.0.0+] | |||
|- | |||
| 2525 || [20.0.0+] | |||
|- | |- | ||
| 2800 || [9.0.0+] GetApplicationIdOfPreomia | | 2800 || [9.0.0+] GetApplicationIdOfPreomia | ||
Line 1,098: | Line 1,165: | ||
| 3014 || [11.0.0+] [[#IsLocalContentShareEnabled]] | | 3014 || [11.0.0+] [[#IsLocalContentShareEnabled]] | ||
|- | |- | ||
| 3015 || [18.0.0+] | | 3015 || [18.0.0+] GetNetworkUpdateRequiredByGameCardDetectionEvent | ||
|- | |- | ||
| 3050 || [14.0.0+] ListAssignELicenseTaskResult | | 3050 || [14.0.0+] ListAssignELicenseTaskResult | ||
|- | |- | ||
| 3100 || [17.0.0+] GetSafeSystemVersionCheckInfo | | 3100 || [17.0.0+] [[#GetSafeSystemVersionCheckInfo|GetSafeSystemVersionCheckInfo]] | ||
|- | |||
| 3101 || [17.0.0+] [[#RequestUpdateSafeSystemVersionCheckInfo|RequestUpdateSafeSystemVersionCheckInfo]] | |||
|- | |||
| 3102 || [17.0.0+] [[#ResetSafeSystemVersionCheckInfo|ResetSafeSystemVersionCheckInfo]] | |||
|- | |||
| 3104 || [18.0.0+] GetApplicationNintendoLogo | |||
|- | |||
| 3105 || [18.0.0+] GetApplicationStartupMovie | |||
|- | |||
| 3150 || [S2] | |||
|- | |||
| 4000 || [20.0.0+] | |||
|- | |||
| 4004 || [20.0.0+] | |||
|- | |||
| 4006 || [20.0.0+] | |||
|- | |||
| 4007 || [20.0.0+] | |||
|- | |||
| 4008 || [20.0.0+] | |||
|- | |||
| 4009 || [20.0.0+] | |||
|- | |||
| 4010 || [20.0.0+] | |||
|- | |||
| 4011 || [20.0.0+] | |||
|- | |||
| 4012 || [20.0.0+] | |||
|- | |- | ||
| | | 4013 || [20.0.0+] | ||
|- | |- | ||
| | | 4015 || [20.0.0+] | ||
|- | |- | ||
| | | 4017 || [20.0.0+] | ||
|- | |- | ||
| | | 4019 || [20.0.0+] | ||
|- | |- | ||
| | | 4020 || [20.0.0+] | ||
|- | |- | ||
| | | 4021 || [20.0.0+] | ||
|- | |- | ||
| | | 4022 || [20.0.0+] | ||
| | |- | ||
| 4023 || [20.0.0+] | |||
[ | |- | ||
| 4024 || [20.0.0+] | |||
|- | |||
| 4025 || [20.0.0+] | |||
|- | |||
| 4026 || [20.0.0+] | |||
|- | |||
| 4027 || [20.0.0+] | |||
|- | |||
| 4028 || [20.0.0+] | |||
|- | |||
| 4029 || [20.0.0+] | |||
|- | |||
| 4030 || [20.0.0+] | |||
|- | |||
| 4031 || [20.0.0+] | |||
|- | |||
| 4032 || [20.0.0+] | |||
|- | |||
| 4033 || [20.0.0+] | |||
|- | |||
| 4034 || [20.0.0+] | |||
|- | |||
| 4035 || [20.0.0+] | |||
|- | |||
| 4037 || [20.0.0+] | |||
|- | |||
| 4038 || [20.0.0+] | |||
|- | |||
| 4039 || [20.0.0+] | |||
|- | |||
| 4040 || [20.0.0+] | |||
|- | |||
| 4041 || [20.0.0+] | |||
|- | |||
| 4042 || [20.0.0+] | |||
|- | |||
| 4043 || [20.0.0+] | |||
|- | |||
| 4044 || [20.0.0+] | |||
|- | |||
| 4045 || [20.0.0+] | |||
|- | |||
| 4046 || [20.0.0+] | |||
|- | |||
| 4049 || [20.0.0+] | |||
|- | |||
| 4050 || [20.0.0+] | |||
|- | |||
| 4051 || [20.0.0+] | |||
|- | |||
| 4052 || [20.0.0+] | |||
|- | |||
| 4053 || [20.0.0+] | |||
|- | |||
| 4054 || [20.0.0+] | |||
|- | |||
| 4055 || [20.0.0+] | |||
|- | |||
| 4056 || [20.0.0+] | |||
|- | |||
| 4057 || [20.0.0+] | |||
|- | |||
| 4058 || [20.0.0+] | |||
|- | |||
| 4059 || [20.0.0+] | |||
|- | |||
| 4060 || [20.0.0+] | |||
|- | |||
| 4061 || [20.0.0+] | |||
|- | |||
| 4062 || [20.0.0+] | |||
|- | |||
| 4063 || [20.0.0+] | |||
|- | |||
| 4064 || [20.0.0+] | |||
|- | |||
| 4065 || [20.0.0+] | |||
|- | |||
| 4066 || [20.0.0+] | |||
|- | |||
| 4067 || [20.0.0+] | |||
|- | |||
| 4068 || [20.0.0+] | |||
|- | |||
| 4069 || [20.0.0+] | |||
|- | |||
| 4070 || [20.0.0+] | |||
|- | |||
| 4071 || [20.0.0+] | |||
|- | |||
| 4072 || [20.0.0+] | |||
|- | |||
| 4073 || [20.0.0+] | |||
|- | |||
| 4074 || [20.0.0+] | |||
|- | |||
| 4075 || [20.0.0+] | |||
|- | |||
| 4076 || [20.0.0+] | |||
|- | |||
| 4077 || [20.0.0+] | |||
|- | |||
| 4078 || [20.0.0+] | |||
|- | |||
| 4079 || [20.0.0+] | |||
|- | |||
| 4080 || [20.0.0+] | |||
|- | |||
| 4081 || [20.0.0+] | |||
|- | |||
| 4083 || [20.0.0+] | |||
|- | |||
| 4084 || [20.0.0+] | |||
|- | |||
| 4085 || [20.0.0+] | |||
|- | |||
| 4086 || [20.0.0+] | |||
|- | |||
| 4087 || [20.0.0+] | |||
|- | |||
| 4088 || [20.0.0+] | |||
|- | |||
| 4089 || [20.0.0+] | |||
|- | |||
| 4090 || [20.0.0+] | |||
|- | |||
| 4091 || [20.0.0+] | |||
|- | |||
| 4092 || [20.0.0+] | |||
|- | |||
| 4093 || [20.0.0+] | |||
|- | |||
| 4094 || [20.0.0+] | |||
|- | |||
| 4095 || [20.0.0+] | |||
|- | |||
| 4096 || [20.0.0+] | |||
|- | |||
| 4097 || [20.0.0+] | |||
|- | |||
| 5000 || [18.0.0+] | |||
|- | |||
| 5001 || [18.0.0+] | |||
|- | |||
| 9999 || [10.0.0-10.2.0] GetApplicationCertificate | |||
|} | |||
[4.0.0+] RequestDownloadAddOnContent now takes an additional 8-bytes of input. | |||
==== | ==== GetApplicationRecordUpdateSystemEvent ==== | ||
No input, returns an output Event handle with EventClearMode=1. | |||
==== | ==== GetApplicationViewDeprecated ==== | ||
Takes an input | Takes a type-0x6 output buffer containing an array of [[#ApplicationViewDeprecated]], a type-0x5 input buffer containing an array of u64 [[NCM_services#ApplicationId|ApplicationIds]], no output. | ||
On newer system-versions this is the same as [[#GetApplicationView]], except this converts the output from the func called in the loop from [[#ApplicationView]] to [[#ApplicationViewDeprecated]]. | |||
==== | ==== DeleteApplicationEntity ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | ||
==== | ==== DeleteApplicationCompletely ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | ||
==== | ==== DeleteRedundantApplicationEntity ==== | ||
No input/output. | No input/output. | ||
==== | ==== IsApplicationEntityMovable ==== | ||
Takes an input u8 [[NCM_services#StorageId|StorageId]], returns | Takes an input u8 [[NCM_services#StorageId|StorageId]], an [[NCM_services#ApplicationId|ApplicationId]], returns an output u8 bool. | ||
==== MoveApplicationEntity ==== | |||
Takes an input u8 [[NCM_services#StorageId|StorageId]], an [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== | ==== RequestApplicationUpdateInfo ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[# | Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncValue]]. | ||
The data that can be read from the [[#IAsyncValue]] is [[#ApplicationUpdateInfo]]. | |||
Before using the cmd, official sw uses [[Network_Interface_services#IsAnyInternetRequestAccepted|IsAnyInternetRequestAccepted]] with the output from [[Network_Interface_services#GetClientId|GetClientId]], throwing an error when the returned bool is false. | |||
[ | ==== CancelApplicationDownload ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== | ==== ResumeApplicationDownload ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], | Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | ||
[ | ==== CheckApplicationLaunchVersion ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== | ==== CalculateApplicationDownloadRequiredSize ==== | ||
Takes an input [[NCM_services# | Takes an input u8 [[NCM_services#StorageId|StorageId]], an [[NCM_services#ApplicationId|ApplicationId]], returns an output s64. | ||
==== CleanupSdCard ==== | |||
No input/output. | |||
==== GetSdCardMountStatusChangedEvent ==== | |||
No input, returns an output Event handle with EventClearMode=0. | |||
==== | ==== GetGameCardUpdateDetectionEvent ==== | ||
No input, returns an output Event handle with EventClearMode=0. | |||
==== | ==== DisableApplicationAutoDelete ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== EnableApplicationAutoDelete ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== SetApplicationTerminateResult ==== | |||
Takes an input u32 Result, an [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
[[NCM_services# | ==== ClearApplicationTerminateResult ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== GetLastSdCardMountUnexpectedResult ==== | |||
No input/output. | |||
==== | ==== GetRequestServerStopper ==== | ||
No input, returns an output [[#IRequestServerStopper]]. | |||
This increfs a state ref-count, with decref being handled when the object is closed. This ref-count is checked by [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]] and related cmds. | |||
==== | ==== CancelApplicationApplyDelta ==== | ||
Takes an input [[ | Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | ||
==== | ==== ResumeApplicationApplyDelta ==== | ||
Takes an input | Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | ||
==== | ==== CalculateApplicationApplyDeltaRequiredSize ==== | ||
Takes an input [[ | Takes an input u8 [[NCM_services#StorageId|StorageId]], an [[NCM_services#ApplicationId|ApplicationId]], returns an output s64. | ||
==== | ==== ResumeAll ==== | ||
No input/output. | |||
==== | ==== GetStorageSize ==== | ||
Takes an input | Takes an input u8 [[NCM_services#StorageId|StorageId]], returns two output s64s. | ||
This temporarily mounts the [[Filesystem_services#OpenContentStorageFileSystem|ContentStorage]] specified by the StorageId (must be BuiltInUser or SdCard). The two output s64s are the output from [[Filesystem_services#GetTotalSpaceSize|GetTotalSpaceSize]] and [[Filesystem_services#GetFreeSpaceSize|GetFreeSpaceSize]] with this ContentStorage, with it this being unmounted afterwards. | |||
==== RequestUpdateApplication2 ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | |||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
==== LaunchApplication ==== | |||
Takes an input u8 ProgramIndex, an input [[#ApplicationLaunchInfo]], returns an output u64. | |||
[18.0.0+] Now takes a total of 0x58 bytes of input. | |||
[19.0.0+] Now takes a total of 0x88 bytes of input. | |||
==== | ==== GetApplicationLaunchInfo ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[#ApplicationLaunchInfo]]. | |||
[18.0.0+] Now returns a total of 0x50 bytes of output. | |||
[19.0.0+] Now returns a total of 0x80 bytes of output. | |||
==== AcquireApplicationLaunchInfo ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[#ApplicationLaunchInfo]]. | |||
This verifies that a state flag is set and that a state field matches the input ApplicationId, throwing an error otherwise. The [[#ApplicationLaunchInfo]] from state is copied to output, then the state flag is cleared. | |||
[18.0.0+] Now returns a total of 0x50 bytes of output. | |||
[19.0.0+] Now returns a total of 0x80 bytes of output. | |||
[ | |||
==== | ==== GetMainApplicationProgramIndexByApplicationLaunchInfo ==== | ||
[18.0.0+] Now takes a total of 0x50 bytes of input. | |||
[ | [19.0.0+] Now returns a total of 0x80 bytes of output. | ||
==== LaunchDevMenu ==== | |||
No input/output. | |||
This is used by AM cmd [[Applet_Manager_services#LaunchDevMenu|LaunchDevMenu]]. | |||
This loads ProgramIds from [[System_Settings|system-settings]] <code>ns.applet!devmenu_id</code> and <code>ns.applet!devoverlaydisp_id</code>, which only exists on devunits. An error is thrown if loading these fail. | |||
[[NCM_services#ncm|OpenContentMetaDatabase]] is used with StorageId = NandSystem, then IContentMetaDatabase GetLatestContentMetaKey is used with both of the above ProgramIds to verify that the cmd is successful. | |||
Then if the above succeeds, the above titles are launched with the above StorageId via [[Process_Manager_services|pmshell]] LaunchProgram ([10.0.0+] [[PGL_services#LaunchProgram|pgl]] with pgl_launch_flags=0), with a 0.5s sleep-thread afterwards on success. [[Process_Manager_services#LaunchFlags|LaunchFlags]] value 0xB is used here. | |||
==== DeleteUserSaveDataAll ==== | |||
Takes an input [[Account_services#Uid|Uid]], returns an output [[#IProgressMonitorForDeleteUserSaveDataAll]]. | |||
On success, [[#IProgressMonitorForDeleteUserSaveDataAll]] GetProgress is used with the output being copied into object state. | |||
==== DeleteUserSystemSaveData ==== | |||
Takes an input [[Account_services#Uid|Uid]], an u64 SystemSaveDataId, no output. | |||
==== DeleteSaveData ==== | |||
Takes an input u8 [[Filesystem_services#SaveDataSpaceId|SaveDataSpaceId]], an u64 SaveDataId, no output. | |||
==== | ==== UnregisterNetworkServiceAccount ==== | ||
Takes an input [[ | Takes an input [[Account_services#Uid|Uid]], no output. | ||
==== UnregisterNetworkServiceAccountWithUserSaveDataDeletion ==== | |||
Takes an input [[Account_services#Uid|Uid]], no output. | |||
==== | ==== LaunchLibraryApplet ==== | ||
Takes an input | Takes an input u64 [[NCM_services#ProgramId|ProgramId]], returns an output u64. | ||
The | The specified program is launched with StorageId=BuiltInSystem via [[Process_Manager_services|pmshell]] LaunchProgram ([10.0.0+] [[PGL_services#LaunchProgram|pgl]] with pgl_launch_flags=0). [[Process_Manager_services#LaunchFlags|LaunchFlags]] value 0x9 is used here. The output u64 from here is written to the output for this cmd, on success. | ||
This is used by [[Applet_Manager_services|AM]]. | |||
==== | ==== LaunchSystemApplet ==== | ||
No input, returns an output u64. | |||
A state flag must be non-zero, otherwise an error is thrown. When a state field is value 1, a hard-coded ProgramId for MaintenanceMenu is used. Otherwise, the ProgramId is loaded from [[System_Settings|system-setting]] <code>ns.applet!system_applet_id</code> ([20.0.0+] <code>ns.applet!system_applet_id_gen2</code>). | |||
= | The SystemApplet is launched with StorageId=BuiltInSystem via [[Process_Manager_services|pmshell]] LaunchProgram ([10.0.0+] [[PGL_services#LaunchProgram|pgl]] with pgl_launch_flags=0). [[Process_Manager_services#LaunchFlags|LaunchFlags]] value 0x9 is used here. The output u64 from here is written to the output for this cmd, on success. | ||
This is used by [[Applet_Manager_services|AM]]. | |||
==== | ==== LaunchOverlayApplet ==== | ||
No input | No input, returns an output u64. | ||
A state flag must be non-zero, otherwise an error is thrown. The ProgramId is loaded from [[System_Settings|system-setting]] <code>ns.applet!overlay_applet_id</code>. | |||
== | The OverlayApplet is launched with StorageId=BuiltInSystem via [[Process_Manager_services|pmshell]] LaunchProgram ([10.0.0+] [[PGL_services#LaunchProgram|pgl]] with pgl_launch_flags=0). [[Process_Manager_services#LaunchFlags|LaunchFlags]] value 0x9 is used here. The output u64 from here is written to the output for this cmd, on success. | ||
This is used by [[Applet_Manager_services|AM]]. | |||
==== RequestDownloadApplicationControlData ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | |||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
[ | |||
[ | ==== GetApplicationControlProperty ==== | ||
[18.0.0+] Now takes a total of 0x58 bytes of input. | |||
==== | ==== ListApplicationTitle ==== | ||
Takes an input TransferMemory handle, a type-0x5 input buffer containing an array of u64 [[NCM_services#ApplicationId|ApplicationIds]], an u8 [[#ApplicationControlSource]], an u64 size, returns an output Event handle and an [[#IAsyncValue]]. | |||
[[qlaunch]] uses value 0x1 for the u8. | |||
= | The user-process creates the TransferMemory with permissions=R--. | ||
The output | The data available with [[#IAsyncValue]] Get is a s32 for the offset within the TransferMemory where the output data is located, GetSize returns the total byte-size of the data located here. The data located here is the [[NACP_Format|NACP]] title-entry for each specified ApplicationId. | ||
The TransferMemory size must be at least: count*sizeof([[NACP_Format|title-entry]]) + count*sizeof(u64) + count*[[#GetApplicationControlData|0x24000]]. | |||
This is essentially an async wrapper for [[#GetApplicationControlData]], with support for multiple ApplicationIds. | |||
==== ListApplicationIcon ==== | |||
Takes an input TransferMemory handle, a type-0x5 input buffer containing an array of u64 [[NCM_services#ApplicationId|ApplicationIds]], an u8 [[#ApplicationControlSource]], an u64 size, returns an output Event handle and an [[#IAsyncValue]]. | |||
= | The user-process creates the TransferMemory with permissions=R--. | ||
The data available with [[#IAsyncValue]] Get is a s32 for the offset within the TransferMemory where the output data is located, GetSize returns the total byte-size of the data located here. This data is: an u64 for total entries, an array of u64s for each icon size, then the icon JPEGs for the specified ApplicationIds. | |||
The TransferMemory size must be at least: 0x4 + count*sizeof(u64) + count*[[#GetApplicationControlData|0x20000]] + count*sizeof(u64) + [[#GetApplicationControlData|0x24000]]. | |||
This is essentially an async wrapper for [[#GetApplicationControlData]], with support for multiple ApplicationIds. | |||
==== RequestCheckGameCardRegistration ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | |||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
==== | ==== RequestGameCardRegistrationGoldPoint ==== | ||
Takes an input | Takes an input [[Account_services#Uid|Uid]], an [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncValue]]. | ||
The data that can be read from the [[#IAsyncValue]] is 4-bytes. | |||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
==== | ==== RequestRegisterGameCard ==== | ||
Takes | Takes an input s32, an [[Account_services#Uid|Uid]], an [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | ||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
==== | ==== GetGameCardMountFailureEvent ==== | ||
No input | No input, returns an output Event handle with EventClearMode=0. | ||
==== | ==== IsGameCardInserted ==== | ||
No input, returns an output u8 bool. | No input, returns an output u8 bool. | ||
==== | ==== EnsureGameCardAccess ==== | ||
No input/output. | No input/output. | ||
==== | ==== GetLastGameCardMountFailureResult ==== | ||
No input/output. | |||
==== | ==== ListApplicationIdOnGameCard ==== | ||
Takes a type- | Takes a type-0x6 output buffer containing an array of u64 [[NCM_services#ApplicationId|ApplicationIds]], returns an output s32 for total output entries. | ||
==== | ==== GetGameCardPlatformRegion ==== | ||
No input, returns an u8 '''GameCardPlatformRegion''' (0x00 = Global, 0x01 = China). | |||
This calls [[Filesystem_services#IDeviceOperator|fsp-srv IDeviceOperator]] GetGameCardCompatibilityType and returns the result. | |||
==== ListAvailableAddOnContent ==== | |||
[10.0.0+] This now takes a total of 0x10-bytes of input instead of a total of 0x18-bytes of input. | |||
[15.0.0+] This now takes a total of 0x8-bytes of input instead of a total of 0x10-bytes of input. | |||
==== RequestDownloadTaskListData ==== | |||
No input, returns an output Event handle and an [[#IAsyncValue]]. | |||
==== | ==== TouchApplication ==== | ||
Takes | Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | ||
==== IsApplicationUpdateRequested ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output u8 bool and an u32. | |||
The output u32 is only valid when the output bool is set. | |||
==== WithdrawApplicationUpdateRequest ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== | ==== RequestVerifyApplicationDeprecated ==== | ||
Takes | Takes an input TransferMemory handle, an [[NCM_services#ApplicationId|ApplicationId]], an u64 size, returns an output Event handle and an [[#IProgressAsyncResult]]. | ||
On newer system-versions this calls the same func as [[#RequestVerifyApplication]], with the u32 value set to 0x7. | |||
==== | ==== RequestVerifyAddOnContentsRights ==== | ||
Takes | Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IProgressAsyncResult]]. | ||
==== RequestVerifyApplication ==== | |||
Takes an input TransferMemory handle, an u32, an [[NCM_services#ApplicationId|ApplicationId]], an u64 size, returns an output Event handle and an [[#IProgressAsyncResult]]. | |||
Official sw creates the TransferMemory with an user-specified buffer with permissions=0. [[qlaunch]] uses buffer size 0x100000. | |||
Official sw has an additional wrapper func which calls the original wrapper func, this uses value 0x7 for the u32. This is the same func used by [[qlaunch]]. | |||
==== | ==== IsAnyApplicationEntityInstalled ==== | ||
Takes | Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output u8 bool. | ||
==== CleanupUnavailableAddOnContents ==== | |||
Takes an input u64 [[NCM_services#ApplicationId|ApplicationId]], an [[Account_services#Uid|Uid]], no output. | |||
==== RequestMoveApplicationEntity ==== | |||
Takes an input TransferMemory handle, a type-0x5 input buffer containing an array of [[NCM_services#StorageId|StorageId]], a [[NCM_services#StorageId|StorageId]], an u32 bitfield of "nn::ns::KeepApplicationEntityFlagTag", an [[NCM_services#ApplicationId|ApplicationId]], an u64 tmem_size, returns an output Event handle and an [[#IProgressAsyncResult]]. | |||
= | The TransferMemory uses permissions=0. | ||
==== EstimateSizeToMove ==== | |||
Takes a type-0x5 input buffer containing an array of [[NCM_services#StorageId|StorageId]], a [[NCM_services#StorageId|StorageId]], an u32 bitfield of "nn::ns::KeepApplicationEntityFlagTag", an [[NCM_services#ApplicationId|ApplicationId]], returns an output s64. | |||
This calls a func also used by [[#RequestMoveApplicationEntity]], then calls another func. | |||
==== FormatSdCard ==== | |||
No input/output. | |||
==== NeedsSystemUpdateToFormatSdCard ==== | |||
No input, returns an output u8 bool. | |||
==== | ==== GetLastSdCardFormatUnexpectedResult ==== | ||
No input/output. | |||
==== GetApplicationView ==== | |||
Takes a type-0x6 output buffer containing an array of [[#ApplicationView]], a type-0x5 input buffer containing an array of u64 [[NCM_services#ApplicationId|ApplicationIds]], no output. | |||
==== GetApplicationViewDownloadErrorContext ==== | |||
Takes a type-0x16 output buffer containg an [[Error_Applet#ErrorContext|ErrorContext]], an u64 [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== | ==== GetApplicationViewWithPromotionInfo ==== | ||
Takes a type-0x5 input buffer containing an array of [[NCM_services# | Takes a type-0x6 output buffer containing an array of [[#ApplicationViewWithPromotionInfo]], a type-0x5 input buffer containing an array of u64 [[NCM_services#ApplicationId|ApplicationIds]], no output. | ||
==== IsPatchAutoDeletableApplication ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output bool. | |||
Compares the input ApplicationId with the value of [[System_Settings|system-setting]] <code>ns.application!auto_deletable_application_id_on_not_enough_space</code>, with the bool being set to the comparsion result. | |||
==== ListLastNotificationInfo ==== | |||
Takes a type-0x6 buffer containing an array with struct entry size 0x90-bytes. Returns 4-bytes of output. | |||
[19.0.0+] The struct size is now 0x98-bytes. | |||
==== ListNotificationTask ==== | |||
Takes a type-0x6 buffer containing an array with struct entry size 0xB0-bytes. Returns 4-bytes of output. | |||
[19.0.0+] The struct size is now 0xB8-bytes. | |||
==== RequestDownloadApplicationPrepurchasedRights ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | |||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
==== | ==== GetSystemDeliveryInfo ==== | ||
Takes | Takes a type-0x16 output buffer containing a [[#SystemDeliveryInfo]], no output. | ||
This generates a [[#SystemDeliveryInfo]] using the currently installed SystemUpdate meta title. | |||
==== SelectLatestSystemDeliveryInfo ==== | |||
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], a type-0x5 input buffer containing an array of [[#SystemDeliveryInfo]], a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], and returns an output s32. | |||
This determines the latest version (RequiredSystemVersion) from the input [[#ApplicationDeliveryInfo]] array (ApplicationDeliveryProtocolVersion and the HMAC are also validated), using value 0 if the array is empty. | |||
[[ | * [20.0.0+] The following code block now only runs when the SystemDeliveryInfoPlatform from the type-0x15 [[#SystemDeliveryInfo]] buffer matches the [[System_Settings|sys-setting]]. | ||
** It then loops through the [[#ApplicationDeliveryInfo]] array again: | |||
** This uses functionality which essentially uses [[Shared_Database_services|pl:s]] GetFunctionBlackListSystemVersionToAuthorize with the [[#ApplicationDeliveryInfo]] ApplicationId and ApplicationFunctionAuthorizationId=0x5 then parses the output, using cached data if available. The error is returned on failure. | |||
** tmp_version = out_u8 == 0 ? 0 : out_u32 + 0x10000; | |||
** Then the current latest-version value is updated with tmp_version, if tmp_version is higher. | |||
If this version value is less than a state field, the state field value is used instead (state field originates from [[System_Settings|system-setting]] <code>contents_delivery!required_system_version_to_deliver_application</code>). | |||
Then this selects the [[#SystemDeliveryInfo]] with the latest version from the input array. The output s32 is an index in that array for the selected entry, -1 if none found. | |||
During the above loop it first calls the [[#SystemDeliveryInfo]] validation func, returning the Result on failure. Then it runs additional validation, with the [[#SystemDeliveryInfo]] entry being ignored on failure: | |||
* The above latest-version value must be at least the version value from the type-0x15 [[#SystemDeliveryInfo]] buffer and the [[#SystemDeliveryInfo]] array entry. | |||
* When HasExFat is set in the type-0x15 [[#SystemDeliveryInfo]] buffer, it must be set in the [[#SystemDeliveryInfo]] array entry. | |||
* FirmwareVariationId in the type-0x15 [[#SystemDeliveryInfo]] buffer must not be 0xFF. | |||
* UpdatableFirmwareGroupId in the [[#SystemDeliveryInfo]] array entry must not be 0xFF. The value must be within bounds of the settings array ([[System_Settings|sys-settings]] <code>contents_delivery!updatable_firmware_group_string</code>). | |||
* PlatformRegion in the [[#SystemDeliveryInfo]] array entry and the type-0x15 [[#SystemDeliveryInfo]] buffer must match. | |||
* Lastly when the following is true, this indicates success: (settings_array[UpdatableFirmwareGroupId] >> {above FirmwareVariationId}) & 1. | |||
==== VerifyDeliveryProtocolVersion ==== | |||
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], no output. | |||
This validates the [[#SystemDeliveryInfo]] HMAC and the protocol-version fields. Then an error is returned when SystemUpdateVersion is less than a state field, otherwise 0 is returned (state field originates from [[System_Settings|system-setting]] <code>contents_delivery!required_system_version_to_deliver_application</code>). | |||
==== GetApplicationDeliveryInfo ==== | |||
Takes a type-0x6 output buffer containing an array of [[#ApplicationDeliveryInfo|ApplicationDeliveryInfo]], an input u32 bitmask <code>nn::ns::ApplicationDeliveryAttributeTag</code>, an [[NCM_services#ApplicationId|ApplicationId]], and returns an output s32 total_out. | |||
[11.0.0+] An error is thrown if LocalContentShare is not [[#IsLocalContentShareEnabled|enabled]]. | |||
An error is thrown if any bit is set in ApplicationDeliveryAttributeTag besides bit1, this must also be <=0x3. The output array-count must be at least 1: only 1 entry will be written to this array (hence on success total_out will also only be 1 on success). | |||
[7.0.0+] An error is thrown if the state ref-count for [[#GetRequestServerStopper|RequestServerStopper]] is zero. [7.0.0-7.0.1] The func which checks this would also return success when a field prior to the previously mentioned field is 0 (checked before the ref-count). | |||
An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task. | |||
HasApplicationRecord is called with the input [[NCM_services#ApplicationId|ApplicationId]], an error is returned if the record isn't found. | |||
This | [[#ApplicationDeliveryInfo|RequiredApplicationVersion]] is initially set to the output version from [[Shared_Database_services|avm]] GetLaunchRequiredVersion. Later when ContentMetaType == Application etc, it calls a func. This func uses [[NCM_services|ncm]] IContentMetaDatabase GetRequiredApplicationVersion. If the output version is higher than the [[#ApplicationDeliveryInfo|RequiredApplicationVersion]] field then the output version is written here. Immediately aferwards, it also checks whether the bit for Compacted is set from [[NCM_services|ncm]] IContentMetaDatabase GetAttributes, clearing [[#ApplicationDeliveryInfo|ApplicationVersion]] if the attribute is set. | ||
[20.0.0+] [[#ApplicationDeliveryInfo|ApplicationDeliveryInfo]] ContentMetaPlatform and ProperProgramExists are now set using data from [[NCM_services|ncm]]. | |||
[20.0.0+] [[Shared_Database_services|pl:s]] GetFunctionBlackListSystemVersionToAuthorize with ApplicationFunctionAuthorizationId=0x5 is now used, the output version is written to [[#ApplicationDeliveryInfo|RequiredSystemVersion]] when it's higher than the value previously written here. | |||
[20.0.0+] [[Shared_Database_services|pl:s]] GetRequiredApplicationVersion with ApplicationFunctionAuthorizationId=0x5 is now used, the output version is written to [[#ApplicationDeliveryInfo|RequiredApplicationVersion]] when it's higher than the value previously written here. | |||
==== | ==== HasAllContentsToDeliver ==== | ||
Takes an | Takes a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], returns an output u8 bool. | ||
The array-count must match 1. | |||
[ | This uses the same LocalContentShare check as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | ||
After validating the [[#ApplicationDeliveryInfo]], the output bool is set to [[#ApplicationDeliveryInfo|ApplicationDeliveryAttributeTag]] & 0x10000002 != 0x2, then this returns 0. | |||
==== CompareApplicationDeliveryInfo ==== | |||
Takes two type-0x5 input buffers containing an array of [[#ApplicationDeliveryInfo]], returns an output s32. | |||
This uses the same LocalContentShare check as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | |||
The array-count for both buffers must be 1, otherwise an error is returned. | |||
Both [[#ApplicationDeliveryInfo]] are validated, then the application-version in the first/second buffer are compared. The output s32 is set to the comparison result: -1 for less than, 0 for equal, and 1 for higher than. | |||
==== CanDeliverApplication ==== | |||
Takes two type-0x5 input buffers containing an array of [[#ApplicationDeliveryInfo]], returns an output u8 bool. | |||
The array-count for the second buffer must be 1, otherwise an error is returned. | |||
This uses the same LocalContentShare check as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | |||
= | The second [[#ApplicationDeliveryInfo]] buffer is validated. An error is thrown when [[#ApplicationDeliveryInfo|ApplicationDeliveryAttributeTag]] (second buffer) & 0x3 != 0x2, likewise when bit28 is clear in this field (bitmask 0x10000000). | ||
The | The array-count for the first buffer must be <=1, otherwise an error is returned. If the array-count for the first buffer is 0, this will return 0 with the output bool set to 0. The first [[#ApplicationDeliveryInfo]] buffer is validated. An error is thrown when [[#ApplicationDeliveryInfo|ApplicationDeliveryAttributeTag]] (first buffer) bit1 is clear or bit0 set. An error is thrown when [[#ApplicationDeliveryInfo|ApplicationDeliveryAttributeTag]] (second buffer) bit1 is clear. | ||
When [[#ApplicationDeliveryInfo|RequiredApplicationVersion]] (first or second buffer) is higher than [[#ApplicationDeliveryInfo|ApplicationVersion]] (second buffer), this will return 0 with the output bool set to 0. | |||
When [[#ApplicationDeliveryInfo|ApplicationDeliveryAttributeTag]] (first buffer) bit28 is set (bitmask 0x10000000): | |||
* When [[#ApplicationDeliveryInfo|ApplicationVersion]] (first buffer) >= [[#ApplicationDeliveryInfo|ApplicationVersion]] (second buffer), write 0 to the output bool, otherwise write 1. Then return 0. | |||
Otherwise when the above bit28 is clear: | |||
* When [[#ApplicationDeliveryInfo|ApplicationVersion]] (first buffer) > [[#ApplicationDeliveryInfo|ApplicationVersion]] (second buffer), write 0 to the output bool, otherwise write 1. Then return 0. | |||
==== ListContentMetaKeyToDeliverApplication ==== | |||
Takes a type-0x6 output buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], a s32, and returns an output s32 total_out. | |||
This uses the same LocalContentShare check as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | |||
The array-count for ContentMetaKey must be at least 1, and for ApplicationDeliveryInfo it must match 1. | |||
The [[#ApplicationDeliveryInfo|ApplicationDeliveryInfo]] is validated (ApplicationDeliveryProtocolVersion/HMAC). An error is thrown when [[#ApplicationDeliveryInfo|ApplicationDeliveryAttributeTag]] bit0 is set. | |||
[ | |||
This uses the same ref-count check as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | |||
[ | |||
An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task. | |||
This will only return 1 ContentMetaKey entry. This will not output the entry when the input s32 is larger than 0, or when [[#ApplicationDeliveryInfo|ApplicationDeliveryAttributeTag]] bit1 is clear. | |||
==== NeedsSystemUpdateToDeliverApplication ==== | |||
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], and returns an output u8 bool. | |||
This uses the same LocalContentShare check as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | |||
The [[#SystemDeliveryInfo]] is validated (validation for ApplicationDeliveryProtocolVersion is enabled). | |||
The array-count must match 1. | |||
The [[#ApplicationDeliveryInfo]] is validated (ApplicationDeliveryProtocolVersion/HMAC). | |||
This runs | This then runs functionality similar to [[#SelectLatestSystemDeliveryInfo]]: | ||
* [20.0.0+] The following code block now only runs when the SystemDeliveryInfoPlatform from the input [[#SystemDeliveryInfo]] matches the [[System_Settings|sys-setting]]. | |||
* Uses the same functionality as [[#SelectLatestSystemDeliveryInfo]] for GetFunctionBlackListSystemVersionToAuthorize, returning the Result on failure. | |||
* The output bool is set to: out_u8!=0 && out_u32 >= [[#SystemDeliveryInfo]] SystemUpdateVersion (only the upper 16bits are used from the SystemUpdateVersion). | |||
Otherwise when the output bool is still false, this sets the output bool by comparing system-version fields in the [[#SystemDeliveryInfo]]/[[#ApplicationDeliveryInfo]] and with a state field (state field originates from [[System_Settings|system-setting]] <code>contents_delivery!required_system_version_to_deliver_application</code>). | |||
==== | ==== EstimateRequiredSize ==== | ||
Takes a type-0x5 input buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], returns an output s64. | |||
When the array-count is less than 1, this will return 0 with the s64 set to 0. | |||
==== | ==== RequestReceiveApplication ==== | ||
Takes a type-0x5 input buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], a [[NCM_services#StorageId|StorageId]], an u16 port, an u32 Ipv4Address, an [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | |||
[[qlaunch]] uses value Any for the StorageId, and value 55556 for the port. | |||
This uses the same LocalContentShare and ref-count checks as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | |||
An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task. | |||
HasApplicationRecord is called with the input [[NCM_services#ApplicationId|ApplicationId]], an error is returned if the record isn't found. | |||
This loops through the input [[NCM_services#ContentMetaKey|ContentMetaKey]] array, throwing an error if the [[NCM_services#ContentMetaType|ContentMetaType]] doesn't match Patch. The input array is copied into state which is used later by the thread for [[NIM_services|nim]] CreateLocalCommunicationReceiveApplicationTask, max entries is 0x12. | |||
This does various setup then creates the [[#IAsyncResult]] + the async thread which handles the [[#IAsyncResult]] operation. Then the thread does: | |||
* Calls a func which does: | |||
** Throws an error if a state flag is set. | |||
** Uses [[NIM_services|nim]] CreateLocalCommunicationReceiveApplicationTask, returning the Result on failure. | |||
** Uses [[NIM_services|nim]] RequestLocalCommunicationReceiveApplicationTaskRun, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result. | |||
*** When the Result from Get is an error, a func is called for filling in the [[#IAsyncResult|IAsyncResult]] ErrorContext with Type4. | |||
** Handles cleanup and returns. | |||
* On success, this loads various data which is then used for saving a SystemPlayReport when the cached [[System_Settings|system-setting]] "systemreport!enabled" is set. | |||
** The EventId is "receive_app_contents" with ApplicationId <NS ProgramId>. | |||
** This report has the following fields: | |||
*** "ApplicationId" | |||
*** "DestinationVersion" | |||
*** "SourceVersion" | |||
*** "HasApplicationEntity" | |||
*** "HasPatchEntity" | |||
*** "ApplicationStorageId" | |||
*** "PatchStorageId" | |||
*** "Size" | |||
*** "ThroughputKBps" | |||
==== | ==== CommitReceiveApplication ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
This uses the same LocalContentShare and ref-count checks as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | |||
An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task. | |||
=== | ==== GetReceiveApplicationProgress ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[#ReceiveApplicationProgress]]. | |||
This | This uses the same ref-count check as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | ||
An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task. | |||
Uses [[NIM_services|nim]] ListApplicationLocalCommunicationReceiveApplicationTask, throwing an error if no task is returned. Then [[NIM_services|nim]] GetLocalCommunicationReceiveApplicationTaskInfo is used, returning the error from there on failure. Lastly, this writes the 0x10-bytes from output+8 from the latter cmd to the output [[#ReceiveApplicationProgress]], and returns 0. | |||
=== | ==== RequestSendApplication ==== | ||
This | Takes a type-0x5 input buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], an u16 port, an u32 Ipv4Address, an [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | ||
[[qlaunch]] uses value 55556 for the port. | |||
This uses the same LocalContentShare and ref-count checks as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | |||
An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task. | |||
This does various setup and loops through the input ContentMetaKey array for initializing the array passed to the nim cmd during the async task. This loop does the following: | |||
* Throws an error if the [[NCM_services#ContentMetaType|ContentMetaType]] in the ContentMetaKey doesn't match Patch. | |||
* Calls a func with the ContentMetaKey and the ApplicationId, throwing an error if the output value is 0. | |||
* Calls a func with the ContentMetaKey for getting the StorageId. This essentially loops through each valid ncm [[NCM_services|IContentMetaDatabase]] using cmd [[NCM_services|Has]] with the input ContentMetaKey, returning the relevant StorageId when found. | |||
* The ContentMetaKey and the StorageId are copied into a tmp struct. | |||
* if (ContentMetaType==Patch && StorageId==GameCard) { <call a func etc> } | |||
* Copies the above tmp struct into the async task state array. | |||
This then creates the [[#IAsyncResult]] + the async thread which handles the [[#IAsyncResult]] operation. Then the thread does: | |||
* | * Calls a func which does: | ||
** Throws an error if a state flag is set. | |||
** Uses [[NIM_services|nim]] CreateLocalCommunicationSendApplicationTask, returning the Result on failure. | |||
** Uses [[NIM_services|nim]] RequestLocalCommunicationSendApplicationTaskRun, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result. | |||
*** When the Result from Get is an error, a func is called for filling in the [[#IAsyncResult|IAsyncResult]] ErrorContext with Type4. | |||
** Handles cleanup and returns. | |||
* On success, this loads various data which is then used for saving a SystemPlayReport when the cached [[System_Settings|system-setting]] "systemreport!enabled" is set. | |||
** The EventId is "send_app_contents" with ApplicationId <NS ProgramId>. | |||
** This report has the following fields: | |||
*** "ApplicationId" | |||
*** "Version" | |||
*** "ApplicationStorageId" | |||
*** "PatchStorageId" | |||
==== GetSendApplicationProgress ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[#SendApplicationProgress]]. | |||
Same as [[#GetReceiveApplicationProgress]] except this is the Send version, and uses [[NIM_services|nim]] ListApplicationLocalCommunicationSendApplicationTask/GetLocalCommunicationSendApplicationTaskInfo instead. The data copied to output is also swapped: u64 nim_out+0x8 is copied to out+0x8, and u64 nim_out+0x10 is copied to out+0x0. | |||
=== | ==== CompareSystemDeliveryInfo ==== | ||
Takes two type-0x15 input buffers containing a [[#SystemDeliveryInfo]], returns an output s32. | |||
This is essentially the same as [[#CompareApplicationDeliveryInfo]], except this compares the [[#SystemDeliveryInfo]] SystemUpdate version. | |||
==== ListNotCommittedContentMeta ==== | |||
| | Takes a type-0x6 output buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], a s32, an [[NCM_services#ApplicationId|ApplicationId]], returns an output s32 total_out. | ||
| | |||
This uses the same ref-count check as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | |||
An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task. | |||
| | |||
==== RecoverDownloadTask ==== | |||
Takes a type-0x5 input buffer containing an array of {unknown} and an input u64, no output. | |||
| | This uses the same LocalContentShare and ref-count checks as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | ||
==== GetApplicationDeliveryInfoHash ==== | |||
Takes a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], returns an output 0x20-byte SHA256 hash. | |||
This uses the same LocalContentShare check as [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]]. | |||
This extracts data from the input array for hashing with SHA256, with validation being done when handling each entry (ApplicationDeliveryProtocolVersion/HMAC). | |||
The 0x14-bytes from [[#ApplicationDeliveryInfo|ApplicationDeliveryInfo]]+0x8 are copied into a 0x18-byte struct entry in an array buffer, with the last 4-bytes being cleared. Then each 0x18-byte struct entry is hashed. | |||
==== Cmd2019 ==== | |||
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], returns an output u8 bool. | |||
This is essentially an extended version of [[#CanDeliverApplication|CanDeliverApplication]], with additional functionality for determining platform compatibility. | |||
This calls a func for validating the [[#SystemDeliveryInfo]] from the type-0x15 buffer, returning the Result on failure. | |||
Then [[#CanDeliverApplication|CanDeliverApplication]] is called with the output bool and the input arrays, returning the Result on failure. | |||
| | |||
If the output bool is set after calling the above, it then calls a func with the output bool, the second [[#ApplicationDeliveryInfo]] buffer, and the [[#SystemDeliveryInfo]] from the type-0x15 buffer. This func does the following: | |||
* When the SystemDeliveryInfoPlatform from the input [[#SystemDeliveryInfo]] matches the [[System_Settings|sys-setting]], it does the following: | |||
| | ** Uses [[Shared_Database_services|pl:s]] RequestApplicationFunctionAuthorizationByApplicationId with the [[#ApplicationDeliveryInfo]] ApplicationId/ApplicationVersion and ApplicationFunctionAuthorizationId=0x5, handling the Result on failure. | ||
* When the platform fields from the input [[#SystemDeliveryInfo]]/[[#ApplicationDeliveryInfo]] match, write 1 to the output bool and return 0. Otherwise: | |||
| | ** When the [[#SystemDeliveryInfo]] SystemDeliveryInfoPlatform is 0x1 (Ounce): *output = [[#ApplicationDeliveryInfo|ContentMetaPlatform]] == 0 && [[#ApplicationDeliveryInfo|ProperProgramExists]] == 0; | ||
** When the [[#SystemDeliveryInfo]] SystemDeliveryInfoPlatform is 0x0 (NX): write 0 to the output bool and return 0. | |||
** Otherwise, Abort. | |||
| | |||
| | |||
==== | ==== GetApplicationRightsOnClient ==== | ||
Takes a type-0x6 output buffer containing an array of [[#ApplicationRightsOnClient]], an input u32 flags, an [[NCM_services#ApplicationId|ApplicationId]], an [[Account_services#Uid|Uid]], returns 4-bytes of output for total output entries. | |||
Official sw has at least two wrappers which use this cmd: one with an all-zero Uid, one with an user-specified Uid. With both of these, the passed flags are hard-coded to value 0x3. | |||
For the output array count, [[qlaunch]] uses value 3. | |||
==== GetApplicationTerminateResult ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output u32 Result. | |||
==== GetRightsEnvironmentHandleForApplication ==== | |||
No input, returns a total of 8-bytes of output. | |||
| | [9.0.0+] Now takes a total of 8-bytes of input, returns a total of 8-bytes of output. | ||
==== | ==== RequestNoDownloadRightsErrorResolution ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[# | Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncValue]]. | ||
The data that can be read from the [[#IAsyncValue]] is [[#NoDownloadRightsErrorResolution]]. | |||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
==== | ==== RequestResolveNoDownloadRightsError ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncValue]]. | |||
The data that can be read from the [[#IAsyncValue]] is [[#NoDownloadRightsErrorResolution]]. | |||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
==== GetPromotionInfo ==== | |||
Takes a type-0x6 output buffer containing an array of [[#PromotionInfo]], a type-0x5 input buffer containing an array of u64 [[NCM_services#ApplicationId|ApplicationIds]], a type-0x5 input buffer containing an array of [[Account_services#Uid|Uids]], no output. | |||
|- | |||
| | |||
Official sw uses hard-coded value 1 for the count with each of these arrays. | |||
==== ListPromotionInfo ==== | |||
[20.0.0+] The struct size for the output buffer array is now 0x28-bytes instead of 0x20-bytes. | |||
==== | ==== ImportPromotionJsonForDebug ==== | ||
Takes a type-0x5 input buffer, no output. | |||
==== | The output from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. | ||
==== ClearPromotionInfoForDebug ==== | |||
No input/output. | No input/output. | ||
==== | The output from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned. | ||
This just clears 0xC-bytes in state. | |||
==== CreateApplicationResource ==== | |||
Takes an input [[#ApplicationResourceType]]. Returns an [[#IApplicationResource]]. | |||
==== GetApplicationResource ==== | |||
Takes an input u64 ProcessId and an input [[#ApplicationResourceType]]. Returns an [[#IApplicationResource]]. | |||
==== LaunchMicroApplication ==== | |||
[18.0.0+] Now takes a total of 0x50 bytes of input. | |||
[19.0.0+] Now takes a total of 0x80 bytes of input. | |||
==== | ==== CreateApplicationInstance ==== | ||
[18.0.0+] Now takes a total of 0x50 bytes of input. | |||
[19.0.0+] Now takes a total of 0x80 bytes of input. | |||
==== | ==== RegisterDeviceLockKey ==== | ||
Takes a type-0x5 input buffer containing an InArray of u8, no output. | |||
User-processes expose this with two funcs: one which uses an user-specified u8 array directly, while the other uses [[HID_services#NpadButtonSet|NpadButton]]. | |||
This does SHA256 hashing, etc. | |||
==== | ==== UnregisterDeviceLockKey ==== | ||
No input/output. | No input/output. | ||
Runs code identical to [[#RegisterDeviceLockKey]], except the passed buffer/size are 0. | |||
==== VerifyDeviceLockKey ==== | |||
Takes a type-0x5 input buffer containing an InArray of u8, no output. | |||
User-processes expose this with two funcs: one which uses an user-specified u8 array directly, while the other uses [[HID_services#NpadButtonSet|NpadButton]]. | |||
This runs hashing similar to [[#RegisterDeviceLockKey]], with the calculated hash being verified with the one from state. | |||
This | |||
==== HideApplicationIcon ==== | |||
No input/output. | |||
==== ShowApplicationIcon ==== | |||
No input/output. | |||
=== | ==== HideApplicationTitle ==== | ||
No input/output. | |||
==== ShowApplicationTitle ==== | |||
No input/output. | |||
==== EnableGameCard ==== | |||
No input/output. | |||
==== DisableGameCard ==== | |||
No input/output. | |||
==== EnableLocalContentShare ==== | |||
No input/output. | |||
==== DisableLocalContentShare ==== | |||
No input/output. | |||
==== IsApplicationIconHidden ==== | |||
No input, returns an output bool. | |||
==== IsApplicationTitleHidden ==== | |||
No input, returns an output bool. | |||
==== IsGameCardEnabled ==== | |||
No input, returns an output bool. | |||
==== IsLocalContentShareEnabled ==== | |||
No input, returns an output bool. | |||
Various Deliver cmds now run essentially the same code as IsLocalContentShareEnabled, with an error being returned when it's not enabled. | |||
==== Cmd4026 ==== | |||
Takes an input u64, returns an [[#IHostSession|IHostSession]]. | |||
The input u64 must match a state field. | |||
This initializes [[LDN_services|ldn]] etc, and creates a network. | |||
==== Cmd4027 ==== | |||
Takes an input u64, returns an [[#IClientSession|IClientSession]]. | |||
The input u64 must match a state field. | |||
This initializes [[LDN_services|ldn]] etc. | |||
=== IGameCardStopper === | |||
This is "nn::ns::detail::IGameCardStopper". | |||
This interface has no commands. | |||
=== IRequestServerStopper === | |||
This is "nn::ns::detail::IRequestServerStopper". | |||
This interface has no commands. | |||
=== IProgressMonitorForDeleteUserSaveDataAll === | |||
This is "nn::ns::detail::IProgressMonitorForDeleteUserSaveDataAll". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || GetSystemEvent | ||
|- | |- | ||
| | | 1 || IsFinished | ||
|- | |- | ||
| | | 2 || GetResult | ||
|- | |- | ||
| | | 10 || GetProgress | ||
|} | |||
| | |||
When closing the object, official sw uses IsFinished first, asserting when the output bool is false. | |||
* GetSystemEvent: No input, returns an output Event handle. [[qlaunch]] doesn't use this. | |||
* IsFinished: No input, returns an output u8 bool. | |||
* GetResult: No input/output. | |||
* GetProgress: No input, returns an output [[#ProgressForDeleteUserSaveDataAll]]. Official sw writes this struct directly to object state. | |||
=== IProgressAsyncResult === | |||
This is "nn::ns::detail::IProgressAsyncResult". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || Get | ||
|- | |- | ||
| | | 1 || Cancel | ||
|- | |- | ||
| | | 2 || GetProgress | ||
|- | |- | ||
| | | 3 || GetDetailResult | ||
|- | |- | ||
| | | 4 || [4.0.0+] GetErrorContext | ||
|} | |||
=== IHostSession === | |||
This is "nn::ns::vphym::detail::IHostSession". | |||
This was added with [20.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || | ||
|- | |- | ||
| | | 1 || | ||
|- | |- | ||
| | | 2 || | ||
|} | |} | ||
==== | ==== Cmd0 ==== | ||
No input, returns an output Event handle and an [[#IAsyncValue]]. | |||
The async task does the following: | |||
* This waits for a client to connect. | |||
* The [[LDN_services|NodeInfo]] UserName is converted into two u64s, which are used to locate a state entry with matching values. | |||
* The client [[LDN_services|NodeInfo]] Ipv4Address is copied into state. | |||
* Then a ptr to the above located state entry is also written into state. | |||
==== | ==== Cmd1 ==== | ||
No input, returns an output Event handle and an [[#IAsyncResult]]. | |||
The async task uses [[NIM_services|nim]] cmd2018 or cmd2027, depending on a state field. Once finished when a state flag is set, [[LDN_services|ldn]] is finalized and that state flag is cleared. | |||
==== | ==== Cmd2 ==== | ||
No input, returns an output Event handle and an [[#IAsyncResult]]. | |||
No input | |||
The async task uses [[NIM_sevices|nim]] cmd2024. | |||
=== | === IClientSession === | ||
This is "nn::ns::detail:: | This is "nn::ns::vphym::detail::IClientSession". | ||
This was added with [ | This was added with [20.0.0+]. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,016: | Line 2,188: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || | ||
|- | |- | ||
| | | 1 || | ||
|- | |- | ||
| | | 2 || | ||
|} | |} | ||
=== | ==== Cmd0 ==== | ||
This is "nn::ns::detail:: | No input, returns an output Event handle and an [[#IAsyncValue]]. | ||
The async task does the following: | |||
* Uses [[LDN_services|ldn]] Scan. | |||
* After a [[LDN_services|NodeInfo]] is found with a matching UserName, the Ipv4Address for it is copied into state. | |||
* If a timeout didn't occur and a valid NodeInfo was found, it proceeds with connecting to the network. | |||
==== Cmd1 ==== | |||
No input, returns an output Event handle and an [[#IAsyncResult]]. | |||
The async task uses [[NIM_services|nim]] cmd2019 or cmd2028, depending on a state field. Once finished when a state flag is set, [[LDN_services|ldn]] is finalized and that state flag is cleared. | |||
==== Cmd2 ==== | |||
No input, returns an output Event handle and an [[#IAsyncResult]]. | |||
This is identical to [[#IHostSession|IHostSession]] Cmd2. | |||
=== IApplicationVersionInterface === | |||
This is "nn::ns::detail::IApplicationVersionInterface". | |||
This was added with [4.0.0+]. | This was added with [4.0.0+]. | ||
Line 2,034: | Line 2,222: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || GetLaunchRequiredVersion | ||
|- | |||
| 1 || UpgradeLaunchRequiredVersion | |||
|- | |||
| 35 || UpdateVersionList | |||
|- | |||
| 36 || PushLaunchVersion | |||
|- | |||
| 37 || ListRequiredVersion | |||
|- | |||
| 800 || RequestVersionList | |||
|- | |- | ||
| | | 801 || ListVersionList | ||
|- | |- | ||
| | | 802 || [[#RequestVersionListData]] | ||
|- | |- | ||
| | | 900 || [12.0.0+] ImportAutoUpdatePolicyJsonForDebug | ||
|- | |- | ||
| | | 901 || [12.0.0+] ListDefaultAutoUpdatePolicy | ||
|- | |- | ||
| | | 902 || [12.0.0+] ListAutoUpdatePolicyForSpecificApplication | ||
|- | |- | ||
| | | 1000 || PerformAutoUpdate | ||
|- | |- | ||
| | | 1001 || [11.0.0+] ListAutoUpdateSchedule | ||
|} | |} | ||
==== | ==== RequestVersionListData ==== | ||
No input, returns an output Event handle and an [[#IAsyncValue]]. | |||
The data that can be read from the [[#IAsyncValue]] is [[#VersionListData]]. | |||
=== | === IContentManagementInterface === | ||
This is "nn::ns::detail::IContentManagementInterface". | |||
This is "nn::ns::detail:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,083: | Line 2,261: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| | | 11 || [[#CalculateApplicationOccupiedSize]] | ||
|- | |- | ||
| | | 43 || [[#CheckSdCardMountStatus]] | ||
|- | |- | ||
| | | 47 || [[#GetTotalSpaceSize]] | ||
|- | |- | ||
| | | 48 || [[#GetFreeSpaceSize]] | ||
|- | |- | ||
| | | 58 || [20.1.0+] | ||
|- | |- | ||
| | | 71 || [20.1.0+] | ||
|- | |- | ||
| | | 600 || [[#CountApplicationContentMeta]] | ||
|- | |||
| 601 || [[#ListApplicationContentMetaStatus]] | |||
|- | |||
| 605 || [[#ListApplicationContentMetaStatusWithRightsCheck]] | |||
|- | |||
| 607 || [[#IsAnyApplicationRunning]] | |||
|} | |} | ||
==== | ==== CalculateApplicationOccupiedSize ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[#ApplicationOccupiedSize]]. | |||
==== CheckSdCardMountStatus ==== | |||
==== | |||
No input/output. | No input/output. | ||
==== | ==== CountApplicationContentMeta ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output s32. | |||
==== | ==== ListApplicationContentMetaStatusWithRightsCheck ==== | ||
Same input/output as [[#ListApplicationContentMetaStatus]]. | |||
==== | ==== IsAnyApplicationRunning ==== | ||
No input | No input, returns an output u8 bool. | ||
=== | === IDocumentInterface === | ||
This is "nn::ns::detail::IDocumentInterface". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 21 || GetApplicationContentPath | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| 23 || ResolveApplicationContentPath | |||
|- | |- | ||
| | | 92 || [5.0.0+] GetRunningApplicationProgramId | ||
|- | |- | ||
| | | 100 || [S2] | ||
|- | |- | ||
| | | 101 || [S2] | ||
|- | |- | ||
| | | 2524 || [19.0.0+] | ||
|} | |} | ||
=== | ==== Cmd100 ==== | ||
This is | Takes a type-0x16 output buffer containing a 0x300-byte struct, an input u8, an u64. Returns two output u8s. | ||
==== Cmd101 ==== | |||
Takes a type-0x16 output buffer containing a 0x300-byte struct, an input u8, an u64. Returns an output u8, an u8 [[Filesystem_services|ContentAttributes]], and a [[NCM_services#ProgramId|ProgramId]]. | |||
This is similar to Cmd2524. On [S2] this is used instead of Cmd2524. | |||
==== Cmd2524 ==== | |||
Takes a type-0x16 output buffer containing a 0x300-byte struct, an input u8, an u64. Returns an output u8 [[Filesystem_services|ContentAttributes]] and a [[NCM_services#ProgramId|ProgramId]]. | |||
The user-process uses the output from this as the input for [[Filesystem_services|OpenFileSystemWithId]] (out-buffer is used as the [[Filesystem_services|FspPath]]). | |||
|- | |||
| | |||
= | === IDownloadTaskInterface === | ||
This is "nn::ns::detail:: | This is "nn::ns::detail::IDownloadTaskInterface". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,166: | Line 2,337: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| | | 701 || [[#ClearTaskStatusList]] | ||
|- | |- | ||
| | | 702 || [[#RequestDownloadTaskList]] | ||
|- | |- | ||
| | | 703 || [[#RequestEnsureDownloadTask]] | ||
|- | |- | ||
| | | 704 || [[#ListDownloadTaskStatus]] | ||
|- | |||
| 705 || [[#RequestDownloadTaskListData]] | |||
|- | |||
| 706 || [4.0.0+] [[#TryCommitCurrentApplicationDownloadTask]] | |||
|- | |||
| 707 || [4.0.0+] [[#EnableAutoCommit]] | |||
|- | |- | ||
| | | 708 || [4.0.0+] [[#DisableAutoCommit]] | ||
|- | |||
| 709 || [4.0.0+] [[#TriggerDynamicCommitEvent]] | |||
|- | |- | ||
| | | 710 || [20.0.0+] | ||
|} | |} | ||
== | ==== ClearTaskStatusList ==== | ||
No input | No input/output. | ||
==== RequestDownloadTaskList ==== | |||
No input/output. | |||
==== RequestEnsureDownloadTask ==== | |||
No input, returns an output Event handle and an [[#IAsyncResult]]. | |||
== | ==== ListDownloadTaskStatus ==== | ||
Takes an | Takes a type-0x6 output buffer containing an array of [[#DownloadTaskStatus]], returns an output s32 total_out. | ||
A maximum of 0x100 tasks can be stored in state. | |||
==== TryCommitCurrentApplicationDownloadTask ==== | |||
No input/output. | |||
==== EnableAutoCommit ==== | |||
No input/output. | |||
== | ==== DisableAutoCommit ==== | ||
No input | No input/output. | ||
= | ==== TriggerDynamicCommitEvent ==== | ||
No input/output. | |||
{| class="wikitable" border="1" | === IReadOnlyApplicationRecordInterface === | ||
This is "nn::ns::detail::IReadOnlyApplicationRecordInterface". | |||
This was added with [5.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name || Notes | ||
|- | |- | ||
| | | 0 || HasApplicationRecord || Same as [[#IApplicationManagerInterface]] cmd 910 | ||
|- | |- | ||
| | | 1 || [10.0.0+] NotifyApplicationFailure || | ||
|- | |- | ||
| | | 2 || [10.0.0+] IsDataCorruptedResult || | ||
|- | |- | ||
| | | 3 || [20.0.0+] [[#ListApplicationRecord|ListApplicationRecord]] || | ||
|} | |||
=== IReadOnlyApplicationControlDataInterface === | |||
This is "nn::ns::detail::IReadOnlyApplicationControlDataInterface". | |||
This was added with [5.1.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name || Notes | ||
|- | |- | ||
| | | 0 || [[#GetApplicationControlData]] || Same as [[#IApplicationManagerInterface]] cmd 400 | ||
|- | |- | ||
| | | 1 || [[#GetApplicationDesiredLanguage]] || Same as [[#IApplicationManagerInterface]] cmd 55 | ||
|- | |- | ||
| | | 2 || ConvertApplicationLanguageToLanguageCode || Same as [[#IApplicationManagerInterface]] cmd 59 | ||
|- | |- | ||
| | | 3 || [[#ConvertLanguageCodeToApplicationLanguage]] || Same as [[#IApplicationManagerInterface]] cmd 60 | ||
|- | |- | ||
| | | 4 || [9.0.0+] SelectApplicationDesiredLanguage || | ||
|- | |- | ||
| | | 5 || [19.0.0+] || | ||
|- | |- | ||
| | | 6 || [19.0.0+] || | ||
|- | |- | ||
| | | 7 || [20.0.0+] || | ||
|- | |- | ||
| | | 8 || [20.0.0+] || | ||
|- | |- | ||
| | | 9 || [20.0.0+] || | ||
|- | |||
| 10 || [20.0.0+] || | |||
|- | |||
| 11 || [20.0.0+] || | |||
|- | |||
| 12 || [20.0.0+] || | |||
|- | |||
| 13 || [20.0.0+] || | |||
|- | |||
| 14 || [20.0.0+] || | |||
|- | |||
| 15 || [20.0.0+] || | |||
|- | |||
| 16 || [20.0.0+] || | |||
|- | |- | ||
| | | 17 || [20.1.0+] || | ||
|} | |} | ||
== | === IDynamicRightsInterface === | ||
This is "nn::ns::detail::IDynamicRightsInterface". | |||
This | This was added with [6.0.0+]. | ||
== | {| class="wikitable" border="1" | ||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#RequestApplicationRightsOnServer]] | |||
|- | |||
| 1 || [[#RequestAssignRights]] | |||
|- | |||
| 4 || [[#DeprecatedRequestAssignRightsToResume]] | |||
|- | |||
| 5 || [[#VerifyActivatedRightsOwners]] | |||
|- | |||
| 6 || [[#DeprecatedGetApplicationRightsStatus]] | |||
|- | |||
| 7 || [[#RequestPrefetchForDynamicRights]] | |||
|- | |||
| 8 || [[#GetDynamicRightsState]] | |||
|- | |||
| 9 || [7.0.0+] [[#RequestApplicationRightsOnServerToResume]] | |||
|- | |||
| 10 || [7.0.0+] [[#RequestAssignRightsToResume]] | |||
|- | |||
| 11 || [7.0.0+] [[#GetActivatedRightsUsers]] | |||
|- | |||
| 12 || [8.0.0+] [[#GetApplicationRightsStatus]] | |||
|- | |||
| 13 || [8.0.0+] [[#GetRunningApplicationStatus]] | |||
|- | |||
| 14 || [10.0.0-15.0.1] SelectApplicationLicense | |||
|- | |||
| 15 || [12.0.0+] [[#RequestContentsAuthorizationToken]] | |||
|- | |||
| 16 || [13.0.0+] QualifyUser | |||
|- | |||
| 17 || [13.0.0+] QualifyUserWithProcessId | |||
|- | |||
| 18 || [13.0.0+] NotifyApplicationRightsCheckStart | |||
|- | |||
| 19 || [13.0.0+] UpdateUserList | |||
|- | |||
| 20 || [13.0.0+] IsRightsLostUser | |||
|- | |||
| 21 || [13.1.0+] SetRequiredAddOnContentsOnContentsAvailabilityTransition | |||
|- | |||
| 22 || [14.0.0+] GetLimitedApplicationLicense | |||
|- | |||
| 23 || [14.0.0+] GetLimitedApplicationLicenseUpgradableEvent | |||
|- | |||
| 24 || [14.0.0+] NotifyLimitedApplicationLicenseUpgradableEventForDebug | |||
|- | |||
| 25 || [14.0.0+] RequestProceedDynamicRightsState | |||
|- | |||
| 26 || [18.0.0+] HasAccountRestrictedRightsInRunningApplications | |||
|- | |||
| 27 || [20.0.0+] | |||
|- | |||
| 28 || [20.0.0+] | |||
|} | |||
== | ==== RequestApplicationRightsOnServer ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], an [[Account_services#Uid|Uid]] and an u32. Returns an output Event handle and an [[#IAsyncValue]]. | |||
==== RequestAssignRights ==== | |||
Takes a type-0x5 input buffer containing an array of "nn::ns::ApplicationRightsOnServer". Returns an output Event handle and an [[#IAsyncResult]]. | |||
== | ==== DeprecatedRequestAssignRightsToResume ==== | ||
Takes an input u64 "nn::ns::RightsEnvironmentHandle" and an [[Account_services#Uid|Uid]]. Returns an output Event handle and an [[#IAsyncResult]]. | |||
==== VerifyActivatedRightsOwners ==== | |||
Takes an input u64 "nn::ns::RightsEnvironmentHandle". No output. | |||
==== DeprecatedGetApplicationRightsStatus ==== | |||
Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns a bool "nn::ns::ApplicationRightsStatus". | |||
==== RequestPrefetchForDynamicRights ==== | |||
Takes an input [[Account_services#Uid|Uid]]. Returns an output Event handle and an [[#IAsyncResult]]. | |||
== | ==== GetDynamicRightsState ==== | ||
No input | No input. Returns a bool "nn::ns::DynamicRightsState". | ||
==== RequestApplicationRightsOnServerToResume ==== | |||
Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns an output Event handle and an [[#IAsyncValue]]. | |||
==== RequestAssignRightsToResume ==== | |||
Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns an output Event handle and an [[#IAsyncResult]]. | |||
== | ==== GetActivatedRightsUsers ==== | ||
Takes | Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns a bool, an u32 and a type-0x6 output buffer containing an array of [[Account_services#Uid|Uid]]. | ||
==== GetApplicationRightsStatus ==== | |||
Takes an input "nn::ns::RightsEnvironmentHandle". Returns 2 bools "nn::ns::ApplicationRightsStatus" and "nn::ns::ApplicationLicenseType". | |||
==== GetRunningApplicationStatus ==== | |||
Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns an u32 "nn::ns::RunningApplicationStatus". | |||
==== RequestContentsAuthorizationToken ==== | |||
Takes a total of 0x50-bytes of input, a type-0x5 input buffer. Returns an [[#IAsyncData_2|IAsyncData]] and an output handle. | |||
== | ==== IAsyncData ==== | ||
This is "nn::ns::detail::IAsyncData". | |||
This was added with [12.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,323: | Line 2,560: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || GetSize | ||
|- | |- | ||
| 1 || | | 1 || Get | ||
|- | |- | ||
| 2 || | | 2 || Cancel | ||
|- | |- | ||
| 3 || [ | | 3 || GetErrorContext | ||
|} | |||
=== IECommerceInterface=== | |||
This is "nn::ns::detail::IECommerceInterface". | |||
This was added with [4.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#RequestLinkDevice]] | ||
|- | |- | ||
| | | 1 || [6.0.0+] [[#RequestCleanupAllPreInstalledApplications]] | ||
|- | |- | ||
| | | 2 || [6.0.0+] [[#RequestCleanupPreInstalledApplication]] | ||
|- | |- | ||
| | | 3 || [6.0.0+] [[#RequestSyncRights]] | ||
|- | |- | ||
| | | 4 || [6.0.0+] [[#RequestUnlinkDevice]] | ||
|- | |- | ||
| | | 5 || [6.1.0+] [[#RequestRevokeAllELicense]] | ||
|- | |- | ||
| | | 6 || [9.0.0+] [[#RequestSyncRightsBasedOnAssignedELicenses]] | ||
|- | |- | ||
| | | 7 || [14.0.0+] RequestOnlineSubscriptionFreeTrialAvailability | ||
|- | |- | ||
| | | 8 || [20.0.0+] | ||
|- | |- | ||
| | | 9 || [20.0.0+] | ||
|- | |- | ||
| | | 10 || [20.0.0+] | ||
|- | |- | ||
| | | 11 || [20.0.0+] | ||
|- | |- | ||
| | | 12 || [20.0.0+] | ||
|- | |- | ||
| | | 13 || [20.0.0+] | ||
| | |} | ||
==== RequestLinkDevice ==== | |||
Takes an input [[Account_services#Uid|Uid]], returns an output Event handle and an [[#IAsyncResult]]. | |||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
==== RequestCleanupAllPreInstalledApplications ==== | |||
No input, returns an output Event handle and an [[#IAsyncResult]]. | |||
=== | ==== RequestCleanupPreInstalledApplication ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | |||
==== RequestSyncRights ==== | |||
No input, returns an output Event handle and an [[#IAsyncResult]]. | |||
==== RequestUnlinkDevice ==== | |||
Takes an input [[Account_services#Uid|Uid]], returns an output Event handle and an [[#IAsyncResult]]. | |||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
=== | ==== RequestRevokeAllELicense ==== | ||
Takes an input [[Account_services#Uid|Uid]], returns an output Event handle and an [[#IAsyncResult]]. | |||
==== RequestSyncRightsBasedOnAssignedELicenses ==== | |||
=== | |||
No input, returns an output Event handle and an [[#IAsyncResult]]. | No input, returns an output Event handle and an [[#IAsyncResult]]. | ||
=== | === IFactoryResetInterface === | ||
This is "nn::ns::detail::IFactoryResetInterface". | |||
{| class="wikitable" border="1" | |||
|- | |||
=== | ! Cmd || Name | ||
|- | |||
| 100 || [[#ResetToFactorySettings]] | |||
|- | |||
| 101 || [[#ResetToFactorySettingsWithoutUserSaveData]] | |||
|- | |||
| 102 || [[#ResetToFactorySettingsForRefurbishment]] | |||
|- | |||
| 103 || [9.1.0+] [[#ResetToFactorySettingsWithPlatformRegion]] | |||
|- | |||
| 104 || [9.1.0+] [[#ResetToFactorySettingsWithPlatformRegionAuthentication]] | |||
|- | |||
| 105 || [10.0.0+] [[#RequestResetToFactorySettingsSecurely]] | |||
|- | |||
| 106 || [10.0.0+] [[#RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely]] | |||
|- | |||
| 107 || [20.0.0+] | |||
|- | |||
| 108 || [20.0.0+] | |||
|} | |||
==== ResetToFactorySettings ==== | |||
No input/output. | |||
As of [9.1.0] this is the only [[#IFactoryResetInterface]] cmd used by [[qlaunch]]. | |||
==== ResetToFactorySettingsWithoutUserSaveData ==== | |||
No input/output. | |||
==== ResetToFactorySettingsForRefurbishment ==== | |||
No input/output. | No input/output. | ||
==== ResetToFactorySettingsWithPlatformRegion ==== | |||
No input/output. | |||
==== ResetToFactorySettingsWithPlatformRegionAuthentication ==== | |||
=== | |||
No input/output. | No input/output. | ||
=== | ==== RequestResetToFactorySettingsSecurely ==== | ||
Takes a | Takes an input u64 tmem_size, a TransferMemory handle, returns an output [[#IAsyncValueAndProgress]] and an Event handle. | ||
The TransferMemory uses permissions=0. | |||
==== RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely ==== | |||
Takes an input u32 "nn::ae::PlatformRegion", an u64 tmem_size, a TransferMemory handle, returns an output [[#IAsyncValueAndProgress]] and an Event handle. | |||
The TransferMemory uses permissions=0. | |||
=== | ===== IAsyncValueAndProgress ===== | ||
This is "nn::ns::detail::IAsyncValueAndProgress". | |||
This was added with [10.0.0+]. | |||
== | {| class="wikitable" border="1" | ||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || GetSize | |||
|- | |||
| 1 || Get | |||
|- | |||
| 2 || Cancel | |||
|- | |||
| 3 || GetErrorContext | |||
|- | |||
| 4 || GetProgress | |||
|} | |||
=== IApplicationResource === | |||
This is "nn::ns::detail::IApplicationResource". | |||
[ | This was added with [9.0.0+]. | ||
== | {| class="wikitable" border="1" | ||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || Attach | |||
|- | |||
| 1 || BoostSystemMemoryResourceLimit | |||
|} | |||
This is | = ns:vm = | ||
This is "nn::ns::detail::IVulnerabilityManagerInterface". | |||
== | {| class="wikitable" border="1" | ||
|- | |||
! Cmd || Name | |||
This is | |- | ||
| 1200 || [3.0.0+] [[#NeedsUpdateVulnerability]] | |||
|- | |||
| 1201 || [4.0.0+] [[#UpdateSafeSystemVersionForDebug]] | |||
|- | |||
| 1202 || [4.0.0+] [[#GetSafeSystemVersion]] | |||
|- | |||
| 3100 || [18.0.0+] [[#GetSafeSystemVersionCheckInfo|GetSafeSystemVersionCheckInfo]] | |||
|- | |||
| 3101 || [18.0.0+] [[#RequestUpdateSafeSystemVersionCheckInfo|RequestUpdateSafeSystemVersionCheckInfo]] | |||
|- | |||
| 3102 || [18.0.0+] [[#ResetSafeSystemVersionCheckInfo|ResetSafeSystemVersionCheckInfo]] | |||
|} | |||
== NeedsUpdateVulnerability == | |||
No input, returns an output u8 bool flag. | |||
[S1] Web-applets use this command to check if the system needs an update. | |||
== UpdateSafeSystemVersionForDebug == | |||
Takes an input u32 '''version''' and an [[NCM_services#ApplicationId|ApplicationId]]. | |||
This command is not available for retail units. On a debug unit, if the [[System_Settings|system setting]] <code>vulnerability!enable_debug</code> is set, this mounts the system savegame [[Flash_Filesystem#System_Savegames|0x8000000000000049]] as "ns_ssversion:/", opens the file "ns_ssversion:/entry" and writes the supplied [[NCM_services#ApplicationId|ApplicationId]] and '''version''' in it. | |||
Finally, it calls [[NCM_services#ncm|OpenContentMetaDatabase]] with [[NCM_services#StorageId|StorageId]] 3, then calls [[NCM_services#IContentMetaDatabase|GetLatestContentMetaKey]] with the supplied [[NCM_services#ApplicationId|ApplicationId]] and compares the version field from the returned [[CNMT#Content_Meta_Records|Content Meta Record]] with the supplied '''version'''. | |||
If the supplied '''version''' is higher than the one in NCM's database, the value returned by [[NS_Services#NeedsUpdateVulnerability|NeedsUpdateVulnerability]] is set to "true". | |||
== GetSafeSystemVersion == | |||
No input, returns an output [[NCM_services#ContentMetaKey|ContentMetaKey]] with the cached contents of "ns_ssversion:/entry" ([[NCM_services#ApplicationId|ApplicationId]], u32 '''version''' and u32 '''policy''' from <code>vulnerability!needs_update_vulnerability_policy</code>). | |||
== GetSafeSystemVersionCheckInfo == | |||
No input, returns 0x10-bytes of output. | |||
[S2] Used by web-applets via ns:vm. | |||
== RequestUpdateSafeSystemVersionCheckInfo == | |||
No input, returns an output Event handle and an [[#IAsyncResult|IAsyncResult]]. | |||
[S2] Used by web-applets via ns:vm. | |||
The async task thread uses [[NIM_services|nim]] RequestCheckSafeSystemVersion, etc. | |||
== ResetSafeSystemVersionCheckInfo == | |||
No input/output. | |||
This | This throws an error if [[Settings_services|GetDebugModeFlag]] returns false. | ||
= ns:su = | |||
This is "nn::ns::detail::ISystemUpdateInterface". | |||
== | {| class="wikitable" border="1" | ||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#GetBackgroundNetworkUpdateState]] | |||
|- | |||
| 1 || [[#OpenSystemUpdateControl]] | |||
|- | |||
| 2 || [[#NotifyExFatDriverRequired]] | |||
|- | |||
| 3 || [[#ClearExFatDriverStatusForDebug]] | |||
|- | |||
| 4 || [[#RequestBackgroundNetworkUpdate]] | |||
|- | |||
| 5 || [[#NotifyBackgroundNetworkUpdate]] | |||
|- | |||
| 6 || [[#NotifyExFatDriverDownloadedForDebug]] | |||
|- | |||
| 9 || [[#GetSystemUpdateNotificationEventForContentDelivery]] | |||
|- | |||
| 10 || [[#NotifySystemUpdateForContentDelivery]] | |||
|- | |||
| 11 || [3.0.0+] [[#PrepareShutdown]] | |||
|- | |||
| 12 || [3.0.0-3.0.2] | |||
|- | |- | ||
| 13 || [3.0.0-3.0.2] | |||
|- | |- | ||
| | | 14 || [3.0.0-3.0.2] | ||
|- | |- | ||
| | | 15 || [3.0.0-3.0.2] | ||
|- | |- | ||
| | | 16 || [4.0.0+] [[#DestroySystemUpdateTask]] | ||
|- | |- | ||
| | | 17 || [4.0.0+] [[#RequestSendSystemUpdate]] | ||
|- | |- | ||
| 18 || [4.0.0+] [[#GetSendSystemUpdateProgress]] | |||
| 0 | |||
|- | |- | ||
| | | 19 || [S2] | ||
|- | |- | ||
| | | 20 || [S2] | ||
|} | |} | ||
== GetBackgroundNetworkUpdateState == | |||
No input, returns an output [[#BackgroundNetworkUpdateState]]. | |||
This is similar to [[#HasDownloaded]], see [[#BackgroundNetworkUpdateState]]. | |||
== OpenSystemUpdateControl == | |||
No input, returns an [[#ISystemUpdateControl]]. | |||
Only 1 ISystemUpdateControl can be open at a time. | |||
= | == NotifyExFatDriverRequired == | ||
No input/output. | |||
Only usable when an [[#ISystemUpdateControl]] isn't open. | |||
This uses [[NIM_services|nim]] ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask. | |||
Then this runs ExFat handling, updates state, and sets the same state flag as [[#RequestBackgroundNetworkUpdate]]. | |||
== | == ClearExFatDriverStatusForDebug == | ||
No input/output. | |||
== | == RequestBackgroundNetworkUpdate == | ||
No input/output. | |||
Only usable when an [[#ISystemUpdateControl]] isn't open. | |||
This sets a state flag to value 1. | |||
== | == NotifyBackgroundNetworkUpdate == | ||
Takes an input [[NCM_services#ContentMetaKey|ContentMetaKey]], no output. | |||
This checks whether a sysupdate is needed with the input ContentMetaKey using [[NCM_services|NCM]] commands, if not this will just return 0. Otherwise, this will then run code which is identical to [[#RequestBackgroundNetworkUpdate]]. | |||
== NotifyExFatDriverDownloadedForDebug == | |||
No input/output. | |||
== | == GetSystemUpdateNotificationEventForContentDelivery == | ||
No input, returns an output Event handle with EventClearMode=0. | |||
== NotifySystemUpdateForContentDelivery == | |||
No input/output. | |||
Signals the Event returned by [[#GetSystemUpdateNotificationEventForContentDelivery]]. | |||
== | == PrepareShutdown == | ||
No input/output. | |||
This is used by [[AM_services|AM]]. | |||
Just returns 0 when an [[#ISystemUpdateControl]] is open. | |||
== | This does various cleanup / uses various service-cmds etc for shutdown preparation. | ||
== DestroySystemUpdateTask == | |||
No input/output. | |||
Only usable when an [[#ISystemUpdateControl]] isn't open. | |||
This uses [[NIM_services|nim]] ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask. | |||
== RequestSendSystemUpdate == | |||
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], an u16 port, an u32 Ipv4Address, returns an output Event handle and an [[#IAsyncResult]]. | |||
[[qlaunch]] uses value 55556 for the port. IP is normally a local-WLAN address, however this can be any address. port/addr are little-endian. | |||
See [[NIM_services|nim]] regarding the input addr/port usage, etc. | |||
[11.0.0+] An error is thrown if LocalContentShare is not [[#IsLocalContentShareEnabled|enabled]]. | |||
This validates the [[#SystemDeliveryInfo]] and generates a [[NCM_services#ContentMetaKey|ContentMetaKey]] from that, and creates the [[#IAsyncResult]] + the async thread which handles the [[#IAsyncResult]] operation. | |||
The above validation verifies that the HMAC and SystemDeliveryProtocolVersion are valid. The OldSystemUpdateId ([20.0.0+] SystemUpdateId, SystemUpdateIdFlag ignored) must match the Id for the installed SystemUpdate as returned by [[NCM_services|ncm]]. | |||
Then the thread does: | |||
* Calls a func which does: | |||
** Uses [[NIM_services|nim]] CreateLocalCommunicationSendSystemUpdateTask, returning the Result on failure. | |||
*** The input firmware_variation is from the [[#SystemDeliveryInfo|FirmwareVariationId]]. | |||
** Uses [[NIM_services|nim]] RequestLocalCommunicationSendSystemUpdateTaskRun, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result. | |||
*** When the Result from Get is an error, a func is called for filling in the [[#IAsyncResult|IAsyncResult]] ErrorContext with Type4. | |||
** Handles cleanup and returns. | |||
* Unlike [[#RequestReceiveSystemUpdate]], this doesn't save a SystemPlayReport. | |||
== | == GetSendSystemUpdateProgress == | ||
No input, returns an output [[#SystemUpdateProgress]]. | |||
Same as [[#GetReceiveProgress]] except this uses nim ListLocalCommunicationSendSystemUpdateTask and GetLocalCommunicationSendSystemUpdateTaskInfo. The data copied to output is also swapped: u64 nim_out+0x8 is copied to out+0x8, and u64 nim_out+0x10 is copied to out+0x0. | |||
[ | |||
== | == Cmd19 == | ||
This is exclusive to S2. | |||
No input/output. | |||
= | == Cmd20 == | ||
This is | This is exclusive to S2. | ||
No input, returns an output u8. | |||
This is | == ISystemUpdateControl == | ||
This is "nn::ns::detail::ISystemUpdateControl". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || [[#HasDownloaded]] | ||
|- | |- | ||
| 1 || | | 1 || [[#RequestCheckLatestUpdate]] | ||
|- | |- | ||
| 2 || | | 2 || [[#RequestDownloadLatestUpdate]] | ||
|- | |- | ||
| 3 || | | 3 || [[#GetDownloadProgress]] | ||
|- | |- | ||
| 4 || | | 4 || [[#ApplyDownloadedUpdate]] | ||
|- | |- | ||
| 5 || | | 5 || [[#RequestPrepareCardUpdate]] | ||
|- | |- | ||
| 6 || [ | | 6 || [[#GetPrepareCardUpdateProgress]] | ||
|- | |- | ||
| | | 7 || [[#HasPreparedCardUpdate]] | ||
|- | |- | ||
| | | 8 || [[#ApplyCardUpdate]] | ||
|- | |- | ||
| | | 9 || [[#GetDownloadedEulaDataSize]] | ||
|- | |- | ||
| | | 10 || [[#GetDownloadedEulaData]] | ||
|- | |- | ||
| | | 11 || [[#SetupCardUpdate]] | ||
|- | |- | ||
| | | 12 || [[#GetPreparedCardUpdateEulaDataSize]] | ||
|- | |- | ||
| | | 13 || [[#GetPreparedCardUpdateEulaData]] | ||
|- | |- | ||
| | | 14 || [4.0.0+] [[#SetupCardUpdateViaSystemUpdater]] | ||
|- | |- | ||
| | | 15 || [4.0.0+] [[#HasReceived]] | ||
|- | |- | ||
| | | 16 || [4.0.0+] [[#RequestReceiveSystemUpdate]] | ||
|- | |- | ||
| | | 17 || [4.0.0+] [[#GetReceiveProgress]] | ||
|- | |- | ||
| | | 18 || [4.0.0+] [[#ApplyReceivedUpdate]] | ||
|- | |- | ||
| | | 19 || [4.0.0+] [[#GetReceivedEulaDataSize]] | ||
|- | |- | ||
| | | 20 || [4.0.0+] [[#GetReceivedEulaData]] | ||
|- | |- | ||
| | | 21 || [4.0.0+] [[#SetupToReceiveSystemUpdate]] | ||
|- | |- | ||
| | | 22 || [6.0.0+] [[#RequestCheckLatestUpdateIncludesRebootlessUpdate]] | ||
|} | |||
All Card cmds except SetupCardUpdate* require [[#SetupCardUpdate]]/[[#SetupCardUpdateViaSystemUpdater]] to be used previously. [[#GetPreparedCardUpdateEulaDataSize]]/[[#GetPreparedCardUpdateEulaData]] checks a different state flag. | |||
=== HasDownloaded === | |||
No input, returns an output u8 bool flag. | |||
Gets whether a network sysupdate was downloaded, with install pending. | |||
Uses [[NIM_services|nim]] ListSystemUpdateTask and [[NIM_services|nim]] GetSystemUpdateTaskInfo. When ListSystemUpdateTask successfully returns a task and GetSystemUpdateTaskInfo is successful, the output flag is set to: <code>*((u8*)(taskinfo+0) == 0x3</code>. Otherwise, flag=0. | |||
| | This always returns 0, however this will assert if GetSystemUpdateTaskInfo fails with ret!=0x3C89. | ||
=== RequestCheckLatestUpdate === | |||
No input, returns an output Event handle and an [[#IAsyncValue]]. | |||
The data that can be read from the [[#IAsyncValue]] is [[#LatestSystemUpdate]]. | |||
=== RequestDownloadLatestUpdate === | |||
No input, returns an output Event handle and an [[#IAsyncResult]]. | |||
=== GetDownloadProgress === | |||
No input, returns an output [[#SystemUpdateProgress]]. | |||
Similar to [[#HasDownloaded]] except instead of a flag, this returns the 0x10-bytes from taskinfo+8. The output struct is cleared when the task(info) isn't available. | |||
=== ApplyDownloadedUpdate === | |||
No input/output. | |||
Runs code similar to [[#HasDownloaded]], throwing an error if a network sysupdate isn't ready for install. Then the sysupdate is installed: | |||
* Uses ListSystemUpdateTask again, then [[NIM_services|nim]] IsExFatDriverIncluded. Runs ExFat handling when the output flag is set. | |||
* On newer system-versions, this uses [[NIM_services|nim]] GetSystemUpdateTaskInfo then on success uses data from there to save a SystemPlayReport when the cached [[System_Settings|system-setting]] "systemreport!enabled" is set. | |||
** The EventId is "systemupdate_dl_throughput" with ApplicationId 0100000000001018. | |||
** The following fields are added to the report, see [[NIM_services#SystemUpdateTaskInfo|nim SystemUpdateTaskInfo]]: "ContentMetaId", "Version", "DownloadSize", and "ThroughputKBps". | |||
* On newer system-versions, this saves another SystemPlayReport when a state flag is set (same flag mentioned above). | |||
** The EventId is "systemupdate_pass" with ApplicationId 0100000000001021. | |||
** This report has the following fields: | |||
*** "Type" | |||
*** "SourceSystemUpdateMetaId" | |||
*** "SourceSystemUpdateMetaVersion" | |||
*** "SourceExFatStatus" | |||
*** "DestinationSystemUpdateMetaId" | |||
*** "DestinationSystemUpdateMetaVersion" | |||
*** "DestinationExFatStatus" | |||
*** "Rebootless" | |||
* Since BootImagePackage will be installed later, the two flags in [[Flash_Filesystem#System_Update_Control]] are set to 1. | |||
* Uses [[NIM_services|nim]] CommitSystemUpdateTask and [[NIM_services|nim]] DestroySystemUpdateTask. | |||
* Installs BootImagePackage. After installing each BootImagePackage, the associated flag in [[Flash_Filesystem#System_Update_Control]] is set to 0. | |||
* On newer system versions when an input flag is set, this uses [[Filesystem_services|NotifySystemDataUpdateEvent]], however this doesn't happen with ApplyDownloadedUpdate since that input flag is 0. | |||
=== RequestPrepareCardUpdate === | |||
No input, returns an output Event handle and an [[#IAsyncResult]]. | |||
=== GetPrepareCardUpdateProgress === | |||
No input, returns an output [[#SystemUpdateProgress]]. | |||
=== HasPreparedCardUpdate === | |||
No input, returns an output u8 bool flag. | |||
| | === ApplyCardUpdate === | ||
| | No input/output. | ||
=== GetDownloadedEulaDataSize === | |||
| | Takes a type-0x15 input buffer [[#EulaDataPath]], returns an output u64 '''filesize'''. | ||
[ | Runs code similar to [[#HasDownloaded]], throwing an error if a network sysupdate isn't ready for install. | ||
Uses ListSystemUpdateTask again. Then [[NIM_services|nim]] GetDownloadedSystemDataPath, with the output ContentPath being used to mount the EULA title with FS. | |||
Then "<mountname>:/<[[#EulaDataPath]]>" is opened, gets the '''filesize''', then runs cleanup. | |||
== | === GetDownloadedEulaData === | ||
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 '''filesize'''. | |||
Similar to [[#GetDownloadedEulaDataSize]] except this reads the file instead, using the specified output buffer with size=filesize. This will throw an error if the filesize is larger than the buffer size. | |||
=== SetupCardUpdate === | |||
Takes an input u64 size and a TransferMemory handle, no output. | |||
Official sw creates the TransferMemory with an user-specified buffer, with permissions=None. | |||
[[qlaunch]] uses size 0x100000 for the TransferMemory buffer. | |||
=== GetPreparedCardUpdateEulaDataSize === | |||
Takes a type-0x15 input buffer [[#EulaDataPath]], returns an output u64 '''filesize'''. | |||
This is similar to [[#GetDownloadedEulaDataSize]]. | |||
=== GetPreparedCardUpdateEulaData === | |||
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 '''filesize'''. | |||
This is similar to [[#GetDownloadedEulaData]]. | |||
=== SetupCardUpdateViaSystemUpdater === | |||
Takes an input u64 size and a TransferMemory handle, no output. | |||
The permissions for the TransferMemory is None. | |||
Same as [[#SetupCardUpdate]], except this doesn't have the code for [[Filesystem_services|GetGameCardHandle/GetGameCardUpdatePartitionInfo]], and uses [[Filesystem_services|OpenRegisteredUpdatePartition]] instead of [[Filesystem_services|OpenGameCardFileSystem]]. This uses the same is_initialized bool state flag. | |||
| | |||
== | === HasReceived === | ||
No input, returns an output u8 bool. | |||
Same as [[#HasDownloaded]] except this uses [[NIM_services|nim]] ListLocalCommunicationReceiveSystemUpdateTask and GetLocalCommunicationReceiveSystemUpdateTaskInfo. | |||
=== RequestReceiveSystemUpdate === | |||
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], an u16 port, an u32 Ipv4Address, returns an output Event handle and an [[#IAsyncResult]]. | |||
[[qlaunch]] uses the same value for the port as [[#RequestSendSystemUpdate]] (see [[#RequestSendSystemUpdate]] for addr as well). | |||
See [[NIM_services|nim]] regarding the input addr/port usage, etc. | |||
This uses the same LocalContentShare check as [[#RequestSendSystemUpdate|RequestSendSystemUpdate]]. | |||
An error is thrown if a state flag is clear. | |||
This validates the [[#SystemDeliveryInfo]] (same as [[#RequestSendSystemUpdate|RequestSendSystemUpdate]]) and generates a [[NCM_services#ContentMetaKey|ContentMetaKey]] from that, and creates the [[#IAsyncResult]] + the async thread which handles the [[#IAsyncResult]] operation. | |||
| | |||
Then the thread does: | |||
* Calls a func which does: | |||
** Throws an error if [[NIM_services#ListSystemUpdateTask|ListSystemUpdateTask]] returns any task. | |||
** Checks whether a sysupdate is actually required using the previously generated [[NCM_services#ContentMetaKey|ContentMetaKey]] (this func is also passed the below statefield as the last param), throwing an error if not. | |||
*** [20.0.0+] The above check-sysupdate func was updated (which is also used elsewhere), flag handling during the loop was updated (which uses the last input param). | |||
** Uses [[NIM_services|nim]] CreateLocalCommunicationReceiveSystemUpdateTask, returning the Result on failure. | |||
*** The input firmware_variation is from [[System_Settings|system-setting]] <code>ns.systemupdate!firmware_variation</code> or <code>ns.systemupdate!t_firmware_variation</code>, depending on the [[Settings_services|PlatformRegion]] (value 0xFF is used when the output setting-size is invalid). | |||
*** The input '''unk''' is set to: <code>unk = statefield == 0 ? 0x4 : 0xC</code> ([20.0.0+] uses statefield & 1 == 0). [20.0.0+] Additional data is now ORRed with unk afterwards: <code>unk |= ((statefield>>1) & 0x3) << 8;</code> (same statefield as before) | |||
** Uses [[NIM_services|nim]] RequestLocalCommunicationReceiveSystemUpdateTaskRun, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result. | |||
*** When the Result from Get is an error, a func is called for filling in the [[#IAsyncResult|IAsyncResult]] ErrorContext with Type4. | |||
| | ** Handles cleanup and returns. | ||
* On success, this loads various data which is then used for saving a SystemPlayReport when the cached [[System_Settings|system-setting]] "systemreport!enabled" is set. | |||
** The EventId is "receive_system_update" with ApplicationId <NS ProgramId>. | |||
** This report has the following fields: | |||
*** "SourceSystemUpdateId" | |||
*** "DestinationSystemUpdateId" | |||
| | *** "SourceSystemUpdateVersion" | ||
| | *** "DestinationSystemUpdateVersion" | ||
*** "SenderFirmwareVariationId" | |||
*** "ReceiverFirmwareVariationId" | |||
| | *** "SenderPlatformRegion" | ||
| | *** "ReceiverPlatformRegion" | ||
*** "SenderHasExFat" | |||
| | *** "ReceiverHasExFat" | ||
| | *** "Size" | ||
*** "ThroughputKBps" | |||
=== GetReceiveProgress === | |||
No input, returns an output [[#SystemUpdateProgress]]. | |||
Same as [[#GetDownloadProgress]] except this uses [[NIM_services|nim]] ListLocalCommunicationReceiveSystemUpdateTask and GetLocalCommunicationReceiveSystemUpdateTaskInfo. | |||
=== ApplyReceivedUpdate === | |||
No input/output. | |||
This uses the same LocalContentShare check as [[#RequestSendSystemUpdate|RequestSendSystemUpdate]]. | |||
=== GetReceivedEulaDataSize === | |||
Takes a type-0x15 input buffer [[#EulaDataPath]], returns an output u64 '''filesize'''. | |||
This is similar to [[#GetDownloadedEulaDataSize]]. | |||
=== GetReceivedEulaData === | |||
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 '''filesize'''. | |||
This is similar to [[#GetDownloadedEulaData]]. | |||
=== SetupToReceiveSystemUpdate === | |||
No input/output. | |||
This just uses [[NIM_services|nim]] ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask. | |||
[[qlaunch]] uses this before [[#RequestReceiveSystemUpdate]]. | |||
=== RequestCheckLatestUpdateIncludesRebootlessUpdate === | |||
No input, returns an output Event handle and an [[#IAsyncValue]]. | |||
= IAsyncValue = | |||
This is "nn::ns::detail::IAsyncValue". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || GetSize | ||
|- | |- | ||
| | | 1 || Get | ||
|- | |- | ||
| | | 2 || Cancel | ||
|- | |- | ||
| | | 3 || [4.0.0+] GetErrorContext | ||
|} | |||
Official sw creates a container object for this using the output from the service commands, which contains the IAsyncValue object, and the Event with EventClearMode=0. | |||
* GetSize: No input, returns an output u64. | |||
* Get: Takes a type-0x6 output buffer, no output. Official sw waits on the Event prior to using this cmd. | |||
* Cancel: No input/output. Used by official sw when closing the object, when the serv-obj is initialized (after using the cmd, official sw will also wait on the Event). This cmd is also used in other official sw funcs. | |||
* GetErrorContext: No input/output, takes a type-0x16 output buffer containing an [[Error_Applet#ErrorContext|ErrorContext]]. | |||
= IAsyncResult = | |||
This is "nn::ns::detail::IAsyncResult". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || Get | ||
|- | |- | ||
| | | 1 || Cancel | ||
|- | |- | ||
| | | 2 || [4.0.0+] GetErrorContext | ||
|} | |||
Official sw creates a container object for this using the output from the service commands, which contains the IAsyncResult object, and the Event with EventClearMode=0. | |||
* Get: No input/output. Official sw waits on the Event prior to using this cmd. | |||
* Cancel: No input/output. Used by official sw when closing the object, when the serv-obj is initialized (after using the cmd, official sw will also wait on the Event). This cmd is also used in other official sw funcs. | |||
* GetErrorContext: No input/output, takes a type-0x16 output buffer containing an [[Error_Applet#ErrorContext|ErrorContext]]. | |||
= ns:dev = | |||
This is "nn::ns::detail::IDevelopInterface". | |||
[10.0.0+] Some of these cmds were replaced by the [[PGL_services|pgl]] system module. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [1.0.0-9.2.0] [[#LaunchProgram]] | ||
|- | |- | ||
| | | 1 || [[#TerminateProcess]] | ||
|- | |- | ||
| | | 2 || [1.0.0-9.2.0] [[#TerminateProgram]] | ||
|- | |- | ||
| | | 4 || [1.0.0-9.2.0] [[#GetShellEvent]] | ||
|- | |- | ||
| | | 5 || [1.0.0-9.2.0] [[#GetShellEventInfo]] | ||
|- | |- | ||
| | | 6 || [[#TerminateApplication]] | ||
|- | |- | ||
| | | 7 || [1.0.0-9.2.0] [[#PrepareLaunchProgramFromHost]] | ||
|- | |- | ||
| | | 8 || [10.0.0-17.0.1] [[#LaunchApplicationFromHost]] ([1.0.0-9.2.0] LaunchApplication) | ||
|- | |- | ||
| | | 9 || [1.0.0-17.0.1] [[#LaunchApplicationWithStorageId]] | ||
|- | |- | ||
| | | 10 || [6.0.0-8.1.0] [[#IsSystemMemoryResourceLimitBoosted]] | ||
|- | |- | ||
| | | 11 || [6.0.0+] [[#GetRunningApplicationProcessId]] | ||
|- | |- | ||
| | | 12 || [6.0.0+] [[#SetCurrentApplicationRightsEnvironmentCanBeActive]] | ||
|- | |- | ||
| | | 13 || [9.0.0+] [[#CreateApplicationResource]] | ||
|- | |- | ||
| | | 14 || [9.0.0+] [[#IsPreomia]] | ||
|- | |- | ||
| | | 15 || [10.0.0-17.0.1] [[#GetApplicationProgramIdFromHost]] | ||
|- | |- | ||
| | | 16 || [12.0.0+] RefreshCachedDebugValues | ||
|- | |- | ||
| | | 17 || [12.0.0+] [[#PrepareLaunchApplicationFromHost]] | ||
|- | |- | ||
| | | 18 || [12.0.0+] [[#GetLaunchEvent]] | ||
|- | |- | ||
| | | 19 || [12.0.0+] [[#GetLaunchResult]] | ||
|- | |- | ||
| | | 20 || [14.0.0+] GetProgramId | ||
|- | |- | ||
| | | 21 || [18.0.0+] [[#PrepareLaunchApplication]] | ||
|- | |- | ||
| | | 22 || [18.0.0+] [[#LaunchApplication]] | ||
|- | |- | ||
| | | 23 || [18.0.0+] [[#GetProgramIdByApplicationLaunchInfo]] | ||
|- | |- | ||
| | | 24 || [18.0.0+] DestroyApplicationLaunchPreparation | ||
|} | |} | ||
== | == LaunchProgram == | ||
Wrapper for "pm:shell" [[Process_Manager_services#pm:shell|LaunchProcess]]. | |||
== TerminateProcess == | |||
Wrapper for "pm:shell" [[Process_Manager_services#pm:shell|TerminateProcess]]. | |||
== TerminateProgram == | |||
Wrapper for "pm:shell" [[Process_Manager_services#pm:shell|TerminateProgram]]. | |||
== GetShellEvent == | |||
Wrapper for "pm:shell" [[Process_Manager_services#pm:shell|GetProcessEventHandle]]. | |||
== | == GetShellEventInfo == | ||
Wrapper for "pm:shell" [[Process_Manager_services#pm:shell|GetProcessEventInfo]]. | |||
== TerminateApplication == | |||
Calls "pm:shell" [[Process_Manager_services#pm:shell|GetApplicationProcessIdForShell]] and sends the ProcessId to [[Process_Manager_services#pm:shell|TerminateProcess]]. | |||
== | == PrepareLaunchProgramFromHost == | ||
Takes a type-0x5 input buffer containing the [[Filesystem_services#FspPath|FspPath]], returns an output 0x10-byte struct. | |||
Calls [[NCM_services#IPathResolverForStorage|IPathResolverForStorage]] Set...NcaPath functions. | |||
== LaunchApplicationFromHost == | |||
Takes an input u32 [[Process_Manager_services#LaunchFlags|LaunchFlags]] and a type-0x5 input buffer containing the [[Filesystem_services#FspPath|FspPath]]. Returns an output u64 ProcessId. | |||
== | == LaunchApplicationWithStorageId == | ||
Takes 2 input u8 [[NCM_services#StorageId|StorageIds]], an u32 [[Process_Manager_services#LaunchFlags|LaunchFlags]], and an [[NCM_services#ApplicationId|ApplicationId]]. Returns an output u64 ProcessId. | |||
Launches an application title which is registered with NS. | |||
== | == IsSystemMemoryResourceLimitBoosted == | ||
No input. Returns a bool. | |||
== GetRunningApplicationProcessId == | |||
Returns an output u64 ProcessId. | |||
== | == SetCurrentApplicationRightsEnvironmentCanBeActive == | ||
Takes an input bool. No output. | |||
== CreateApplicationResource == | |||
Takes an input u32 (1 = Preomia/MicroApplication). Returns an [[#IApplicationResource]]. | |||
== IsPreomia == | |||
Takes an input u64 [[NCM_services#ProgramId|ProgramId]]. Returns a bool. | |||
== GetApplicationProgramIdFromHost == | |||
Takes a type-0x5 input buffer containing the [[Filesystem_services#FspPath|FspPath]]. Returns an u64 [[NCM_services#ProgramId|ProgramId]]. | |||
| | |||
== | == PrepareLaunchApplicationFromHost == | ||
[18.0.0+] Now returns a total of 0x50 bytes of output. | |||
[19.0.0+] Now returns a total of 0x80 bytes of output. | |||
== | == GetLaunchEvent == | ||
[18.0.0+] Now takes a total of 0x50 bytes of input. | |||
[19.0.0+] Now takes a total of 0x80 bytes of input. | |||
== GetLaunchResult == | |||
[18.0.0+] Now takes a total of 0x50 bytes of input. | |||
[19.0.0+] Now takes a total of 0x80 bytes of input. | |||
{| class="wikitable" border="1" | == PrepareLaunchApplication == | ||
|- | Takes a total of 0x10-bytes of input. Returns a total of 0x50-bytes of output. | ||
! Cmd || Name | |||
[19.0.0+] Now returns a total of 0x80-bytes of output. | |||
== LaunchApplication == | |||
Takes a total of 0x50-bytes of input. Returns a total of 8-bytes of output. | |||
[19.0.0+] Now takes a total of 0x80 bytes of input. | |||
== GetProgramIdByApplicationLaunchInfo == | |||
Takes a total of 0x50-bytes of input. Returns a total of 8-bytes of output. | |||
[19.0.0+] Now takes a total of 0x80 bytes of input. | |||
= acc:su = | |||
This is "nn::account::IAccountServiceForAdministrator". | |||
[13.0.0+] This was moved from [[Account_services|account]]. | |||
This is only available when the output from [[Process_Manager_services|pm:bm]] GetBootMode is Normal/Maintenance. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name || Notes | |||
|- | |||
| 0 || GetUserCount || | |||
|- | |||
| 1 || GetUserExistence || | |||
|- | |- | ||
| | | 2 || ListAllUsers || | ||
|- | |- | ||
| | | 3 || ListOpenUsers || | ||
|- | |- | ||
| | | 4 || GetLastOpenedUser || | ||
|- | |- | ||
| | | 5 || GetProfile || Returns an [[#IProfile]]. | ||
|- | |- | ||
| | | 6 || [3.0.0+] GetProfileDigest || | ||
|- | |- | ||
| | | 50 || [[#IsUserRegistrationRequestPermitted]] || | ||
|- | |- | ||
| | | 51 || TrySelectUserWithoutInteractionDeprecated ([1.0.0-18.1.0] [[#TrySelectUserWithoutInteraction]]) || | ||
|- | |- | ||
| | | 52 || [19.0.0+] TrySelectUserWithoutInteraction || | ||
|- | |- | ||
| | | 60 || [5.0.0-5.1.0] ListOpenContextStoredUsers || | ||
|- | |- | ||
| | | 99 || [6.0.0+] DebugActivateOpenContextRetention || No input, returns an [[#ISessionObject]]. | ||
| | |||
|- | |- | ||
| 100 || GetUserRegistrationNotifier || Returns an [[#INotifier]]. | |||
|- | |- | ||
| | | 101 || GetUserStateChangeNotifier || Returns an [[#INotifier]]. | ||
|- | |- | ||
| | | 102 || GetBaasAccountManagerForSystemService || Returns an [[#IManagerForSystemService]]. | ||
|- | |- | ||
| | | 103 || GetBaasUserAvailabilityChangeNotifier || Returns an [[#INotifier]]. | ||
|- | |- | ||
| | | 104 || GetProfileUpdateNotifier || Returns an [[#INotifier]]. | ||
| | |||
|- | |- | ||
| 105 || [4.0.0+] CheckNetworkServiceAvailabilityAsync || Returns an [[#IAsyncContext]]. | |||
|- | |- | ||
| | | 106 || [9.0.0+] GetProfileSyncNotifier || | ||
[ | |||
|- | |- | ||
| 110 || StoreSaveDataThumbnail || | |||
|- | |- | ||
| | | 111 || ClearSaveDataThumbnail || | ||
|- | |- | ||
| | | 112 || LoadSaveDataThumbnail || | ||
|- | |- | ||
| | | 113 || [5.0.0+] GetSaveDataThumbnailExistence || | ||
|- | |- | ||
| | | 120 || [10.0.0+] ListOpenUsersInApplication || | ||
|- | |- | ||
| | | 130 || [6.0.0+] ActivateOpenContextRetention || Takes a total of 0x8-bytes of input, returns an [[#ISessionObject]]. | ||
|- | |- | ||
| | | 140 || [6.0.0+] ListQualifiedUsers || | ||
|- | |- | ||
| | | 150 || [10.0.0-10.2.0] AuthenticateApplicationAsync || | ||
|- | |- | ||
| | | 151 || [12.0.0+] EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync || | ||
|- | |- | ||
| | | 152 || [12.0.0+] LoadSignedDeviceIdentifierCacheForNintendoAccount || | ||
|- | |- | ||
| | | 170 || [13.0.0+] GetNasOp2MembershipStateChangeNotifier || | ||
|- | |- | ||
| | | 190 || [1.0.0-9.2.0] GetUserLastOpenedApplication || | ||
|- | |- | ||
| | | 191 || [7.0.0-19.0.1] UpdateNotificationReceiverInfo ([5.0.0-5.1.0] ActivateOpenContextHolder) || | ||
|- | |- | ||
| | | 200 || BeginUserRegistration || | ||
|- | |- | ||
| | | 201 || CompleteUserRegistration || | ||
|- | |- | ||
| | | 202 || CancelUserRegistration || | ||
|- | |- | ||
| | | 203 || DeleteUser || | ||
|- | |- | ||
| | | 204 || SetUserPosition || | ||
|- | |- | ||
| | | 205 || GetProfileEditor || Takes an input userID and returns an [[#IProfileEditor]]. | ||
|- | |- | ||
| | | 206 || CompleteUserRegistrationForcibly || | ||
|- | |- | ||
| | | 210 || [3.0.0+] CreateFloatingRegistrationRequest || Returns an [[#IFloatingRegistrationRequest]]. | ||
|- | |- | ||
| | | 211 || [8.0.0+] CreateProcedureToRegisterUserWithNintendoAccount || Takes a total of 0x4-bytes of input and a handle, returns an [[#IOAuthProcedureForUserRegistration]]. | ||
|- | |- | ||
| | | 212 || [8.0.0+] ResumeProcedureToRegisterUserWithNintendoAccount || Takes a total of 0x14-bytes of input and a handle, returns an [[#IOAuthProcedureForUserRegistration]]. | ||
|- | |- | ||
| | | 213 || [17.0.0+] CreateProcedureToCreateUserWithNintendoAccount || | ||
|- | |- | ||
| | | 214 || [17.0.0+] ResumeProcedureToCreateUserWithNintendoAccount || | ||
|- | |- | ||
| 215 || [17.0.0+] ResumeProcedureToCreateUserWithNintendoAccountAfterApplyResponse || | |||
|- | |- | ||
| | | 230 || AuthenticateServiceAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 250 || GetBaasAccountAdministrator || Returns an [[#IAdministrator]]. | ||
|- | |- | ||
| | | 251 || [20.0.0+] SynchronizeNetworkServiceAccountsSnapshotAsync || | ||
|- | |- | ||
| | | 290 || ProxyProcedureForGuestLoginWithNintendoAccount || Returns an [[#IOAuthProcedureForExternalNsa]] (formerly [[#IOAuthProcedureForGuestLogin]] with [1.0.0-2.3.0]). | ||
|- | |- | ||
| | | 291 || [3.0.0+] ProxyProcedureForFloatingRegistrationWithNintendoAccount || Returns an [[#IOAuthProcedureForExternalNsa]]. | ||
|- | |- | ||
| | | 292 || [20.0.0+] ProxyProcedureForDeviceMigrationAuthenticatingOperatingUser || | ||
|- | |- | ||
| | | 293 || [20.0.0+] ProxyProcedureForDeviceMigrationDownload || | ||
|- | |- | ||
| | | 299 || SuspendBackgroundDaemon || Returns an [[#ISessionObject]]. | ||
|- | |- | ||
| 350 || [20.0.0+] CreateDeviceMigrationUserExportRequest || | |||
|- | |- | ||
| | | 351 || [20.0.0+] UploadNasCredential || | ||
|- | |- | ||
| | | 352 || [20.0.0+] CreateDeviceMigrationUserImportRequest || | ||
|- | |- | ||
| | | 353 || [20.0.0+] DeleteUserMigrationSaveData || | ||
|- | |- | ||
| | | 400 || [18.0.0+] SetPinCode || | ||
|- | |- | ||
| | | 401 || [18.0.0+] GetPinCodeLength || | ||
|- | |- | ||
| | | 402 || [18.0.0-19.0.1] GetPinCode || | ||
|- | |- | ||
| | | 403 || [20.0.0+] GetPinCodeParity || | ||
|- | |- | ||
| | | 404 || [20.0.0+] VerifyPinCode || | ||
| | |||
|- | |- | ||
| 405 || [20.0.0+] IsPinCodeVerificationForbidden || | |||
|- | |- | ||
| | | 410 || [18.0.0+] GetPinCodeErrorCount || | ||
|- | |- | ||
| | | 411 || [18.0.0-19.0.1] ResetPinCodeErrorCount || | ||
|- | |- | ||
| | | 412 || [18.0.0-19.0.1] IncrementPinCodeErrorCount || | ||
|- | |- | ||
| | | 413 || [20.0.0+] SetPinCodeErrorCount || | ||
|- | |- | ||
| | | 420 || [19.0.0+] SetStartPenaltyTime || | ||
|- | |- | ||
| 421 || [19.0.0+] GetStartPenaltyTime || | |||
|- | |- | ||
| | | 900 || [13.0.0+] SetUserUnqualifiedForDebug || | ||
|- | |- | ||
| | | 901 || [13.0.0+] UnsetUserUnqualifiedForDebug || | ||
|- | |- | ||
| | | 902 || [13.0.0+] ListUsersUnqualifiedForDebug || | ||
|- | |- | ||
| | | 910 || [16.0.0+] RefreshFirmwareSettingsForDebug || | ||
|- | |- | ||
| | | 997 || [3.0.0+] DebugInvalidateTokenCacheForUser || | ||
|- | |||
| 998 || DebugSetUserStateClose || | |||
|- | |||
| 999 || DebugSetUserStateOpen || | |||
|} | |} | ||
= | [10.0.0+] DebugSetUserStateClose/DebugSetUserStateOpen now takes an additional 8-bytes of input. | ||
== IsUserRegistrationRequestPermitted == | |||
Takes a PID, an input u64 pid_reserved, and returns an output u8 bool. | |||
== TrySelectUserWithoutInteraction == | |||
Takes an input u8 bool isNetworkServiceAccountRequired, returns an output Uid. | |||
This is | == IManagerForSystemService == | ||
This is "nn::account::baas::IManagerForSystemService". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,414: | Line 3,505: | ||
! Cmd || Name || Notes | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 || | | 0 || CheckAvailability || | ||
|- | |- | ||
| 1 || | | 1 || GetAccountId || | ||
|- | |- | ||
| 2 || | | 2 || EnsureIdTokenCacheAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| 3 || | | 3 || [19.0.0+] LoadIdTokenCacheDeprecated ([1.0.0-18.1.0] LoadIdTokenCache) || | ||
|- | |- | ||
| 4 || | | 4 || [19.0.0+] LoadIdTokenCache || | ||
|- | |- | ||
| | | 100 || SetSystemProgramIdentification || | ||
|- | |- | ||
| | | 101 || RefreshNotificationTokenAsync || | ||
|- | |- | ||
| | | 110 || GetServiceEntryRequirementCacheForLogin || | ||
|- | |- | ||
| | | 111 || InvalidateServiceEntryRequirementCache || | ||
|- | |- | ||
| | | 113 || GetServiceEntryRequirementCacheForOnlinePlay || Takes a total of 0x8-bytes of input, returns a total of 0x4-bytes of output. | ||
|- | |- | ||
| | | 120 || GetNintendoAccountId || | ||
|- | |- | ||
| | | 121 || CalculateNintendoAccountAuthenticationFingerprint || | ||
|- | |- | ||
| | | 130 || GetNintendoAccountUserResourceCache || | ||
|- | |- | ||
| | | 131 || RefreshNintendoAccountUserResourceCacheAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 132 || RefreshNintendoAccountUserResourceCacheAsyncIfSecondsElapsed || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 133 || GetNintendoAccountVerificationUrlCache || | ||
|- | |- | ||
| | | 134 || RefreshNintendoAccountVerificationUrlCacheAsync || | ||
|- | |- | ||
| | | 135 || RefreshNintendoAccountVerificationUrlCacheAsyncIfSecondsElapsed || | ||
|- | |- | ||
| | | 136 || [19.0.0+] GetNintendoAccountUserResourceCache || | ||
|- | |- | ||
| | | 140 || GetNetworkServiceLicenseCache || | ||
|- | |- | ||
| | | 141 || RefreshNetworkServiceLicenseCacheAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 142 || RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 143 || [15.0.0+] GetNetworkServiceLicenseCacheEx || | ||
|- | |- | ||
| | | 150 || CreateAuthorizationRequest || Returns an [[#IAuthorizationRequest]]. | ||
|- | |- | ||
| | | 160 || [15.0.0+] RequiresUpdateNetworkServiceAccountIdTokenCache || | ||
|- | |- | ||
| | | 161 || [16.0.0+] RequireReauthenticationOfNetworkServiceAccount || | ||
|- | |- | ||
| | | 180 || [18.0.0-19.0.1] GetRequestForNintendoAccountReauthentication || | ||
|- | |- | ||
| | | 181 || [20.0.0+] CreateProcedureToReauthenticateNintendoAccount || | ||
|- | |- | ||
| | | 182 || [20.0.0+] ResumeProcedureToReauthenticateNintendoAccount || | ||
|} | |} | ||
== IFloatingRegistrationRequest == | |||
This is "nn::account::baas::IFloatingRegistrationRequest". | |||
Added with [3.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,498: | Line 3,573: | ||
! Cmd || Name || Notes | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 || | | 0 || GetSessionId || | ||
|- | |- | ||
| | | 12 || GetAccountId || | ||
|- | |- | ||
| | | 13 || GetLinkedNintendoAccountId || | ||
|- | |- | ||
| | | 14 || GetNickname || | ||
|- | |- | ||
| | | 15 || GetProfileImage || | ||
|- | |- | ||
| | | 16 || [18.0.0+] GetProfileLargeImage || | ||
|- | |- | ||
| | | 21 || LoadIdTokenCache || | ||
|- | |- | ||
| | | 100 || RegisterUser ([1.0.0-3.0.2] RegisterAsync) || [1.0.0-3.0.2] Used to return an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 101 || RegisterUserWithUid ([1.0.0-3.0.2] RegisterWithUidAsync) || [1.0.0-3.0.2] Used to return an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 102 || [4.0.0+] RegisterNetworkServiceAccountAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 103 || [4.0.0+] RegisterNetworkServiceAccountWithUidAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 110 || SetSystemProgramIdentification || | ||
|- | |- | ||
| | | 111 || EnsureIdTokenCacheAsync || Returns an [[#IAsyncContext]]. | ||
|} | |} | ||
= | == IAdministrator == | ||
This is "nn:: | This is "nn::account::baas::IAdministrator". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 || | | 0 || CheckAvailability || | ||
|- | |- | ||
| 1 || | | 1 || GetAccountId || | ||
| | |||
|- | |- | ||
| 2 || EnsureIdTokenCacheAsync || Returns an [[#IAsyncContext]]. | |||
|- | |- | ||
| | | 3 || [19.0.0+] LoadIdTokenCacheDeprecated ([1.0.0-18.1.0] LoadIdTokenCache) || | ||
|- | |- | ||
| 4 || [19.0.0+] LoadIdTokenCache || | |||
|- | |- | ||
| | | 100 || SetSystemProgramIdentification || | ||
|- | |- | ||
| | | 101 || [7.0.0+] RefreshNotificationTokenAsync | ||
|- | |- | ||
| | | 110 || [4.0.0+] GetServiceEntryRequirementCache || | ||
|- | |- | ||
| | | 111 || [4.0.0+] InvalidateServiceEntryRequirementCache || | ||
|- | |- | ||
| | | 112 || [4.0.0-6.2.0] InvalidateTokenCache || | ||
|- | |- | ||
| 113 || [6.1.0+] GetServiceEntryRequirementCacheForOnlinePlay || Takes a total of 0x8-bytes of input, returns a total of 0x4-bytes of output. | |||
|- | |- | ||
| | | 120 || GetNintendoAccountId || | ||
|- | |- | ||
| | | 121 || [9.0.0+] CalculateNintendoAccountAuthenticationFingerprint || | ||
|- | |- | ||
| | | 130 || GetNintendoAccountUserResourceCache || | ||
|- | |- | ||
| | | 131 || RefreshNintendoAccountUserResourceCacheAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 132 || RefreshNintendoAccountUserResourceCacheAsyncIfSecondsElapsed || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 133 || [9.0.0+] GetNintendoAccountVerificationUrlCache || | ||
|- | |- | ||
| | | 134 || [9.0.0+] RefreshNintendoAccountVerificationUrlCacheAsync || | ||
|- | |- | ||
| 135 || [9.0.0+] RefreshNintendoAccountVerificationUrlCacheAsyncIfSecondsElapsed || | |||
|- | |- | ||
| | | 136 || [19.0.0+] GetNintendoAccountUserResourceCache || | ||
|- | |- | ||
| | | 140 || [5.0.0+] GetNetworkServiceLicenseCache || | ||
|- | |- | ||
| | | 141 || [5.0.0+] RefreshNetworkServiceLicenseCacheAsync || | ||
|- | |- | ||
| | | 142 || [5.0.0+] RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed || | ||
|- | |- | ||
| | | 143 || [15.0.0+] GetNetworkServiceLicenseCacheEx || | ||
| | |||
|- | |- | ||
| 150 || CreateAuthorizationRequest || Returns an [[#IAuthorizationRequest]]. | |||
|- | |- | ||
| | | 160 || [15.0.0+] RequiresUpdateNetworkServiceAccountIdTokenCache || | ||
|- | |- | ||
| | | 161 || [16.0.0+] RequireReauthenticationOfNetworkServiceAccount || | ||
|- | |- | ||
| | | 180 || [18.0.0-19.0.1] GetRequestForNintendoAccountReauthentication || | ||
|- | |- | ||
| | | 181 || [20.0.0+] CreateProcedureToReauthenticateNintendoAccount || | ||
|- | |- | ||
| | | 182 || [20.0.0+] ResumeProcedureToReauthenticateNintendoAccount || | ||
|- | |- | ||
| | | 200 || IsRegistered || | ||
|- | |- | ||
| | | 201 || RegisterAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 202 || UnregisterAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 203 || DeleteRegistrationInfoLocally || | ||
|- | |- | ||
| 204 || [19.0.0-19.0.1] UnregisterDeviceAsync || | |||
|- | |- | ||
| | | 220 || SynchronizeProfileAsync || Returns an [[#IAsyncContext]]. | ||
| | |||
|- | |- | ||
| | | 221 || UploadProfileAsync || Returns an [[#IAsyncContext]]. | ||
| | |||
|- | |- | ||
| | | 222 || SynchronizeProfileAsyncIfSecondsElapsed || Returns an [[#IAsyncContext]]. | ||
| | |||
|- | |- | ||
| | | 223 || [19.0.0+] DownloadProfileAsync || | ||
| | |||
|- | |- | ||
| | | 250 || IsLinkedWithNintendoAccount || | ||
| | |||
|- | |- | ||
| | | 251 || CreateProcedureToLinkWithNintendoAccount || Returns an [[#IOAuthProcedureForNintendoAccountLinkage]]. | ||
| | |- | ||
| 252 || ResumeProcedureToLinkWithNintendoAccount || Returns an [[#IOAuthProcedureForNintendoAccountLinkage]]. | |||
|- | |- | ||
| | | 255 || CreateProcedureToUpdateLinkageStateOfNintendoAccount || Returns an [[#IOAuthProcedure]]. | ||
| | |||
|- | |- | ||
| | | 256 || ResumeProcedureToUpdateLinkageStateOfNintendoAccount || Returns an [[#IOAuthProcedure]]. | ||
| | |||
|- | |- | ||
| | | 260 || [3.0.0+] CreateProcedureToLinkNnidWithNintendoAccount || Returns an [[#IOAuthProcedure]]. | ||
| | |||
|- | |- | ||
| | | 261 || [3.0.0+] ResumeProcedureToLinkNnidWithNintendoAccount || Returns an [[#IOAuthProcedure]]. | ||
| | |||
|- | |- | ||
| | | 280 || ProxyProcedureToAcquireApplicationAuthorizationForNintendoAccount || Returns an [[#IOAuthProcedure]]. | ||
| | |||
|- | |- | ||
| | | 290 || [8.0.0+] GetRequestForNintendoAccountUserResourceView || | ||
| | |||
|- | |- | ||
| | | 300 || [6.0.0+] TryRecoverNintendoAccountUserStateAsync || Returns an [[#IAsyncContext]]. | ||
| | |||
|- | |- | ||
| | | 400 || [6.1.0+] IsServiceEntryRequirementCacheRefreshRequiredForOnlinePlay || Takes a total of 0x8-bytes of input, returns an output u8. | ||
| | |||
|- | |- | ||
| | | 401 || [6.1.0+] RefreshServiceEntryRequirementCacheForOnlinePlayAsync || Takes a total of 0x8-bytes of input, returns an [[#IAsyncContext]]. | ||
| | |||
|- | |- | ||
| | | 900 || [9.0.0+] GetAuthenticationInfoForWin || | ||
| | |||
|- | |- | ||
| | | 901 || [9.0.0+] ImportAsyncForWin || | ||
| | |||
|- | |- | ||
| | | 997 || DebugUnlinkNintendoAccountAsync || Returns an [[#IAsyncContext]]. | ||
| | |- | ||
| 998 || DebugSetAvailabilityErrorDetail || | |||
|} | |} | ||
= | == IAuthorizationRequest == | ||
This is "nn:: | This is "nn::account::nas::IAuthorizationRequest". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name || Notes | ||
|- | |||
| 0 || GetSessionId || | |||
|- | |- | ||
| | | 10 || InvokeWithoutInteractionAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 19 || IsAuthorized || | ||
|- | |- | ||
| | | 20 || GetAuthorizationCode || | ||
|- | |- | ||
| | | 21 || GetIdToken || | ||
|- | |- | ||
| | | 22 || GetState || | ||
|} | |} | ||
= | == IOAuthProcedure == | ||
This is "nn:: | This is "nn::account::http::IOAuthProcedure". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name || Notes | ||
|- | |- | ||
| | | 0 || PrepareAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 1 || GetRequest || | ||
|- | |- | ||
| | | 2 || ApplyResponse || | ||
|- | |- | ||
| | | 3 || ApplyResponseAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 10 || Suspend || | ||
|} | |} | ||
= | == IOAuthProcedureForExternalNsa == | ||
This is "nn:: | This is "nn::account::nas::IOAuthProcedureForExternalNsa". | ||
Added with [3.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name || Notes | ||
|- | |||
| 0 || PrepareAsync || Returns an [[#IAsyncContext]]. | |||
|- | |||
| 1 || GetRequest || | |||
|- | |||
| 2 || ApplyResponse || | |||
|- | |||
| 3 || ApplyResponseAsync || Returns an [[#IAsyncContext]]. | |||
|- | |||
| 10 || Suspend || | |||
|- | |- | ||
| | | 100 || GetAccountId || | ||
|- | |- | ||
| | | 101 || GetLinkedNintendoAccountId || | ||
|- | |- | ||
| | | 102 || GetNickname || | ||
|- | |- | ||
| | | 103 || GetProfileImage || | ||
|- | |- | ||
| | | 104 || [18.0.0+] GetProfileLargeImage || | ||
|} | |} | ||
= | == IOAuthProcedureForNintendoAccountLinkage == | ||
This is "nn:: | This is "nn::account::nas::IOAuthProcedureForNintendoAccountLinkage". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 || | | 0 || PrepareAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| 1 || | | 1 || GetRequest || | ||
|- | |- | ||
| 2 || | | 2 || ApplyResponse || | ||
|- | |||
| 3 || ApplyResponseAsync || Returns an [[#IAsyncContext]]. | |||
|- | |||
| 10 || Suspend || | |||
|- | |- | ||
| | | 100 || GetRequestWithTheme || | ||
|- | |- | ||
| | | 101 || IsNetworkServiceAccountReplaced || | ||
|- | |- | ||
| 5 || | | 199 || [2.0.0-5.1.0] GetUrlForIntroductionOfExtraMembership || | ||
|- | |- | ||
| | | 200 || [16.0.0+] ApplyAsyncWithAuthorizedToken || | ||
|} | |} | ||
= | == INotifier == | ||
This is "nn:: | This is "nn::account::detail::INotifier". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || GetSystemEvent | ||
|} | |} | ||
= | == IProfile == | ||
This is | This is "nn::account::profile::IProfile". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#Get]] | ||
|- | |- | ||
| | | 1 || [[#GetBase]] | ||
|- | |||
| 10 || [[#GetImageSize]] | |||
|- | |||
| 11 || [[#LoadImage]] | |||
|- | |||
| 20 || [18.0.0+] GetLargeImageSize | |||
|- | |||
| 21 || [18.0.0+] LoadLargeImage | |||
|- | |||
| 30 || [18.0.0+] GetImageId | |||
|} | |} | ||
= | === Get === | ||
This is | Takes an output type-0x1A buffer for [[#UserData]], returns an output [[#ProfileBase]]. | ||
=== GetBase === | |||
No input, returns an output [[#ProfileBase]]. | |||
=== GetImageSize === | |||
No input, returns an output u32 for the size of the image buffer. | |||
=== LoadImage === | |||
Takes an output type-0x6 buffer, returns the same output u32 as [[#GetImageSize]]. | |||
The output buffer contains the JPEG profile image icon. This is valid for both Miis and character icons. | |||
== IProfileEditor == | |||
This is "nn::account::profile::IProfileEditor". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#Get]] | ||
|- | |- | ||
| | | 1 || [[#GetBase]] | ||
|- | |- | ||
| | | 10 || [[#GetImageSize]] | ||
|- | |- | ||
| | | 11 || [[#LoadImage]] | ||
|- | |- | ||
| | | 20 || [18.0.0+] GetLargeImageSize | ||
|- | |- | ||
| | | 21 || [18.0.0+] LoadLargeImage | ||
| | |- | ||
| 30 || [18.0.0+] GetImageId | |||
|- | |- | ||
| 100 || [[#Store]] | |||
|- | |- | ||
| | | 101 || [[#StoreWithImage]] | ||
|- | |- | ||
| | | 110 || [18.0.0+] StoreWithLargeImage | ||
|} | |} | ||
= | === Store === | ||
Takes a [[#ProfileBase]] and an input type-0x19 buffer for [[#UserData]]. | |||
= | === StoreWithImage === | ||
Takes a [[#ProfileBase]], an input type-0x19 buffer for [[#UserData]], and an input type-0x5 buffer. | |||
= | == IAsyncContext == | ||
This is "nn:: | This is "nn::account::detail::IAsyncContext". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |||
| 0 || GetSystemEvent | |||
|- | |- | ||
| | | 1 || Cancel | ||
|- | |- | ||
| | | 2 || HasDone | ||
|- | |- | ||
| | | 3 || GetResult | ||
|} | |} | ||
== ISessionObject == | |||
This is "nn::account::detail::ISessionObject". | |||
This is "nn:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |- | ||
| | | 999 || Dummy | ||
|} | |} | ||
= acc:u0 = | |||
This is "nn::account::IAccountServiceForApplication". | |||
[13.0.0+] This was moved from [[Account_services|account]]. | |||
This | This is only available when the output from [[Process_Manager_services|pm:bm]] GetBootMode is Normal/Maintenance. | ||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name || Notes | |||
{| class="wikitable" border="1" | |- | ||
|- | | 0 || GetUserCount || | ||
! | |- | ||
| 1 || GetUserExistence || | |||
|- | |||
|- | | 2 || ListAllUsers || | ||
| | |- | ||
|- | | 3 || ListOpenUsers || | ||
| | |- | ||
|- | | 4 || GetLastOpenedUser || | ||
| | |- | ||
|- | | 5 || GetProfile || Takes an input userID, returns an [[#IProfile]]. | ||
| | |- | ||
|- | | 6 || [3.0.0+] GetProfileDigest || | ||
| | |- | ||
|- | | 50 || [[#IsUserRegistrationRequestPermitted]] || | ||
| | |- | ||
|- | | 51 || TrySelectUserWithoutInteractionDeprecated ([1.0.0-18.1.0] [[#TrySelectUserWithoutInteraction]]) || | ||
| | |- | ||
|- | | 52 || [19.0.0+] TrySelectUserWithoutInteraction || | ||
| | |- | ||
|- | | 60 || [5.0.0-5.1.0] ListOpenContextStoredUsers || | ||
| | |- | ||
|- | | 99 || [6.0.0+] DebugActivateOpenContextRetention || No input, returns an [[#ISessionObject]]. | ||
| | |- | ||
|- | | 100 || [[#InitializeApplicationInfoV0]] || | ||
| | |- | ||
| | | 101 || GetBaasAccountManagerForApplication || Takes an input userID, returns an [[#IManagerForApplication]]. | ||
|- | |||
| 102 || AuthenticateApplicationAsync || Returns an [[#IAsyncContext]]. | |||
|- | |||
| 103 || [4.0.0+] CheckNetworkServiceAvailabilityAsync || Returns an [[#IAsyncContext]]. | |||
|- | |||
| | | 110 || StoreSaveDataThumbnail || | ||
|- | |||
| 111 || ClearSaveDataThumbnail || | |||
|- | |||
|- | | 120 || CreateGuestLoginRequest || Returns an [[#IGuestLoginRequest]]. | ||
| | |- | ||
| 130 || [5.0.0+] LoadOpenContext || | |||
|- | |||
| 131 || [6.0.0+] ListOpenContextStoredUsers || | |||
|- | |||
| 140 || [6.0.0+] [[#InitializeApplicationInfoV1]] || | |||
|- | |||
| 141 || [6.0.0+] ListQualifiedUsers || | |||
|- | |||
| 150 || [6.0.0+] IsUserAccountSwitchLocked || | |||
|- | |||
| 160 || [13.0.0+] InitializeApplicationInfoV2 || | |||
|} | |||
InitializeApplicationInfo* is used by the user-process during service init. | |||
== InitializeApplicationInfoV0 == | |||
Takes a PID and an input u64 pid_placeholder, no output. | |||
== InitializeApplicationInfoV1 == | |||
Takes a PID and an input u64 pid_placeholder, no output. | |||
== IGuestLoginRequest == | |||
This is "nn::account::baas::IGuestLoginRequest". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || GetSessionId | |||
|- | |||
| 11 || [1.0.0-2.3.0] | |||
|- | |||
| 12 || GetAccountId | |||
|- | |||
| 13 || GetLinkedNintendoAccountId | |||
|- | |||
| 14 || GetNickname | |||
|- | |||
| 15 || GetProfileImage | |||
|- | |||
| 16 || [18.0.0+] GetProfileLargeImage | |||
|- | |||
| 21 || [3.0.0+] LoadIdTokenCache | |||
|} | |||
== IManagerForApplication == | |||
This is "nn::account::baas::IManagerForApplication". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name || Notes | |||
|- | |||
| 0 || CheckAvailability || | |||
|- | |||
| 1 || GetAccountId || | |||
|- | |||
| 2 || EnsureIdTokenCacheAsync || Returns an [[#IAsyncContext]]. | |||
|- | |||
| 3 || LoadIdTokenCache || | |||
|- | |||
| 130 || GetNintendoAccountUserResourceCacheForApplication || | |||
|- | |||
| 150 || CreateAuthorizationRequest || Returns an [[#IAuthorizationRequest]]. | |||
|- | |||
| 160 || [5.0.0+] StoreOpenContext || | |||
|- | |||
| 170 || [13.0.0+] EnsureIdTokenCacheForOnlinePlayAsync ([6.0.0-12.1.0] LoadNetworkServiceLicenseKindAsync) || No input, returns an [[#IAsyncContextForLoginForOnlinePlay]] ([6.0.0-12.1.0] [[#IAsyncNetworkServiceLicenseKindContext]]). | |||
|} | |||
== IAsyncNetworkServiceLicenseKindContext == | |||
This is "nn::account::detail::IAsyncNetworkServiceLicenseKindContext". | |||
This was added with [6.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name || Notes | |||
|- | |||
| 0 || GetSystemEvent || | |||
|- | |||
| 1 || Cancel || | |||
|- | |||
| 2 || HasDone || | |||
|- | |||
| 3 || GetResult || | |||
|- | |||
| 100 || GetNetworkServiceLicenseKind || | |||
|} | |||
== IAsyncContextForLoginForOnlinePlay == | |||
This is "nn::account::baas::IAsyncContextForLoginForOnlinePlay". | |||
This was added with [13.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name || Notes | |||
|- | |||
| 0 || GetSystemEvent || | |||
|- | |||
| 1 || Cancel || | |||
|- | |||
| 2 || HasDone || | |||
|- | |||
| 3 || GetResult || | |||
|- | |||
| 100 || GetNetworkServiceLicenseInfoForOnlinePlay || | |||
|} | |||
= acc:u1 = | |||
This is "nn::account::IAccountServiceForSystemService". | |||
[13.0.0+] This was moved from [[Account_services|account]]. | |||
This is only available when the output from [[Process_Manager_services|pm:bm]] GetBootMode is Normal/Maintenance. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name || Notes | |||
|- | |||
| 0 || GetUserCount || | |||
|- | |||
| 1 || GetUserExistence || | |||
|- | |||
| 2 || ListAllUsers || | |||
|- | |||
| 3 || ListOpenUsers || | |||
|- | |||
| 4 || GetLastOpenedUser || | |||
|- | |||
| 5 || GetProfile || Returns an [[#IProfile]]. | |||
|- | |||
| 6 || [3.0.0+] GetProfileDigest || | |||
|- | |||
| 50 || [[#IsUserRegistrationRequestPermitted]] || | |||
|- | |||
| 51 || TrySelectUserWithoutInteractionDeprecated ([1.0.0-18.1.0] [[#TrySelectUserWithoutInteraction]]) || | |||
|- | |||
| 52 || [19.0.0+] TrySelectUserWithoutInteraction || | |||
|- | |||
| 60 || [5.0.0-5.1.0] ListOpenContextStoredUsers || | |||
|- | |||
| 99 || [6.0.0+] DebugActivateOpenContextRetention || No input, returns an [[#ISessionObject]]. | |||
|- | |||
| 100 || GetUserRegistrationNotifier || Returns an [[#INotifier]]. | |||
|- | |||
| 101 || GetUserStateChangeNotifier || Returns an [[#INotifier]]. | |||
|- | |||
| 102 || GetBaasAccountManagerForSystemService || Returns an [[#IManagerForSystemService]]. | |||
|- | |||
| 103 || GetBaasUserAvailabilityChangeNotifier || Returns an [[#INotifier]]. | |||
|- | |||
| 104 || GetProfileUpdateNotifier || Returns an [[#INotifier]]. | |||
|- | |||
| 105 || [4.0.0+] CheckNetworkServiceAvailabilityAsync || Returns an [[#IAsyncContext]]. | |||
|- | |||
| 106 || [9.0.0+] GetProfileSyncNotifier || | |||
|- | |||
| 110 || StoreSaveDataThumbnail || | |||
|- | |||
| 111 || ClearSaveDataThumbnail || | |||
|- | |||
| 112 || LoadSaveDataThumbnail || | |||
|- | |||
| 113 || [5.0.0+] GetSaveDataThumbnailExistence || | |||
|- | |||
| 120 || [10.0.0+] ListOpenUsersInApplication || | |||
|- | |||
| 130 || [6.0.0+] ActivateOpenContextRetention || Takes a total of 0x8-bytes of input, returns an [[#ISessionObject]]. | |||
|- | |||
| 140 || [6.0.0+] ListQualifiedUsers || | |||
|- | |||
| 150 || [10.0.0-10.2.0] AuthenticateApplicationAsync || | |||
|- | |||
| 151 || [12.0.0+] EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync || | |||
|- | |||
| 152 || [12.0.0+] LoadSignedDeviceIdentifierCacheForNintendoAccount || | |||
|- | |||
| 170 || [13.0.0+] GetNasOp2MembershipStateChangeNotifier || | |||
|- | |||
| 190 || [1.0.0-9.2.0] GetUserLastOpenedApplication || | |||
|- | |||
| 191 || [7.0.0-19.0.1] UpdateNotificationReceiverInfo ([5.0.0-5.1.0] ActivateOpenContextHolder) || | |||
|- | |||
| 401 || [18.0.0+] GetPinCodeLength || | |||
|- | |||
| 402 || [18.0.0-19.0.1] GetPinCode || | |||
|- | |||
| 403 || [20.0.0+] GetPinCodeParity || | |||
|- | |||
| 404 || [20.0.0+] VerifyPinCode || | |||
|- | |||
| 405 || [20.0.0+] IsPinCodeVerificationForbidden || | |||
|- | |||
| 997 || [3.0.0+] DebugInvalidateTokenCacheForUser || | |||
|- | |||
| 998 || DebugSetUserStateClose || | |||
|- | |||
| 999 || DebugSetUserStateOpen || | |||
|} | |||
[10.0.0+] DebugSetUserStateClose/DebugSetUserStateOpen now takes an additional 8-bytes of input. | |||
== IOAuthProcedureForUserRegistration == | |||
This is "nn::account::nas::IOAuthProcedureForUserRegistration". | |||
This was added with [8.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name || Notes | |||
|- | |||
| 0 || PrepareAsync || No input, returns an [[#IAsyncContext]]. | |||
|- | |||
| 1 || GetRequest || | |||
|- | |||
| 2 || ApplyResponse || | |||
|- | |||
| 3 || ApplyResponseAsync || Takes a type-0x9 input buffer, returns an [[#IAsyncContext]]. | |||
|- | |||
| 10 || Suspend || | |||
|- | |||
| 100 || GetAccountId || | |||
|- | |||
| 101 || GetLinkedNintendoAccountId || | |||
|- | |||
| 102 || GetNickname || | |||
|- | |||
| 103 || GetProfileImage || | |||
|- | |||
| 104 || [18.0.0+] GetProfileLargeImage || | |||
|- | |||
| 110 || RegisterUserAsync || No input, returns an [[#IAsyncContext]]. | |||
|- | |||
| 111 || GetUid || | |||
|- | |||
| 200 || [17.0.0+] ApplyResponseForUserCreationAsync || | |||
|- | |||
| 205 || [17.0.0+] SuspendAfterApplyResponse || | |||
|- | |||
| 210 || [17.0.0+] IsProfileAvailable || | |||
|- | |||
| 220 || [17.0.0+] RegisterUserAsyncWithoutProfile || | |||
|- | |||
| 221 || [17.0.0+] RegisterUserWithProfileAsync || | |||
|- | |||
| 230 || [18.0.0+] RegisterUserWithLargeImageProfileAsync || | |||
|} | |||
= ApplicationRecord = | |||
This is "nn::ns::ApplicationRecord". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x8 | |||
| [[NCM_services#ApplicationId|Id]] | |||
|- | |||
| 0x8 | |||
| 0x1 | |||
| [[#ApplicationEvent|LastEvent]] | |||
|- | |||
| 0x9 | |||
| 0x1 | |||
| Attributes | |||
|- | |||
| 0xA | |||
| 0x6 | |||
| Reserved | |||
|- | |||
| 0x10 | |||
| 0x8 | |||
| LastUpdated | |||
|} | |||
= ApplicationEvent = | |||
This is "nn::ns::ApplicationEvent". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || Launched | |||
|- | |||
| 1 || LocalInstalled | |||
|- | |||
| 2 || DownloadStarted | |||
|- | |||
| 3 || GameCardInserted | |||
|- | |||
| 4 || Touched | |||
|- | |||
| 5 || | |||
|- | |||
| 6 || | |||
|- | |||
| 7 || | |||
|- | |||
| 8 || | |||
|- | |||
| 9 || | |||
|- | |||
| 10 || | |||
|- | |||
| 11 || | |||
|- | |||
| 12 || | |||
|- | |||
| 13 || | |||
|- | |||
| 14 || | |||
|- | |||
| 15 || | |||
|- | |||
| 16 || | |||
|} | |||
= ApplicationControlSource = | |||
This is "nn::ns::ApplicationControlSource". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 | |||
| CacheOnly | |||
|- | |||
| 1 | |||
| Storage | |||
|- | |||
| 2 | |||
| StorageOnly | |||
|} | |||
= ApplicationContentMetaStatus = | |||
This is "nn::ns::ApplicationContentMetaStatus". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x1 | |||
| [[NCM_services#ContentMetaType|Type]] | |||
|- | |||
| 0x1 | |||
| 0x1 | |||
| [[NCM_services#StorageId|InstalledStorage]] | |||
|- | |||
| 0x2 | |||
| 0x1 | |||
| [[#ContentMetaRightsCheck|RightsCheck]] | |||
|- | |||
| 0x3 | |||
| 0x1 | |||
| Reserved | |||
|- | |||
| 0x4 | |||
| 0x4 | |||
| Version | |||
|- | |||
| 0x8 | |||
| 0x8 | |||
| [[NCM_services#ApplicationId|Id]] | |||
|} | |||
= ContentMetaRightsCheck = | |||
This is "nn::ns::ContentMetaRightsCheck". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 | |||
| NotChecked | |||
|- | |||
| 1 | |||
| NotNeeded | |||
|- | |||
| 2 | |||
| CommonRights | |||
|- | |||
| 3 | |||
| PersonalizedRights | |||
|- | |||
| 4 | |||
| NoRights | |||
|} | |||
= VersionListData = | |||
This is "nn::ns::VersionListData". | |||
= ApplicationUpdateInfo = | |||
This is "nn::ns::ApplicationUpdateInfo". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || UpToDate | |||
|- | |||
| 1 || Updatable | |||
|} | |||
= ApplicationOccupiedSize = | |||
This is "nn::ns::ApplicationOccupiedSize". This is a 0x80-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x20 * 4 || Array of [[#ApplicationOccupiedSizeEntity]] | |||
|} | |||
= ApplicationOccupiedSizeEntity = | |||
This is "nn::ns::ApplicationOccupiedSizeEntity". This is a 0x20-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x1 || [[NCM_services#StorageId|StorageId]] | |||
|- | |||
| 0x1 || 0x7 || Reserved | |||
|- | |||
| 0x8 || 0x8 || AppSize | |||
|- | |||
| 0x10 || 0x8 || PatchSize | |||
|- | |||
| 0x18 || 0x8 || AocSize | |||
|} | |||
= ProgressForDeleteUserSaveDataAll = | |||
This is "nn::ns::detail::ProgressForDeleteUserSaveDataAll". This is a 0x28-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x8 || StartedAt | |||
|- | |||
| 0x8 || 0x4 || Count | |||
|- | |||
| 0xC || 0x4 || Reserved | |||
|- | |||
| 0x10 || 0x8 || SizeInBytes | |||
|- | |||
| 0x18 || 0x1 || IsSystem | |||
|- | |||
| 0x19 || 0x7 || Reserved | |||
|- | |||
| 0x20 || 0x8 || ApplicationId | |||
|} | |||
= ApplicationViewDeprecated = | |||
This is "nn::ns::ApplicationViewDeprecated". This is a 0x40-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]] | |||
|- | |||
| 0x8 || 0x4 || Version | |||
|- | |||
| 0xC || 0x4 || [[#ApplicationViewFlag|Flag]] | |||
|- | |||
| 0x10 || 0x18 || [[#ApplicationDownloadProgress|Progress]] | |||
|- | |||
| 0x28 || 0x18 || [[#ApplicationApplyDeltaProgress|ApplyProgress]] | |||
|} | |||
This is converted from [[#ApplicationView]] by [[#GetApplicationViewDeprecated]] on newer system-versions as follows: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x20 || Same as [[#ApplicationView]] +0x0. | |||
|- | |||
| 0x20 || 0x4 || Same as [[#ApplicationView]] +0x20. | |||
|- | |||
| 0x24 || 0x2 || Same as [[#ApplicationView]] +0x24. | |||
|- | |||
| 0x26 || 0x2 || Cleared to 0. | |||
|- | |||
| 0x28 || 0x10 || Same as [[#ApplicationView]] +0x30. | |||
|- | |||
| 0x38 || 0x4 || Same as [[#ApplicationView]] +0x40. | |||
|- | |||
| 0x3C || 0x1 || Same as [[#ApplicationView]] +0x44. | |||
|- | |||
| 0x3D || 0x2 || Cleared to 0. | |||
|- | |||
| 0x3F || 0x1 || Cleared to 0. | |||
|} | |||
= ApplicationViewFlag = | |||
This is "nn::ns::ApplicationViewFlag". This is a 32-bit flag. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Bit | |||
! Description | |||
|- | |||
| 0 | |||
| | |||
|- | |||
| 1 | |||
| | |||
|- | |||
| 2 | |||
| | |||
|- | |||
| 3 | |||
| | |||
|- | |||
| 4 | |||
| | |||
|- | |||
| 5 | |||
| | |||
|- | |||
| 6 | |||
| | |||
|- | |||
| 7 | |||
| | |||
|- | |||
| 8 | |||
| | |||
|- | |||
| 9 | |||
| | |||
|- | |||
| 10 | |||
| | |||
|- | |||
| 11 | |||
| | |||
|- | |||
| 12 | |||
| | |||
|- | |||
| 13 | |||
| | |||
|- | |||
| 14 | |||
| | |||
|- | |||
| 15 | |||
| | |||
|- | |||
| 16 | |||
| | |||
|- | |||
| 17 | |||
| | |||
|} | |||
= ApplicationDownloadProgress = | |||
This is "nn::ns::ApplicationDownloadProgress". This is a 0x18-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x8 || Downloaded | |||
|- | |||
| 0x8 || 0x8 || Total | |||
|- | |||
| 0x10 || 0x4 || LastResult | |||
|- | |||
| 0x14 || 0x1 || [[#ApplicationDownloadState|State]] | |||
|- | |||
| 0x15 || 0x3 || Reserved | |||
|} | |||
= ApplicationApplyDeltaProgress = | |||
This is "nn::ns::ApplicationApplyDeltaProgress". This is a 0x18-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x8 || Applied | |||
|- | |||
| 0x8 || 0x8 || Total | |||
|- | |||
| 0x10 || 0x4 || LastResult | |||
|- | |||
| 0x14 || 0x1 || [[#ApplicationApplyDeltaState|State]] | |||
|- | |||
| 0x15 || 0x3 || Reserved | |||
|} | |||
= ApplicationDownloadState = | |||
This is "nn::ns::ApplicationDownloadState". This is an u8. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || Runnable | |||
|- | |||
| 1 || Suspended | |||
|- | |||
| 2 || NotEnoughSpace | |||
|- | |||
| 3 || Fatal | |||
|- | |||
| 4 || Finished | |||
|} | |||
= ApplicationApplyDeltaState = | |||
This is "nn::ns::ApplicationApplyDeltaState". This is an u8. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || Applying | |||
|- | |||
| 1 || Suspended | |||
|- | |||
| 2 || NotEnoughSpace | |||
|- | |||
| 3 || Fatal | |||
|- | |||
| 4 || NoTask | |||
|- | |||
| 5 || WaitApply | |||
|- | |||
| 6 || Applied | |||
|} | |||
= ApplicationView = | |||
This is "nn::ns::ApplicationView". This is a 0x50-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]] | |||
|- | |||
| 0x8 || 0x4 || ? | |||
|- | |||
| 0xC || 0x4 || Flags | |||
|- | |||
| 0x10 || 0x40 || ? | |||
|} | |||
= ApplicationViewWithPromotionInfo = | |||
This is a 0x70-byte struct. | |||
[20.0.0+] This is a 0x78-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x50 || [[#ApplicationView]] | |||
|- | |||
| 0x50 || 0x20 || [[#PromotionInfo]] | |||
|} | |||
= PromotionInfo = | |||
This is a 0x20-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x8 || PosixTime start_timestamp. | |||
|- | |||
| 0x8 || 0x8 || PosixTime end_timestamp. | |||
|- | |||
| 0x10 || 0x8 || Remaining time until the promotion ends, in nanoseconds ({end_timestamp - current_time} converted to nanoseconds). | |||
|- | |||
| 0x18 || 0x4 || Not set, left at zero. | |||
|- | |||
| 0x1C || 0x1 || Flags. Bit0: whether the PromotionInfo is valid (including bit1). Bit1 clear: u64 +0x10 is set. | |||
|- | |||
| 0x1D || 0x3 || Padding | |||
|} | |||
= ApplicationResourceType = | |||
This is "nn::ns::ApplicationResourceType". This is an u8. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || ApplicationResource | |||
|- | |||
| 1 || MicroApplicationResource | |||
|} | |||
= ApplicationErrorCodeCategory = | |||
This is "nn::ns::ApplicationErrorCodeCategory". This is an u64. | |||
= NoDownloadRightsErrorResolution = | |||
This is "nn::ns::NoDownloadRightsErrorResolution". | |||
= BackgroundNetworkUpdateState = | |||
This is "nn::ns::BackgroundNetworkUpdateState". This is an u8. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || None | |||
|- | |||
| 1 || InProgress | |||
|- | |||
| 2 || Ready | |||
|} | |||
Similar to [[#HasDownloaded]], [[#GetBackgroundNetworkUpdateState]] uses [[NIM_services|nim]] ListSystemUpdateTask and [[NIM_services|nim]] GetSystemUpdateTaskInfo. When ListSystemUpdateTask successfully returns a task and GetSystemUpdateTaskInfo is successful, the output value is set to: <code>1 + *((u8*)(taskinfo+0) == 0x3</code>. Otherwise, value=0. | |||
[[#GetBackgroundNetworkUpdateState]] always returns Result 0, however this will assert if GetSystemUpdateTaskInfo fails with ret!=0x3C89. | |||
= SystemUpdateProgress = | |||
This is "nn::ns::SystemUpdateProgress". This is a 0x10-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x8 || Loaded (this value can be larger than total_size when the async operation is finishing and when total_size is <=0, this current_size field may contain a progress value for when the total_size is not yet determined) | |||
|- | |||
| 0x8 || 0x8 || Total (this field is only valid when >0) | |||
|} | |||
Commands which have this as output will return 0 with the output cleared, when no task is available. | |||
= EulaDataPath = | |||
This is "nn::ns::detail::EulaDataPath". This is a 0x100-byte struct. | |||
This contains a file path. | |||
= SystemDeliveryInfo = | |||
This is "nn::ns::SystemDeliveryInfo". This is a 0x100-byte struct. | |||
Originally the SystemDeliveryInfo validation func verified that OldSystemUpdateId matched the installed SystemUpdate Id. [20.0.0+] The used (Old)SystemUpdateId as selected by SystemUpdateIdFlag must now match one of the Ids in [[System_Settings|system-setting]] <code>contents_delivery!acceptable_system_update_ids_string</code> (replaces the previously mentioned installed-SystemUpdate check). | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x4 || SystemDeliveryProtocolVersion. Must be <= to and match [[System_Settings|system-setting]] <code>contents_delivery!system_delivery_protocol_version</code>. | |||
|- | |||
| 0x4 || 0x4 || ApplicationDeliveryProtocolVersion. Loaded from [[System_Settings|system-setting]] <code>contents_delivery!application_delivery_protocol_version</code>. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation. | |||
|- | |||
| 0x8 || 0x1 || HasExFat. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation. | |||
|- | |||
| 0x9 || 0x3 || Reserved. | |||
|- | |||
| 0xC || 0x4 || SystemUpdateVersion. | |||
|- | |||
| 0x10 || 0x8 || OldSystemUpdateId. [20.0.0+] Always the NX Id: this is loaded from [[System_Settings|system-setting]] <code>contents_delivery!old_system_update_id</code>. | |||
|- | |||
| 0x18 || 0x1 || FirmwareVariationId. Used by [[#RequestSendSystemUpdate]]. Loaded from [[System_Settings|system-setting]] <code>ns.systemupdate!firmware_variation</code> or <code>ns.systemupdate!t_firmware_variation</code>, depending on the [[Settings_services|PlatformRegion]]. | |||
|- | |||
| 0x19 || 0x1 || UpdatableFirmwareGroupId. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation. Loaded from [[System_Settings|system-setting]] <code>ns.systemupdate!updatable_firmware_group_id</code> or <code>ns.systemupdate!t_updatable_firmware_group_id</code>, depending on the [[Settings_services|PlatformRegion]]. | |||
|- | |||
| 0x1A || 0x1 || PlatformRegion (0x00 = Unknown/Global, 0x01 = China). | |||
|- | |||
| 0x1B || 0x1 || [20.0.0+] SystemDeliveryInfoPlatform. Loaded from [[System_Settings|system-setting]] <code>ns.systemupdate!system_delivery_info_platform</code>. Elsewhere this is compared against the sys-setting, etc. | |||
|- | |||
| 0x1C || 0x1 || [20.0.0+] SystemUpdateIdFlag. When non-zero, SystemUpdateId is used instead of OldSystemUpdateId. Always set to 0x1 by [[#GetSystemDeliveryInfo]] with [20.0.0+]. | |||
|- | |||
| 0x1D || 0x3 || Padding | |||
|- | |||
| 0x20 || 0x8 || [20.0.0+] SystemUpdateId. See above. With [20.0.0+] [[#GetSystemDeliveryInfo]] now writes the Id here instead of OldSystemUpdateId (for the installed SystemUpdate). On S2 this is set to the Ounce Id. | |||
|- | |||
| 0x28 || 0xB8 || Reserved | |||
|- | |||
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes. | |||
|} | |||
= ApplicationDeliveryInfo = | |||
This is "nn::ns::ApplicationDeliveryInfo". This is a 0x100-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x4 || ApplicationDeliveryProtocolVersion. Loaded from [[System_Settings|system-setting]] <code>contents_delivery!application_delivery_protocol_version</code>. An error is thrown when [[System_Settings|system-setting]] <code>contents_delivery!application_delivery_protocol_version</code> < version, or when [[System_Settings|system-setting]] <code>contents_delivery!acceptable_application_delivery_protocol_version</code> > version. | |||
|- | |||
| 0x4 || 0x4 || Padding | |||
|- | |||
| 0x8 || 0x8 || ApplicationId. | |||
|- | |||
| 0x10 || 0x4 || ApplicationVersion. | |||
|- | |||
| 0x14 || 0x4 || RequiredApplicationVersion. | |||
|- | |||
| 0x18 || 0x4 || RequiredSystemVersion. | |||
|- | |- | ||
| | | 0x1C || 0x4 || u32 bitmask <code>nn::ns::ApplicationDeliveryAttributeTag</code>. [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]] sets this to the input u32. Bit30 and bit28 are additionally set, depending on [[NCM_services|ContentMetaType]] == Patch, etc. | ||
|- | |- | ||
| | | 0x20 || 0x1 || [20.0.0+] [[NCM_services|ContentMetaPlatform]]. Loaded from [[NCM_services|ncm]] IContentMetaDatabase GetPlatform. | ||
|- | |- | ||
| | | 0x21 || 0x1 || [20.0.0+] ProperProgramExists. Set to whether the bit for ProperProgramExists is set from [[NCM_services|ncm]] IContentMetaDatabase GetAttributes. | ||
|- | |- | ||
| | | 0x22 || 0xBE || Reserved | ||
|- | |- | ||
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes. Uses a different key than [[#SystemDeliveryInfo]]. | | 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes. Uses a different key than [[#SystemDeliveryInfo]]. |