NS services: Difference between revisions
No edit summary |
|||
(56 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 429: | Line 397: | ||
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 == | == ListApplicationContentMetaStatus == | ||
Takes a type-0x6 output buffer containing an array of | 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. | 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". | |||
= 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 likely a permissions check for service+command. | These commands check a state field for a command-specific bit and returns an error if not set, this is likely a permissions check for service+command. | ||
Line 767: | Line 687: | ||
|- | |- | ||
| 420 || [19.0.0+] CloneApplicationControlDataCacheForDebug | | 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]] | | 502 || [[#RequestCheckGameCardRegistration]] | ||
Line 789: | Line 723: | ||
|- | |- | ||
| 512 || [19.0.0+] IsGameCardApplicationRunning | | 512 || [19.0.0+] IsGameCardApplicationRunning | ||
|- | |||
| 513 || [20.0.0+] | |||
|- | |||
| 514 || [20.0.0+] | |||
|- | |||
| 515 || [20.0.0+] | |||
|- | |- | ||
| 600 || [[#CountApplicationContentMeta]] | | 600 || [[#CountApplicationContentMeta]] | ||
Line 864: | Line 804: | ||
| 916 || [11.0.0+] IsApplicationAutoDeleteDisabled | | 916 || [11.0.0+] IsApplicationAutoDeleteDisabled | ||
|- | |- | ||
| | | 917 || [20.0.0+] | ||
|- | |- | ||
| | | 918 || [20.0.0+] | ||
|- | |- | ||
| 1002 || [3.0.0-9.2.0] [[#RequestVerifyAddOnContentsRights]] | | 919 || [20.0.0+] | ||
|- | |||
| 920 || [20.0.0+] | |||
|- | |||
| 921 || [20.0.0+] | |||
|- | |||
| 922 || [20.0.0+] | |||
|- | |||
| 923 || [20.0.0+] | |||
|- | |||
| 928 || [20.0.0+] | |||
|- | |||
| 929 || [20.0.0+] | |||
|- | |||
| 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]] | | 1003 || [5.0.0+] [[#RequestVerifyApplication]] | ||
Line 913: | Line 877: | ||
|- | |- | ||
| 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 929: | Line 903: | ||
|- | |- | ||
| 1705 || [11.0.0+] [[#IsPatchAutoDeletableApplication]] | | 1705 || [11.0.0+] [[#IsPatchAutoDeletableApplication]] | ||
|- | |||
| 1706 || [20.0.0+] | |||
|- | |- | ||
| 1800 || IsNotificationSetupCompleted | | 1800 || IsNotificationSetupCompleted | ||
Line 934: | Line 910: | ||
| 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 983: | Line 959: | ||
|- | |- | ||
| 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 1,019: | Line 1,001: | ||
|- | |- | ||
| 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,055: | Line 1,039: | ||
|- | |- | ||
| 2361 || [19.0.0+] GetMaxApplicationDownloadTaskCount | | 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,060: | Line 1,058: | ||
| 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,095: | Line 1,093: | ||
|- | |- | ||
| 2524 || [19.0.0+] | | 2524 || [19.0.0+] | ||
|- | |||
| 2525 || [20.0.0+] | |||
|- | |- | ||
| 2800 || [9.0.0+] GetApplicationIdOfPreomia | | 2800 || [9.0.0+] GetApplicationIdOfPreomia | ||
Line 1,142: | Line 1,142: | ||
| 3105 || [18.0.0+] GetApplicationStartupMovie | | 3105 || [18.0.0+] GetApplicationStartupMovie | ||
|- | |- | ||
| | | 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 | No input, returns an output Event handle with EventClearMode=1. | ||
==== | ==== GetApplicationViewDeprecated ==== | ||
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]], no output. | |||
==== | ==== CheckApplicationLaunchVersion ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], | Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | ||
[ | ==== CalculateApplicationDownloadRequiredSize ==== | ||
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. | ||
[ | ==== ClearApplicationTerminateResult ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== | ==== GetLastSdCardMountUnexpectedResult ==== | ||
No input/output. | No input/output. | ||
==== GetRequestServerStopper ==== | |||
No input, returns an output [[#IRequestServerStopper]]. | |||
==== CancelApplicationApplyDelta ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
[[NCM_services# | ==== ResumeApplicationApplyDelta ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== CalculateApplicationApplyDeltaRequiredSize ==== | |||
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 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 | Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | ||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
==== | ==== LaunchApplication ==== | ||
Takes an input [[ | 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 is | 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 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, 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 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 | 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 | Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | ||
See [[#RequestApplicationUpdateInfo]] regarding nifm. | |||
==== | ==== RequestGameCardRegistrationGoldPoint ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[# | 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 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, returns an output Event handle with EventClearMode=0. | |||
==== | ==== IsGameCardInserted ==== | ||
No input, returns an output u8 bool. | |||
==== EnsureGameCardAccess ==== | |||
No input/output. | |||
==== | ==== GetLastGameCardMountFailureResult ==== | ||
No input/output. | No input/output. | ||
==== | ==== ListApplicationIdOnGameCard ==== | ||
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 | 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 an input [[NCM_services#ApplicationId|ApplicationId]], no output. | |||
==== | ==== IsApplicationUpdateRequested ==== | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output | 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 | Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output. | ||
==== RequestVerifyApplicationDeprecated ==== | |||
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 an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IProgressAsyncResult]]. | |||
==== | ==== RequestVerifyApplication ==== | ||
Takes | 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 an input [[NCM_services#ApplicationId|ApplicationId]], returns an output u8 bool. | |||
==== | ==== CleanupUnavailableAddOnContents ==== | ||
Takes a type-0x5 input buffer containing an array of [[# | 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 | The TransferMemory uses permissions=0. | ||
==== | ==== EstimateSizeToMove ==== | ||
Takes | 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 [[ | 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-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 | 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. | ||
Takes | |||
==== RequestDownloadApplicationPrepurchasedRights ==== | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]]. | |||
[[ | See [[#RequestApplicationUpdateInfo]] regarding nifm. | ||
==== GetSystemDeliveryInfo ==== | |||
Takes a type-0x16 output buffer containing a [[#SystemDeliveryInfo]], no output. | |||
This | 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- | 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 a state ref-count 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. | |||
== | [[#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. | ||
Takes a type-0x5 input buffer containing an array of | |||
==== HasAllContentsToDeliver ==== | |||
Takes a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], returns an output u8 bool. | |||
The array-count must match 1. | |||
This | 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 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 [[# | 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 | 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 | 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 | 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 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 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 ==== | ||
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. | |||
The [[NCM_services#ContentMetaType|ContentMetaType]] in the ContentMetaKey must match Patch. | |||
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 then creates the [[#IAsyncResult]] + the async thread which handles the [[#IAsyncResult]] operation. Then the thread does: | |||
This | |||
This | * 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]]. | |||
This | |||
==== 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 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 an input [[NCM_services#ApplicationId| | 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. | |||
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. | |||
=== | ==== 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]]. | |||
The async task uses [[NIM_sevices|nim]] cmd2024. | |||
=== | === IClientSession === | ||
This is "nn::ns::vphym::detail::IClientSession". | |||
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: | |||
* 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. | |||
This is | |||
This was added with [ | === IApplicationVersionInterface === | ||
This is "nn::ns::detail::IApplicationVersionInterface". | |||
This was added with [4.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,064: | Line 2,175: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || GetLaunchRequiredVersion | ||
|- | |- | ||
| 1 || | | 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,131: | Line 2,214: | ||
! 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 | |||
|- | |||
| 23 || ResolveApplicationContentPath | |||
|- | |||
| 92 || [5.0.0+] GetRunningApplicationProgramId | |||
|- | |||
| 2524 || [19.0.0+] | |||
|} | |||
=== IDownloadTaskInterface === | |||
This is "nn::ns::detail::IDownloadTaskInterface". | |||
This is "nn::ns::detail:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,182: | Line 2,273: | ||
! 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/output. | |||
==== RequestDownloadTaskList ==== | |||
No input/output. | |||
== | ==== RequestEnsureDownloadTask ==== | ||
No input, returns an output | No input, returns an output Event handle and an [[#IAsyncResult]]. | ||
==== ListDownloadTaskStatus ==== | |||
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/output. | |||
==== TriggerDynamicCommitEvent ==== | |||
No input/output. | |||
== | === IReadOnlyApplicationRecordInterface === | ||
This is "nn::ns::detail::IReadOnlyApplicationRecordInterface". | |||
This was added with [5.0.0+]. | |||
This | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 || [[# | | 0 || HasApplicationRecord || Same as [[#IApplicationManagerInterface]] cmd 910 | ||
|- | |- | ||
| 1 || [ | | 1 || [10.0.0+] NotifyApplicationFailure || | ||
|- | |- | ||
| 2 || [ | | 2 || [10.0.0+] IsDataCorruptedResult || | ||
|- | |- | ||
| 3 || [[ | | 3 || [20.0.0+] || | ||
|} | |||
=== 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 ==== | ||
No | 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. 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 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 | 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. | |||
This | ==== IAsyncData ==== | ||
This is "nn::ns::detail::IAsyncData". | |||
This was added with [12.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |||
== | ! Cmd || Name | ||
This is "nn::ns::detail:: | |- | ||
| 0 || GetSize | |||
|- | |||
| 1 || Get | |||
|- | |||
| 2 || Cancel | |||
|- | |||
| 3 || GetErrorContext | |||
|} | |||
=== IECommerceInterface=== | |||
This is "nn::ns::detail::IECommerceInterface". | |||
This was added with [4.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 2,371: | Line 2,514: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || [[# | | 0 || [[#RequestLinkDevice]] | ||
|- | |- | ||
| 1 || [[# | | 1 || [6.0.0+] [[#RequestCleanupAllPreInstalledApplications]] | ||
|- | |- | ||
| 2 || [[# | | 2 || [6.0.0+] [[#RequestCleanupPreInstalledApplication]] | ||
|- | |- | ||
| 3 || [[# | | 3 || [6.0.0+] [[#RequestSyncRights]] | ||
|- | |- | ||
| 4 || [[# | | 4 || [6.0.0+] [[#RequestUnlinkDevice]] | ||
|- | |- | ||
| 5 || [[# | | 5 || [6.1.0+] [[#RequestRevokeAllELicense]] | ||
|- | |- | ||
| 6 || [[# | | 6 || [9.0.0+] [[#RequestSyncRightsBasedOnAssignedELicenses]] | ||
|- | |- | ||
| 7 || [ | | 7 || [14.0.0+] RequestOnlineSubscriptionFreeTrialAvailability | ||
|- | |- | ||
| 8 || [ | | 8 || [20.0.0+] | ||
|- | |- | ||
| 9 || [ | | 9 || [20.0.0+] | ||
|- | |- | ||
| 10 || [ | | 10 || [20.0.0+] | ||
|- | |- | ||
| 11 || [ | | 11 || [20.0.0+] | ||
|- | |- | ||
| 12 || [ | | 12 || [20.0.0+] | ||
|- | |- | ||
| 13 || [ | | 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 | 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. | 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. | |||
=== | ==== ResetToFactorySettingsWithPlatformRegion ==== | ||
No input | 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 | |||
|- | |||
| 1200 || [3.0.0+] [[#NeedsUpdateVulnerability]] | |||
|- | |||
| 1201 || [4.0.0+] [[#UpdateSafeSystemVersionForDebug]] | |||
|- | |||
| 1202 || [4.0.0+] [[#GetSafeSystemVersion]] | |||
|- | |||
| 3100 || [18.0.0+] | |||
|- | |||
| 3101 || [18.0.0+] | |||
|- | |||
| 3102 || [18.0.0+] | |||
|} | |||
== NeedsUpdateVulnerability == | |||
No input, returns an output u8 bool flag. | |||
Web-applets use this command to check if the system needs an update. | |||
== UpdateSafeSystemVersionForDebug == | |||
Takes an input [[NCM_services#ApplicationId|ApplicationId]] and an u32 '''version'''. | |||
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>). | |||
= 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]] | |||
|} | |||
== GetBackgroundNetworkUpdateState == | |||
No input, returns an output [[#BackgroundNetworkUpdateState]]. | |||
This is similar to [[#HasDownloaded]], see [[#BackgroundNetworkUpdateState]]. | |||
== | == OpenSystemUpdateControl == | ||
No input, returns an | No input, returns an [[#ISystemUpdateControl]]. | ||
Only 1 ISystemUpdateControl can be open at a time. | |||
== | == NotifyExFatDriverRequired == | ||
No input/output. | No input/output. | ||
Only usable when an [[#ISystemUpdateControl]] isn't open. | |||
This | 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. | 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. | |||
== ISystemUpdateControl == | |||
This is "nn::ns::detail::ISystemUpdateControl". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#HasDownloaded]] | ||
|- | |- | ||
| | | 1 || [[#RequestCheckLatestUpdate]] | ||
|- | |- | ||
| | | 2 || [[#RequestDownloadLatestUpdate]] | ||
|- | |- | ||
| | | 3 || [[#GetDownloadProgress]] | ||
|- | |- | ||
| | | 4 || [[#ApplyDownloadedUpdate]] | ||
|- | |- | ||
| | | 5 || [[#RequestPrepareCardUpdate]] | ||
|- | |- | ||
| | | 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 | 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 an | 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]]. | |||
This is | |||
=== GetPreparedCardUpdateEulaData === | |||
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 '''filesize'''. | |||
This is | 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. | |||
{| class="wikitable" border="1" | == 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. | |||
== PrepareLaunchApplication == | |||
Takes a total of 0x10-bytes of input. Returns a total of 0x50-bytes of output. | |||
[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 | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 || | | 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 || [ | | 400 || [18.0.0+] SetPinCode || | ||
|- | |- | ||
| 401 || [ | | 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. | |||
== IManagerForSystemService == | |||
This is "nn::account::baas::IManagerForSystemService". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,154: | Line 3,410: | ||
! 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 || [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]]. | |||
|- | |- | ||
| 0 || | | 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" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name || Notes | ||
|- | |||
| 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::account::baas::IAdministrator". | |||
This is "nn::account:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name | ! 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 || | |||
Takes a | |||
|- | |- | ||
| 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::account:: | This is "nn::account::nas::IAuthorizationRequest". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,408: | Line 3,630: | ||
! Cmd || Name || Notes | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 || | | 0 || GetSessionId || | ||
|- | |- | ||
| | | 10 || InvokeWithoutInteractionAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 19 || IsAuthorized || | ||
|- | |- | ||
| | | 20 || GetAuthorizationCode || | ||
|- | |- | ||
| | | 21 || GetIdToken || | ||
|- | |- | ||
| | | 22 || GetState || | ||
|} | |} | ||
== | == IOAuthProcedure == | ||
This is "nn::account:: | This is "nn::account::http::IOAuthProcedure". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,434: | Line 3,650: | ||
! Cmd || Name || Notes | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 || | | 0 || PrepareAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| 1 || | | 1 || GetRequest || | ||
|- | |- | ||
| 2 || | | 2 || ApplyResponse || | ||
|- | |- | ||
| 3 || | | 3 || ApplyResponseAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 10 || Suspend || | ||
|} | |} | ||
== | == IOAuthProcedureForExternalNsa == | ||
This is "nn::account:: | This is "nn::account::nas::IOAuthProcedureForExternalNsa". | ||
Added with [3.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,454: | Line 3,670: | ||
! Cmd || Name || Notes | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 || | | 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::account:: | This is "nn::account::nas::IOAuthProcedureForNintendoAccountLinkage". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,476: | Line 3,698: | ||
! Cmd || Name || Notes | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 || | | 0 || PrepareAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| 1 || | | 1 || GetRequest || | ||
|- | |- | ||
| 2 || | | 2 || ApplyResponse || | ||
|- | |- | ||
| 3 || | | 3 || ApplyResponseAsync || Returns an [[#IAsyncContext]]. | ||
|- | |- | ||
| | | 10 || Suspend || | ||
|- | |- | ||
| | | 100 || GetRequestWithTheme || | ||
|- | |- | ||
| | | 101 || IsNetworkServiceAccountReplaced || | ||
|- | |- | ||
| | | 199 || [2.0.0-5.1.0] GetUrlForIntroductionOfExtraMembership || | ||
|- | |- | ||
| | | 200 || [16.0.0+] ApplyAsyncWithAuthorizedToken || | ||
|} | |||
== INotifier == | |||
This is "nn::account::detail::INotifier". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || GetSystemEvent | ||
|} | |||
== IProfile == | |||
This is "nn::account::profile::IProfile". | |||
{| 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 === | |||
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" | |||
|- | |- | ||
! 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. | |||
This | == IAsyncContext == | ||
This is "nn::account::detail::IAsyncContext". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || GetSystemEvent | ||
|- | |- | ||
| 1 || | | 1 || Cancel | ||
|- | |- | ||
| 2 || | | 2 || HasDone | ||
|- | |- | ||
| 3 || | | 3 || GetResult | ||
|} | |||
== ISessionObject == | |||
This is "nn::account::detail::ISessionObject". | |||
{| 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 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 || 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. | ||
This is "nn:: | |||
== 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" | {| 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:: | This is "nn::account::baas::IManagerForApplication". | ||
{| class="wikitable" border="1" | {| 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]]). | ||
|} | |} | ||
This is | == IAsyncNetworkServiceLicenseKindContext == | ||
This is "nn::account::detail::IAsyncNetworkServiceLicenseKindContext". | |||
This was added with [6.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name || Notes | ||
|- | |- | ||
| | | 0 || GetSystemEvent || | ||
|- | |- | ||
| | | 1 || Cancel || | ||
|- | |- | ||
| | | 2 || HasDone || | ||
|- | |- | ||
| | | 3 || GetResult || | ||
|- | |- | ||
| | | 100 || GetNetworkServiceLicenseKind || | ||
|} | |} | ||
= | == IAsyncContextForLoginForOnlinePlay == | ||
This is "nn:: | This is "nn::account::baas::IAsyncContextForLoginForOnlinePlay". | ||
This was added with [13.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name || Notes | ||
|- | |- | ||
| 0 | | 0 || GetSystemEvent || | ||
| | |||
|- | |- | ||
| 1 | | 1 || Cancel || | ||
| | |||
|- | |- | ||
| 2 | | 2 || HasDone || | ||
| | |||
|- | |- | ||
| 3 | | 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]]. | |||
|- | |- | ||
| 0 || | | 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 || | |||
|- | |- | ||
| 0 || | | 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. | ||
This is "nn:: | |||
== IOAuthProcedureForUserRegistration == | |||
This is "nn::account::nas::IOAuthProcedureForUserRegistration". | |||
This was added with [8.0.0+]. | |||
{| class="wikitable" border="1" | {| 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 | This is "nn::ns::ApplicationRecord". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,906: | Line 4,130: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
| 0x8 | |||
| [[NCM_services#ApplicationId|Id]] | |||
|- | |- | ||
| 0x8 || | | 0x8 | ||
| 0x1 | |||
| [[#ApplicationEvent|LastEvent]] | |||
|- | |- | ||
| | | 0x9 | ||
| 0x1 | |||
| Attributes | |||
|- | |- | ||
| | | 0xA | ||
| 0x6 | |||
| Reserved | |||
|- | |- | ||
| | | 0x10 | ||
| | | 0x8 | ||
| | | LastUpdated | ||
|} | |} | ||
= | = ApplicationEvent = | ||
This is "nn::ns:: | This is "nn::ns::ApplicationEvent". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,927: | Line 4,159: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 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:: | This is "nn::ns::ApplicationControlSource". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,946: | Line 4,202: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | | 0 | ||
| CacheOnly | |||
|- | |- | ||
| 1 | | | 1 | ||
| Storage | |||
|- | |- | ||
| 2 | | | 2 | ||
| StorageOnly | |||
|} | |} | ||
= ApplicationContentMetaStatus = | |||
This is "nn::ns::ApplicationContentMetaStatus". | |||
This is "nn::ns:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 3,966: | Line 4,221: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 || | | 0x0 | ||
| 0x1 | |||
| [[NCM_services#ContentMetaType|Type]] | |||
|- | |||
| 0x1 | |||
| 0x1 | |||
| [[NCM_services#StorageId|InstalledStorage]] | |||
|- | |||
| 0x2 | |||
| 0x1 | |||
| [[#ContentMetaRightsCheck|RightsCheck]] | |||
|- | |||
| 0x3 | |||
| 0x1 | |||
| Reserved | |||
|- | |||
| 0x4 | |||
| 0x4 | |||
| Version | |||
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x8 | |||
| [[NCM_services#ApplicationId|Id]] | |||
|} | |} | ||
= ContentMetaRightsCheck = | |||
This is "nn::ns::ContentMetaRightsCheck". | |||
= | {| class="wikitable" border="1" | ||
This is "nn::ns:: | |- | ||
! 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]] | |||
|} | |||
This | = ApplicationOccupiedSizeEntity = | ||
This is "nn::ns::ApplicationOccupiedSizeEntity". This is a 0x20-byte struct. | |||
= SystemDeliveryInfo = | {| class="wikitable" border="1" | ||
This is "nn::ns::SystemDeliveryInfo". This is a 0x100-byte struct. | |- | ||
! Offset | |||
{| class="wikitable" border="1" | ! Size | ||
|- | ! Description | ||
! Offset | |- | ||
! Size | | 0x0 || 0x1 || [[NCM_services#StorageId|StorageId]] | ||
! Description | |- | ||
|- | | 0x1 || 0x7 || Reserved | ||
| 0x0 || 0x4 || SystemDeliveryProtocolVersion. Must be <= to and match [[System_Settings|system-setting]] <code>contents_delivery!system_delivery_protocol_version</code>. | |- | ||
|- | | 0x8 || 0x8 || AppSize | ||
| 0x4 || 0x4 || ApplicationDeliveryProtocolVersion. Loaded from [[System_Settings|system-setting]] <code>contents_delivery!application_delivery_protocol_version</code>. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation. | |- | ||
|- | | 0x10 || 0x8 || PatchSize | ||
| 0x8 || 0x1 || HasExFat. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation. | |- | ||
|- | | 0x18 || 0x8 || AocSize | ||
| 0x9 || 0x3 || Reserved. | |} | ||
|- | |||
| 0xC || 0x4 || | = ProgressForDeleteUserSaveDataAll = | ||
|- | This is "nn::ns::detail::ProgressForDeleteUserSaveDataAll". This is a 0x28-byte struct. | ||
| 0x10 || 0x8 || | |||
|- | {| class="wikitable" border="1" | ||
| 0x18 || 0x1 || FirmwareVariationId. Used by [[#RequestSendSystemUpdate]]. | |- | ||
|- | ! Offset | ||
| 0x19 || 0x1 || UpdatableFirmwareGroupId. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation. | ! Size | ||
|- | ! Description | ||
| 0x1A || 0x1 || PlatformRegion (0x00 = Unknown, 0x01 | |- | ||
|- | | 0x0 || 0x8 || StartedAt | ||
| 0x1B || | |- | ||
|- | | 0x8 || 0x4 || Count | ||
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes. | |- | ||
|} | | 0xC || 0x4 || Reserved | ||
|- | |||
= ApplicationDeliveryInfo = | | 0x10 || 0x8 || SizeInBytes | ||
This is "nn::ns::ApplicationDeliveryInfo". This is a 0x100-byte struct. | |- | ||
| 0x18 || 0x1 || IsSystem | |||
{| class="wikitable" border="1" | |- | ||
|- | | 0x19 || 0x7 || Reserved | ||
! Offset | |- | ||
! Size | | 0x20 || 0x8 || ApplicationId | ||
! Description | |} | ||
|- | |||
| 0x0 || 0x8 || | = 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]]. |