Changes

Jump to navigation Jump to search
41,046 bytes added ,  19:46, 22 March 2022
Line 23: Line 23:  
|-
 
|-
 
| 8 || [4.0.0+] GetAddOnContentListChangedEvent
 
| 8 || [4.0.0+] GetAddOnContentListChangedEvent
 +
|-
 +
| 9 || [10.0.0+] GetAddOnContentLostErrorCode
 +
|-
 +
| 10 || [11.0.0+] GetAddOnContentListChangedEventWithProcessId
 +
|-
 +
| 11 || [13.0.0+] NotifyMountAddOnContent
 +
|-
 +
| 12 || [13.0.0+] NotifyUnmountAddOnContent
 +
|-
 +
| 13 || [13.0.0+] IsAddOnContentMountedForDebug
 +
|-
 +
| 50 || [13.0.0+] CheckAddOnContentMountStatus
 
|-
 
|-
 
| 100 || [7.0.0+] [[#IPurchaseEventManager|CreateEcPurchasedEventManager]]
 
| 100 || [7.0.0+] [[#IPurchaseEventManager|CreateEcPurchasedEventManager]]
 
|-
 
|-
 
| 101 || [9.0.0+] [[#IPurchaseEventManager|CreatePermanentEcPurchasedEventManager]]
 
| 101 || [9.0.0+] [[#IPurchaseEventManager|CreatePermanentEcPurchasedEventManager]]
 +
|-
 +
| 110 || [12.0.0+] [[#IContentsServiceManager|CreateContentsServiceManager]]
 +
|-
 +
| 200 || [13.1.0+] SetRequiredAddOnContentsOnContentsAvailabilityTransition
 
|}
 
|}
   Line 45: Line 61:  
|-
 
|-
 
| 4 || [9.0.0+] PopPurchasedProductInfoWithUid
 
| 4 || [9.0.0+] PopPurchasedProductInfoWithUid
 +
|}
 +
 +
== IContentsServiceManager ==
 +
This is "nn::ec::IContentsServiceManager".
 +
 +
This was added with [12.0.0+].
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#RequestContentsAuthorizationToken]]
 +
|}
 +
 +
=== RequestContentsAuthorizationToken ===
 +
Takes a total of 0x50-bytes of input, a PID, a type-0x5 input buffer. Returns an [[#IAsyncData|IAsyncData]] and an output handle.
 +
 +
== IAsyncData ==
 +
This is "nn::ec::detail::IAsyncData".
 +
 +
This was added with [12.0.0+].
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetSize
 +
|-
 +
| 1 || Get
 +
|-
 +
| 2 || Cancel
 
|}
 
|}
   Line 76: Line 123:  
| 9 || MoveApplicationEntity
 
| 9 || MoveApplicationEntity
 
|-
 
|-
| 11 || CalculateApplicationOccupiedSize
+
| 11 || [[#CalculateApplicationOccupiedSize]]
 
|-
 
|-
 
| 16 || PushApplicationRecord
 
| 16 || PushApplicationRecord
Line 82: Line 129:  
| 17 || ListApplicationRecordContentMeta
 
| 17 || ListApplicationRecordContentMeta
 
|-
 
|-
| 18 ||  
+
| 18 || CheckLaunchRights
 
|-
 
|-
 
| 19 || [[#LaunchApplication]]
 
| 19 || [[#LaunchApplication]]
Line 104: Line 151:  
| 33 || ResumeApplicationDownload
 
| 33 || ResumeApplicationDownload
 
|-
 
|-
| 34 ||  
+
| 34 || ClearTaskStatusList
 
|-
 
|-
 
| 35 || UpdateVersionList
 
| 35 || UpdateVersionList
Line 122: Line 169:  
| 42 || CleanupSdCard
 
| 42 || CleanupSdCard
 
|-
 
|-
| 43 || CheckSdCardMountStatus
+
| 43 || [[#CheckSdCardMountStatus]]
 
|-
 
|-
 
| 44 || GetSdCardMountStatusChangedEvent
 
| 44 || GetSdCardMountStatusChangedEvent
Line 212: Line 259:  
| 504 || [2.0.0+] RequestRegisterGameCard
 
| 504 || [2.0.0+] RequestRegisterGameCard
 
|-
 
|-
| 600 || [2.0.0+] CountApplicationContentMeta
+
| 600 || [2.0.0+] [[#CountApplicationContentMeta]]
 
|-
 
|-
 
| 601 || [2.0.0+] [[#ListApplicationContentMetaStatus]]
 
| 601 || [2.0.0+] [[#ListApplicationContentMetaStatus]]
Line 226: Line 273:  
| 700 || [2.0.0+] PushDownloadTaskList
 
| 700 || [2.0.0+] PushDownloadTaskList
 
|-
 
|-
| 701 || [2.0.0+] ClearTaskStatusList
+
| 701 || [2.0.0+] [[#ClearTaskStatusList]]
 
|-
 
|-
| 702 || [2.0.0+] RequestDownloadTaskList
+
| 702 || [2.0.0+] [[#RequestDownloadTaskList]]
 
|-
 
|-
| 703 || [2.0.0+] RequestEnsureDownloadTask
+
| 703 || [2.0.0+] [[#RequestEnsureDownloadTask]]
 
|-
 
|-
| 704 || [2.0.0+] ListDownloadTaskStatus
+
| 704 || [2.0.0+] [[#ListDownloadTaskStatus]]
 
|-
 
|-
 
| 705 || [2.0.0+] RequestDownloadTaskListData
 
| 705 || [2.0.0+] RequestDownloadTaskListData
Line 426: Line 473:  
|}
 
|}
   −
= ns:am2, ns:ec, ns:rid, ns:rt, ns:web =
+
= ns:am2, ns:ec, ns:rid, ns:rt, ns:web, ns:ro =
These services are all, at the top level, "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 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.
 +
 
 +
[11.0.0+] ns:ro was added.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 433: Line 484:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 7988 || [6.0.0+] [[#IDynamicRightsInterface|GetDynamicRightsInterface]].
+
| 7988 || [6.0.0+] [[#IDynamicRightsInterface|GetDynamicRightsInterface]]
 
|-
 
|-
| 7989 || [5.1.0+] [[#IReadOnlyApplicationControlDataInterface|GetReadOnlyApplicationControlDataInterface]].
+
| 7989 || [5.1.0+] [[#IReadOnlyApplicationControlDataInterface|GetReadOnlyApplicationControlDataInterface]]
 
|-
 
|-
| 7991 || [5.0.0+] [[#IReadOnlyApplicationRecordInterface|GetReadOnlyApplicationRecordInterface]].
+
| 7991 || [5.0.0+] [[#IReadOnlyApplicationRecordInterface|GetReadOnlyApplicationRecordInterface]]
 
|-
 
|-
 
| 7992 || [4.0.0+] [[#IECommerceInterface|GetECommerceInterface]]
 
| 7992 || [4.0.0+] [[#IECommerceInterface|GetECommerceInterface]]
Line 491: Line 542:  
| 8 || [[#IsApplicationEntityMovable]]
 
| 8 || [[#IsApplicationEntityMovable]]
 
|-
 
|-
| 9 || [[#MoveApplicationEntity]]
+
| 9 || [1.0.0-9.2.0] [[#MoveApplicationEntity]]
 
|-
 
|-
| 11 || CalculateApplicationOccupiedSize
+
| 11 || [[#CalculateApplicationOccupiedSize]]
 
|-
 
|-
 
| 16 || PushApplicationRecord
 
| 16 || PushApplicationRecord
Line 513: Line 564:  
| 30 || [[#RequestApplicationUpdateInfo]]
 
| 30 || [[#RequestApplicationUpdateInfo]]
 
|-
 
|-
| 31 || [1.0.0-3.0.2]  
+
| 31 || [1.0.0-3.0.2] RequestUpdateApplication
 
|-
 
|-
 
| 32 || [[#CancelApplicationDownload]]
 
| 32 || [[#CancelApplicationDownload]]
Line 535: Line 586:  
| 42 || [[#CleanupSdCard]]
 
| 42 || [[#CleanupSdCard]]
 
|-
 
|-
| 43 || CheckSdCardMountStatus
+
| 43 || [[#CheckSdCardMountStatus]]
 
|-
 
|-
 
| 44 || [[#GetSdCardMountStatusChangedEvent]]
 
| 44 || [[#GetSdCardMountStatusChangedEvent]]
Line 613: Line 664:  
| 93 || [5.0.0+] GetMainApplicationProgramIndex
 
| 93 || [5.0.0+] GetMainApplicationProgramIndex
 
|-
 
|-
| 94 || [6.0.0+] LaunchApplication
+
| 94 || [6.0.0+] [[#LaunchApplication_2|LaunchApplication]]
 
|-
 
|-
| 95 || [6.0.0+] GetApplicationLaunchInfo
+
| 95 || [6.0.0+] [[#GetApplicationLaunchInfo]]
 
|-
 
|-
| 96 || [6.0.0+] AcquireApplicationLaunchInfo
+
| 96 || [6.0.0+] [[#AcquireApplicationLaunchInfo]]
 
|-
 
|-
 
| 97 || [6.0.0+] GetMainApplicationProgramIndexByApplicationLaunchInfo
 
| 97 || [6.0.0+] GetMainApplicationProgramIndexByApplicationLaunchInfo
Line 625: Line 676:  
| 99 || [8.0.0+] [[#LaunchDevMenu]]
 
| 99 || [8.0.0+] [[#LaunchDevMenu]]
 
|-
 
|-
| 100 || ResetToFactorySettings
+
| 100 || [[#ResetToFactorySettings]]
 
|-
 
|-
| 101 || ResetToFactorySettingsWithoutUserSaveData
+
| 101 || [[#ResetToFactorySettingsWithoutUserSaveData]]
 
|-
 
|-
| 102 || ResetToFactorySettingsForRefurbishment
+
| 102 || [[#ResetToFactorySettingsForRefurbishment]]
 
|-
 
|-
| 103 || [9.1.0+] ResetToFactorySettingsWithPlatformRegion
+
| 103 || [9.1.0+] [[#ResetToFactorySettingsWithPlatformRegion]]
 
|-
 
|-
| 104 || [9.1.0+] ResetToFactorySettingsWithPlatformRegionAuthentication
+
| 104 || [9.1.0+] [[#ResetToFactorySettingsWithPlatformRegionAuthentication]]
 +
|-
 +
| 105 || [10.0.0+] [[#RequestResetToFactorySettingsSecurely]]
 +
|-
 +
| 106 || [10.0.0+] [[#RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely]]
 
|-
 
|-
 
| 200 || CalculateUserSaveDataStatistics
 
| 200 || CalculateUserSaveDataStatistics
 
|-
 
|-
| 201 || DeleteUserSaveDataAll
+
| 201 || [[#DeleteUserSaveDataAll]]
 
|-
 
|-
 
| 210 || [[#DeleteUserSystemSaveData]]
 
| 210 || [[#DeleteUserSystemSaveData]]
Line 651: Line 706:  
| 301 || PopApplicationShellEventInfo
 
| 301 || PopApplicationShellEventInfo
 
|-
 
|-
| 302 || LaunchLibraryApplet
+
| 302 || [[#LaunchLibraryApplet]]
 
|-
 
|-
 
| 303 || TerminateLibraryApplet
 
| 303 || TerminateLibraryApplet
 
|-
 
|-
| 304 || LaunchSystemApplet
+
| 304 || [[#LaunchSystemApplet]]
 
|-
 
|-
 
| 305 || TerminateSystemApplet
 
| 305 || TerminateSystemApplet
 
|-
 
|-
| 306 || LaunchOverlayApplet
+
| 306 || [[#LaunchOverlayApplet]]
 
|-
 
|-
 
| 307 || TerminateOverlayApplet
 
| 307 || TerminateOverlayApplet
Line 699: Line 754:  
| 510 || [9.0.0+] [[#GetGameCardPlatformRegion]]
 
| 510 || [9.0.0+] [[#GetGameCardPlatformRegion]]
 
|-
 
|-
| 600 || CountApplicationContentMeta
+
| 600 || [[#CountApplicationContentMeta]]
 
|-
 
|-
 
| 601 || [[#ListApplicationContentMetaStatus]]
 
| 601 || [[#ListApplicationContentMetaStatus]]
Line 713: Line 768:  
| 606 || [3.0.0+] GetContentMetaStorage
 
| 606 || [3.0.0+] GetContentMetaStorage
 
|-
 
|-
| 607 || [6.0.0+] ListAvailableAddOnContent
+
| 607 || [6.0.0+] [[#ListAvailableAddOnContent]]
 +
|-
 +
| 609 || [13.0.0+] ListAvailabilityAssuredAddOnContent
 +
|-
 +
| 610 || [14.0.0+] GetInstalledContentMetaStorage
 
|-
 
|-
 
| 700 || PushDownloadTaskList
 
| 700 || PushDownloadTaskList
 
|-
 
|-
| 701 || ClearTaskStatusList
+
| 701 || [[#ClearTaskStatusList]]
 
|-
 
|-
| 702 || RequestDownloadTaskList
+
| 702 || [[#RequestDownloadTaskList]]
 
|-
 
|-
| 703 || RequestEnsureDownloadTask
+
| 703 || [[#RequestEnsureDownloadTask]]
 
|-
 
|-
| 704 || ListDownloadTaskStatus
+
| 704 || [[#ListDownloadTaskStatus]]
 
|-
 
|-
 
| 705 || [[#RequestDownloadTaskListData]]
 
| 705 || [[#RequestDownloadTaskListData]]
Line 765: Line 824:  
| 915 || [9.0.0+] ShowApplicationRecord
 
| 915 || [9.0.0+] ShowApplicationRecord
 
|-
 
|-
| 1000 || RequestVerifyApplicationDeprecated
+
| 916 || [11.0.0+] IsApplicationAutoDeleteDisabled
 +
|-
 +
| 1000 || [[#RequestVerifyApplicationDeprecated]]
 
|-
 
|-
 
| 1001 || CorruptApplicationForDebug
 
| 1001 || CorruptApplicationForDebug
 
|-
 
|-
| 1002 || [3.0.0+] RequestVerifyAddOnContentsRights
+
| 1002 || [3.0.0-9.2.0] [[#RequestVerifyAddOnContentsRights]]
 
|-
 
|-
 
| 1003 || [5.0.0+] [[#RequestVerifyApplication]]
 
| 1003 || [5.0.0+] [[#RequestVerifyApplication]]
Line 783: Line 844:  
| 1302 || CleanupUnrecordedApplicationEntity
 
| 1302 || CleanupUnrecordedApplicationEntity
 
|-
 
|-
| 1303 || [3.0.0+] CleanupAddOnContentsWithNoRights
+
| 1303 || [3.0.0-9.2.0] CleanupAddOnContentsWithNoRights
 
|-
 
|-
 
| 1304 || [3.0.0+] DeleteApplicationContentEntity
 
| 1304 || [3.0.0+] DeleteApplicationContentEntity
Line 790: Line 851:  
|-
 
|-
 
| 1309 || [6.0.0+] [[#CleanupUnavailableAddOnContents]]
 
| 1309 || [6.0.0+] [[#CleanupUnavailableAddOnContents]]
 +
|-
 +
| 1310 || [10.0.0+] RequestMoveApplicationEntity
 +
|-
 +
| 1311 || [10.0.0+] EstimateSizeToMove
 +
|-
 +
| 1312 || [10.0.0+] HasMovableEntity
 +
|-
 +
| 1313 || [11.0.0+] CleanupOrphanContents
 +
|-
 +
| 1314 || [11.0.0+] CheckPreconditionSatisfiedToMove
 
|-
 
|-
 
| 1400 || PrepareShutdown
 
| 1400 || PrepareShutdown
Line 818: Line 889:  
|-
 
|-
 
| 1704 || [8.0.0+] [[#GetApplicationViewWithPromotionInfo]]
 
| 1704 || [8.0.0+] [[#GetApplicationViewWithPromotionInfo]]
 +
|-
 +
| 1705 || [11.0.0+] [[#IsPatchAutoDeletableApplication]]
 
|-
 
|-
 
| 1800 || IsNotificationSetupCompleted
 
| 1800 || IsNotificationSetupCompleted
Line 827: Line 900:  
| 1803 || [3.0.0+] ListNotificationTask
 
| 1803 || [3.0.0+] ListNotificationTask
 
|-
 
|-
| 1900 || [3.0.0+] IsActiveAccount
+
| 1900 || [3.0.0-12.1.0] IsActiveAccount
 
|-
 
|-
 
| 1901 || [4.0.0+] [[#RequestDownloadApplicationPrepurchasedRights]]
 
| 1901 || [4.0.0+] [[#RequestDownloadApplicationPrepurchasedRights]]
 
|-
 
|-
 
| 1902 || [5.0.0+] GetApplicationTicketInfo
 
| 1902 || [5.0.0+] GetApplicationTicketInfo
 +
|-
 +
| 1903 || [13.1.0+] RequestDownloadApplicationPrepurchasedRightsForAccount
 
|-
 
|-
 
| 2000 || [4.0.0+] [[#GetSystemDeliveryInfo]]
 
| 2000 || [4.0.0+] [[#GetSystemDeliveryInfo]]
Line 891: Line 966:  
| 2155 || [7.0.0+] UpdateRightsEnvironmentStatus
 
| 2155 || [7.0.0+] UpdateRightsEnvironmentStatus
 
|-
 
|-
| 2156 || [9.0.0+] CreateRightsEnvironmentForPreomia
+
| 2156 || [10.0.0-12.1.0] CreateRightsEnvironmentForMicroApplication ([9.0.0-9.2.0] CreateRightsEnvironmentForPreomia)
 
|-
 
|-
 
| 2160 || [6.0.0+] AddTargetApplicationToRightsEnvironment
 
| 2160 || [6.0.0+] AddTargetApplicationToRightsEnvironment
Line 911: Line 986:  
| 2199 || [6.0.0+] GetRightsEnvironmentCountForDebug
 
| 2199 || [6.0.0+] GetRightsEnvironmentCountForDebug
 
|-
 
|-
| 2200 || [6.0.0+] GetGameCardApplicationCopyIdentifier
+
| 2200 || [6.0.0-9.2.0] GetGameCardApplicationCopyIdentifier
 
|-
 
|-
| 2201 || [6.0.0+] GetInstalledApplicationCopyIdentifier
+
| 2201 || [6.0.0-9.2.0] GetInstalledApplicationCopyIdentifier
 
|-
 
|-
 
| 2250 || [6.0.0-6.2.0] RequestReportActiveELicence
 
| 2250 || [6.0.0-6.2.0] RequestReportActiveELicence
Line 924: Line 999:  
|-
 
|-
 
| 2352 || [9.0.0+] [[#RequestResolveNoDownloadRightsError]]
 
| 2352 || [9.0.0+] [[#RequestResolveNoDownloadRightsError]]
 +
|-
 +
| 2353 || [10.0.0+] GetApplicationDownloadTaskInfo
 +
|-
 +
| 2354 || [11.0.0+] PrioritizeApplicationBackgroundTask
 +
|-
 +
| 2355 || [12.0.0+] PreferStorageEfficientUpdate
 +
|-
 +
| 2356 || [12.0.0+] RequestStorageEfficientUpdatePreferable
 
|-
 
|-
 
| 2400 || [8.0.0+] [[#GetPromotionInfo]]
 
| 2400 || [8.0.0+] [[#GetPromotionInfo]]
Line 941: Line 1,024:  
| 2511 || [9.0.0+] [[#GetApplicationResource]]
 
| 2511 || [9.0.0+] [[#GetApplicationResource]]
 
|-
 
|-
| 2513 || [9.0.0+] LaunchPreomia
+
| 2513 || [10.0.0+] LaunchMicroApplication ([9.0.0-9.2.0] LaunchPreomia)
 
|-
 
|-
 
| 2514 || [9.0.0+] ClearTaskOfAsyncTaskManager
 
| 2514 || [9.0.0+] ClearTaskOfAsyncTaskManager
 +
|-
 +
| 2515 || [10.0.0+] CleanupAllPlaceHolderAndFragmentsIfNoTask
 +
|-
 +
| 2516 || [10.0.0+] EnsureApplicationCertificate
 +
|-
 +
| 2517 || [13.0.0+] CreateApplicationInstance
 +
|-
 +
| 2518 || [13.0.0+] UpdateQualificationForDebug
 +
|-
 +
| 2519 || [13.0.0+] IsQualificationTransitionSupported
 +
|-
 +
| 2520 || [13.0.0+] IsQualificationTransitionSupportedByProcessId
 +
|-
 +
| 2521 || [13.0.0+] GetRightsUserChangedEvent
 +
|-
 +
| 2522 || [14.0.0+] IsRomRedirectionAvailable
 
|-
 
|-
 
| 2800 || [9.0.0+] GetApplicationIdOfPreomia
 
| 2800 || [9.0.0+] GetApplicationIdOfPreomia
|}
+
|-
 
+
| 3000 || [11.0.0+] [[#RegisterDeviceLockKey]]
[4.0.0+] RequestDownloadAddOnContent now takes an additional 8-bytes of input.
+
|-
 +
| 3001 || [11.0.0+] [[#UnregisterDeviceLockKey]]
 +
|-
 +
| 3002 || [11.0.0+] [[#VerifyDeviceLockKey]]
 +
|-
 +
| 3003 || [11.0.0+] [[#HideApplicationIcon]]
 +
|-
 +
| 3004 || [11.0.0+] [[#ShowApplicationIcon]]
 +
|-
 +
| 3005 || [11.0.0+] [[#HideApplicationTitle]]
 +
|-
 +
| 3006 || [11.0.0+] [[#ShowApplicationTitle]]
 +
|-
 +
| 3007 || [11.0.0+] [[#EnableGameCard]]
 +
|-
 +
| 3008 || [11.0.0+] [[#DisableGameCard]]
 +
|-
 +
| 3009 || [11.0.0+] [[#EnableLocalContentShare]]
 +
|-
 +
| 3010 || [11.0.0+] [[#DisableLocalContentShare]]
 +
|-
 +
| 3011 || [11.0.0+] [[#IsApplicationIconHidden]]
 +
|-
 +
| 3012 || [11.0.0+] [[#IsApplicationTitleHidden]]
 +
|-
 +
| 3013 || [11.0.0+] [[#IsGameCardEnabled]]
 +
|-
 +
| 3014 || [11.0.0+] [[#IsLocalContentShareEnabled]]
 +
|-
 +
| 3050 || [14.0.0+] ListAssignELicenseTaskResult
 +
|-
 +
| 9999 || [10.0.0-10.2.0] GetApplicationCertificate
 +
|}
 +
 
 +
[4.0.0+] RequestDownloadAddOnContent now takes an additional 8-bytes of input.
    
==== GetApplicationRecordUpdateSystemEvent ====
 
==== GetApplicationRecordUpdateSystemEvent ====
Line 1,040: Line 1,173:     
See [[#RequestApplicationUpdateInfo]] regarding nifm.
 
See [[#RequestApplicationUpdateInfo]] regarding nifm.
 +
 +
==== LaunchApplication ====
 +
Takes an input u8 ProgramIndex, an input [[#ApplicationLaunchInfo]], returns an output u64.
 +
 +
==== GetApplicationLaunchInfo ====
 +
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[#ApplicationLaunchInfo]].
 +
 +
==== AcquireApplicationLaunchInfo ====
 +
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[#ApplicationLaunchInfo]].
 +
 +
This verifies that a state flag is set and that a state field matches the input ApplicationId, throwing an error otherwise. The [[#ApplicationLaunchInfo]] from state is copied to output, then the state flag is cleared.
    
==== LaunchDevMenu ====
 
==== LaunchDevMenu ====
Line 1,050: Line 1,194:  
[[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.
 
[[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, with a 0.5s sleep-thread afterwards on success.
+
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 ====
 
==== DeleteUserSystemSaveData ====
Line 1,064: Line 1,213:  
Takes an input [[Account_services#Uid|Uid]], no output.
 
Takes an input [[Account_services#Uid|Uid]], no output.
   −
==== RequestDownloadApplicationControlData ====
+
==== LaunchLibraryApplet ====
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]].
+
Takes an input u64 [[NCM_services#ProgramId|ProgramId]], returns an output u64.
   −
See [[#RequestApplicationUpdateInfo]] regarding nifm.
+
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.
   −
==== ListApplicationTitle ====
+
This is used by [[Applet_Manager_services|AM]].
Takes a total of 0x10-bytes of input, a type-0x5 input buffer, an input handle, returns an output Event handle and an [[#IAsyncValue]].
     −
==== ListApplicationIcon ====
+
==== LaunchSystemApplet ====
Takes a total of 0x10-bytes of input, a type-0x5 input buffer, an input handle, returns an output Event handle and an [[#IAsyncValue]].
+
No input, returns an output u64.
   −
==== RequestCheckGameCardRegistration ====
+
A state flag must be 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>.
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]].
     −
See [[#RequestApplicationUpdateInfo]] regarding nifm.
+
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.
   −
==== RequestGameCardRegistrationGoldPoint ====
+
This is used by [[Applet_Manager_services|AM]].
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.
+
==== LaunchOverlayApplet ====
 +
No input, returns an output u64.
 +
 
 +
A state flag must be 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.
 +
 
 +
==== 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 TransferMemory size must be at least: 0x4 + count*sizeof(u64) + count*[[#GetApplicationControlData|0x20000]] + count*sizeof(u64) + [[#GetApplicationControlData|0x24000]].
 +
 
 +
This is essentially an async wrapper for [[#GetApplicationControlData]], with support for multiple ApplicationIds.
 +
 
 +
==== RequestCheckGameCardRegistration ====
 +
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]].
 +
 
 +
See [[#RequestApplicationUpdateInfo]] regarding nifm.
 +
 
 +
==== RequestGameCardRegistrationGoldPoint ====
 +
Takes an input [[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.
 
See [[#RequestApplicationUpdateInfo]] regarding nifm.
Line 1,111: Line 1,303:     
This calls [[Filesystem_services#IDeviceOperator|fsp-srv IDeviceOperator]] GetGameCardCompatibilityType and returns the result.
 
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.
    
==== RequestDownloadTaskListData ====
 
==== RequestDownloadTaskListData ====
Line 1,126: Line 1,321:  
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output.
 
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output.
   −
==== RequestVerifyApplication ====
+
==== RequestVerifyApplicationDeprecated ====
Takes an input TransferMemory handle, an u32, an [[NCM_services#ApplicationId|ApplicationId]], an u64 size, returns an output Event handle and an [[#IAsyncResult]].
+
Takes an input TransferMemory handle, 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.
+
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 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]].
 
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]].
Line 1,156: Line 1,359:  
==== GetApplicationViewWithPromotionInfo ====
 
==== 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.
 
Takes a type-0x6 output buffer containing an array of [[#ApplicationViewWithPromotionInfo]], a type-0x5 input buffer containing an array of u64 [[NCM_services#ApplicationId|ApplicationIds]], no output.
 +
 +
==== IsPatchAutoDeletableApplication ====
 +
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output bool.
 +
 +
Compares the input ApplicationId with the value of [[System_Settings|system-setting]] <code>ns.application!auto_deletable_application_id_on_not_enough_space</code>, with the bool being set to the comparsion result.
    
==== RequestDownloadApplicationPrepurchasedRights ====
 
==== RequestDownloadApplicationPrepurchasedRights ====
Line 1,234: Line 1,442:  
** Uses [[NIM_services|nim]] cmd56, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.
 
** Uses [[NIM_services|nim]] cmd56, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.
 
** Handles cleanup and returns.
 
** Handles cleanup and returns.
* On success, this loads various data which is then used for saving a SystemPlayReport when a state flag is set.
+
* 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>.
 
** The EventId is "receive_app_contents" with ApplicationId <NS ProgramId>.
   Line 1,263: Line 1,471:  
** Uses [[NIM_services|nim]] cmd61, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.
 
** Uses [[NIM_services|nim]] cmd61, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.
 
** Handles cleanup and returns.
 
** Handles cleanup and returns.
* On success, this loads various data which is then used for saving a SystemPlayReport when a state flag is set.
+
* 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>.
 
** The EventId is "send_app_contents" with ApplicationId <NS ProgramId>.
   Line 1,317: Line 1,525:     
==== GetPromotionInfo ====
 
==== GetPromotionInfo ====
Takes a type-0x6 output buffer containing an array of [[#PromotionInfo]], a type-0x5 input buffer containing an array of u64s, a type-0x5 input buffer containing an array of [[Account_services#Uid|Uids]], no output.
+
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.
 
Official sw uses hard-coded value 1 for the count with each of these arrays.
Line 1,339: Line 1,547:  
Returns an [[#IApplicationResource]].
 
Returns an [[#IApplicationResource]].
   −
=== IGameCardStopper ===
+
==== RegisterDeviceLockKey ====
This is "nn::ns::detail::IGameCardStopper".
+
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 interface has no commands.
+
This does SHA256 hashing, etc.
   −
=== IRequestServerStopper ===
+
==== UnregisterDeviceLockKey ====
This is "nn::ns::detail::IRequestServerStopper".
+
No input/output.
   −
This interface has no commands.
+
Runs code identical to [[#RegisterDeviceLockKey]], except the passed buffer/size are 0.
   −
=== IProgressMonitorForDeleteUserSaveDataAll ===
+
==== VerifyDeviceLockKey ====
This is "nn::ns::detail::IProgressMonitorForDeleteUserSaveDataAll".
+
Takes a type-0x5 input buffer containing an InArray of u8, no output.
   −
{| class="wikitable" border="1"
+
User-processes expose this with two funcs: one which uses an user-specified u8 array directly, while the other uses [[HID_services#NpadButtonSet|NpadButton]].
|-
  −
! Cmd || Name
  −
|-
  −
| 0 || GetSystemEvent
  −
|-
  −
| 1 || IsFinished
  −
|-
  −
| 2 || GetResult
  −
|-
  −
| 10 || GetProgress
  −
|}
     −
=== IProgressAsyncResult ===
+
This runs hashing similar to [[#RegisterDeviceLockKey]], with the calculated hash being verified with the one from state.
This is "nn::ns::detail::IProgressAsyncResult".
     −
{| class="wikitable" border="1"
+
==== HideApplicationIcon ====
|-
+
No input/output.
! Cmd || Name
+
 
|-
+
==== ShowApplicationIcon ====
| 0 || Get
+
No input/output.
|-
+
 
| 1 || Cancel
+
==== HideApplicationTitle ====
|-
+
No input/output.
| 2 || GetProgress
+
 
|-
+
==== ShowApplicationTitle ====
| 3 || GetDetailResult
+
No input/output.
|-
+
 
| 4 || GetErrorContext
+
==== EnableGameCard ====
|}
+
No input/output.
   −
=== IApplicationVersionInterface ===
+
==== DisableGameCard ====
This is "nn::ns::detail::IApplicationVersionInterface".
+
No input/output.
   −
This was added with [4.0.0+].
+
==== EnableLocalContentShare ====
 +
No input/output.
   −
{| class="wikitable" border="1"
+
==== DisableLocalContentShare ====
|-
+
No input/output.
! Cmd || Name
+
 
|-
+
==== IsApplicationIconHidden ====
| 0 || GetLaunchRequiredVersion
+
No input, returns an output bool.
|-
+
 
| 1 || UpgradeLaunchRequiredVersion
+
==== IsApplicationTitleHidden ====
|-
+
No input, returns an output bool.
| 35 || UpdateVersionList
+
 
|-
+
==== IsGameCardEnabled ====
| 36 || PushLaunchVersion
+
No input, returns an output bool.
|-
+
 
| 37 || ListRequiredVersion
+
==== IsLocalContentShareEnabled ====
|-
+
No input, returns an output bool.
| 800 || RequestVersionList
+
 
|-
+
Various Deliver cmds now load the same flag used by this cmd (IsLocalContentShareEnabled), with an error being returned when it's not enabled.
| 801 || ListVersionList
+
 
|-
+
=== IGameCardStopper ===
| 802 || [[#RequestVersionListData]]
+
This is "nn::ns::detail::IGameCardStopper".
|-
+
 
| 1000 || PerformAutoUpdate
+
This interface has no commands.
|}
     −
==== RequestVersionListData ====
+
=== IRequestServerStopper ===
No input, returns an output Event handle and an [[#IAsyncValue]].
+
This is "nn::ns::detail::IRequestServerStopper".
   −
The data that can be read from the [[#IAsyncValue]] is [[#VersionListData]].
+
This interface has no commands.
   −
=== IContentManagerInterface ===
+
=== IProgressMonitorForDeleteUserSaveDataAll ===
This is "nn::ns::detail::IContentManagementInterface".
+
This is "nn::ns::detail::IProgressMonitorForDeleteUserSaveDataAll".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,423: Line 1,621:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 11 || CalculateApplicationOccupiedSize
+
| 0 || GetSystemEvent
 
|-
 
|-
| 43 || CheckSdCardMountStatus
+
| 1 || IsFinished
 
|-
 
|-
| 47 || GetTotalSpaceSize
+
| 2 || GetResult
 
|-
 
|-
| 48 || GetFreeSpaceSize
+
| 10 || GetProgress
|-
  −
| 600 || CountApplicationContentMeta
  −
|-
  −
| 601 || ListApplicationContentMetaStatus
  −
|-
  −
| 605 || ListApplicationContentMetaStatusWithRightsCheck
  −
|-
  −
| 607 || IsAnyApplicationRunning
   
|}
 
|}
   −
=== IDocumentInterface ===
+
When closing the object, official sw uses IsFinished first, asserting when the output bool is false.
This is "nn::ns::detail::IDocumentInterface".
+
 
 +
* 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"
 
{| class="wikitable" border="1"
Line 1,447: Line 1,647:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 21 || GetApplicationContentPath
+
| 0 || Get
 +
|-
 +
| 1 || Cancel
 +
|-
 +
| 2 || GetProgress
 
|-
 
|-
| 23 || ResolveApplicationContentPath
+
| 3 || GetDetailResult
 
|-
 
|-
| 92 || [5.0.0+] GetRunningApplicationProgramId
+
| 4 || [4.0.0+] GetErrorContext
 
|}
 
|}
   −
=== IDownloadTaskInterface ===
+
=== IApplicationVersionInterface ===
This is "nn::ns::detail::IDownloadTaskInterface".
+
This is "nn::ns::detail::IApplicationVersionInterface".
 +
 
 +
This was added with [4.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,461: Line 1,667:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 701 || ClearTaskStatusList
+
| 0 || GetLaunchRequiredVersion
 
|-
 
|-
| 702 || RequestDownloadTaskList
+
| 1 || UpgradeLaunchRequiredVersion
 
|-
 
|-
| 703 || RequestEnsureDownloadTask
+
| 35 || UpdateVersionList
 
|-
 
|-
| 704 || ListDownloadTaskStatus
+
| 36 || PushLaunchVersion
 
|-
 
|-
| 705 || [[#RequestDownloadTaskListData]]
+
| 37 || ListRequiredVersion
 +
|-
 +
| 800 || RequestVersionList
 +
|-
 +
| 801 || ListVersionList
 
|-
 
|-
| 706 || [4.0.0+] TryCommitCurrentApplicationDownloadTask
+
| 802 || [[#RequestVersionListData]]
 
|-
 
|-
| 707 || [4.0.0+] EnableAutoCommit
+
| 900 || [12.0.0+] ImportAutoUpdatePolicyJsonForDebug
 
|-
 
|-
| 708 || [4.0.0+] DisableAutoCommit
+
| 901 || [12.0.0+] ListDefaultAutoUpdatePolicy
 
|-
 
|-
| 709 || [4.0.0+] TriggerDynamicCommitEvent
+
| 902 || [12.0.0+] ListAutoUpdatePolicyForSpecificApplication
|}
  −
 
  −
=== IReadOnlyApplicationRecordInterface ===
  −
This is "nn::ns::detail::IReadOnlyApplicationRecordInterface".
  −
 
  −
This was added with [5.0.0+].
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Cmd || Name || Notes
+
| 1000 || PerformAutoUpdate
 
|-
 
|-
| 0 || HasApplicationRecord || Same as [[#IApplicationManagerInterface]] cmd 910
+
| 1001 || [11.0.0+] ListAutoUpdateSchedule
 
|}
 
|}
   −
=== IReadOnlyApplicationControlDataInterface ===
+
==== RequestVersionListData ====
This is "nn::ns::detail::IReadOnlyApplicationControlDataInterface".
+
No input, returns an output Event handle and an [[#IAsyncValue]].
 +
 
 +
The data that can be read from the [[#IAsyncValue]] is [[#VersionListData]].
   −
This was added with [5.1.0+].
+
=== IContentManagementInterface ===
 +
This is "nn::ns::detail::IContentManagementInterface".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name || Notes
+
! Cmd || Name
 
|-
 
|-
| 0 || [[#GetApplicationControlData]] || Same as [[#IApplicationManagerInterface]] cmd 400
+
| 11 || [[#CalculateApplicationOccupiedSize]]
 
|-
 
|-
| 1 || [[#GetApplicationDesiredLanguage]] || Same as [[#IApplicationManagerInterface]] cmd 55
+
| 43 || [[#CheckSdCardMountStatus]]
 
|-
 
|-
| 2 || ConvertApplicationLanguageToLanguageCode || Same as [[#IApplicationManagerInterface]] cmd 59
+
| 47 || [[#GetTotalSpaceSize]]
 
|-
 
|-
| 3 || [[#ConvertLanguageCodeToApplicationLanguage]] || Same as [[#IApplicationManagerInterface]] cmd 60
+
| 48 || [[#GetFreeSpaceSize]]
 +
|-
 +
| 600 || [[#CountApplicationContentMeta]]
 +
|-
 +
| 601 || [[#ListApplicationContentMetaStatus]]
 +
|-
 +
| 605 || [[#ListApplicationContentMetaStatusWithRightsCheck]]
 
|-
 
|-
| 4 || [9.0.0+] SelectApplicationDesiredLanguage ||
+
| 607 || [[#IsAnyApplicationRunning]]
 
|}
 
|}
   −
=== IDynamicRightsInterface ===
+
==== CalculateApplicationOccupiedSize ====
This is "nn::ns::detail::IDynamicRightsInterface".
+
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[#ApplicationOccupiedSize]].
 +
 
 +
==== CheckSdCardMountStatus ====
 +
No input/output.
 +
 
 +
==== CountApplicationContentMeta ====
 +
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output s32.
 +
 
 +
==== ListApplicationContentMetaStatusWithRightsCheck ====
 +
Same input/output as [[#ListApplicationContentMetaStatus]].
 +
 
 +
==== IsAnyApplicationRunning ====
 +
No input, returns an output u8 bool.
   −
This was added with [6.0.0+].
+
=== IDocumentInterface ===
 +
This is "nn::ns::detail::IDocumentInterface".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name || Notes
+
! Cmd || Name
 
|-
 
|-
| 0 || [[#RequestApplicationRightsOnServer]] ||  
+
| 21 || GetApplicationContentPath
 
|-
 
|-
| 1 || RequestAssignRights ||  
+
| 23 || ResolveApplicationContentPath
 
|-
 
|-
| 4 || DeprecatedRequestAssignRightsToResume ||  
+
| 92 || [5.0.0+] GetRunningApplicationProgramId
 +
|}
 +
 
 +
=== IDownloadTaskInterface ===
 +
This is "nn::ns::detail::IDownloadTaskInterface".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 
|-
 
|-
| 5 || VerifyActivatedRightsOwners ||  
+
| 701 || [[#ClearTaskStatusList]]
 
|-
 
|-
| 6 || DeprecatedGetApplicationRightsStatus ||  
+
| 702 || [[#RequestDownloadTaskList]]
 
|-
 
|-
| 7 || RequestPrefetchForDynamicRights ||  
+
| 703 || [[#RequestEnsureDownloadTask]]
 
|-
 
|-
| 8 || GetDynamicRightsState ||  
+
| 704 || [[#ListDownloadTaskStatus]]
 
|-
 
|-
| 9 || [7.0.0+] [[#RequestApplicationRightsOnServerToResume]] ||
+
| 705 || [[#RequestDownloadTaskListData]]
 
|-
 
|-
| 10 || [7.0.0+] RequestAssignRightsToResume ||
+
| 706 || [4.0.0+] [[#TryCommitCurrentApplicationDownloadTask]]
 
|-
 
|-
| 11 || [7.0.0+] GetActivatedRightsUsers ||
+
| 707 || [4.0.0+] [[#EnableAutoCommit]]
 
|-
 
|-
| 12 || [8.0.0+] GetApplicationRightsStatus ||
+
| 708 || [4.0.0+] [[#DisableAutoCommit]]
 
|-
 
|-
| 13 || [8.0.0+] GetRunningApplicationStatus ||
+
| 709 || [4.0.0+] [[#TriggerDynamicCommitEvent]]
 
|}
 
|}
   −
==== RequestApplicationRightsOnServer ====
+
==== ClearTaskStatusList ====
Takes a total of 0x20-bytes of input, returns an output Event handle and an [[#IAsyncValue]].
+
No input/output.
   −
==== RequestApplicationRightsOnServerToResume ====
+
==== RequestDownloadTaskList ====
Takes a total of 8-bytes of input, returns an output Event handle and an [[#IAsyncValue]].
+
No input/output.
 +
 
 +
==== RequestEnsureDownloadTask ====
 +
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.
   −
=== IECommerceInterface===
+
=== IReadOnlyApplicationRecordInterface ===
This is "nn::ns::detail::IECommerceInterface".
+
This is "nn::ns::detail::IReadOnlyApplicationRecordInterface".
   −
This was added with [4.0.0+].
+
This was added with [5.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,561: Line 1,813:  
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 0 || RequestLinkDevice || Takes a total of 0x10-bytes of input, returns an [[#IAsyncResult]].
+
| 0 || HasApplicationRecord || Same as [[#IApplicationManagerInterface]] cmd 910
 
|-
 
|-
| 1 || [6.0.0+] RequestCleanupAllPreInstalledApplications || No input, returns an [[#IAsyncResult]].
+
| 1 || [10.0.0+] NotifyApplicationFailure ||
 
|-
 
|-
| 2 || [6.0.0+] RequestCleanupPreInstalledApplication || Takes a total of 0x8-bytes of input, returns an [[#IAsyncResult]].
+
| 2 || [10.0.0+] IsDataCorruptedResult ||
|-
  −
| 3 || [6.0.0+] RequestSyncRights || No input, returns an [[#IAsyncResult]].
  −
|-
  −
| 4 || [6.0.0+] RequestUnlinkDevice || Takes a total of 0x10-bytes of input, returns an [[#IAsyncResult]].
  −
|-
  −
| 5 || [6.1.0+] RequestRevokeAllELicense || Takes a total of 0x10-bytes of input, returns an [[#IAsyncResult]].
  −
|-
  −
| 6 || [9.0.0+] RequestSyncRightsBasedOnAssignedELicenses ||
   
|}
 
|}
   −
=== IFactoryResetInterface ===
+
=== IReadOnlyApplicationControlDataInterface ===
This is "nn::ns::detail::IFactoryResetInterface".
+
This is "nn::ns::detail::IReadOnlyApplicationControlDataInterface".
 +
 
 +
This was added with [5.1.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Cmd || Name || Notes
 
|-
 
|-
| 100 || ResetToFactorySettings
+
| 0 || [[#GetApplicationControlData]] || Same as [[#IApplicationManagerInterface]] cmd 400
 
|-
 
|-
| 101 || ResetToFactorySettingsWithoutUserSaveData
+
| 1 || [[#GetApplicationDesiredLanguage]] || Same as [[#IApplicationManagerInterface]] cmd 55
 
|-
 
|-
| 102 || ResetToFactorySettingsForRefurbishment
+
| 2 || ConvertApplicationLanguageToLanguageCode || Same as [[#IApplicationManagerInterface]] cmd 59
 
|-
 
|-
| 103 || [9.1.0+] ResetToFactorySettingsWithPlatformRegion
+
| 3 || [[#ConvertLanguageCodeToApplicationLanguage]] || Same as [[#IApplicationManagerInterface]] cmd 60
 
|-
 
|-
| 104 || [9.1.0+] ResetToFactorySettingsWithPlatformRegionAuthentication
+
| 4 || [9.0.0+] SelectApplicationDesiredLanguage ||
 
|}
 
|}
   −
=== IApplicationResource ===
+
=== IDynamicRightsInterface ===
This is "nn::ns::detail::IApplicationResource".
+
This is "nn::ns::detail::IDynamicRightsInterface".
   −
This was added with [9.0.0+].
+
This was added with [6.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,603: Line 1,849:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || Attach
+
| 0 || [[#RequestApplicationRightsOnServer]]
 +
|-
 +
| 1 || [[#RequestAssignRights]]
 +
|-
 +
| 4 || [[#DeprecatedRequestAssignRightsToResume]]
 +
|-
 +
| 5 || [[#VerifyActivatedRightsOwners]]
 +
|-
 +
| 6 || [[#DeprecatedGetApplicationRightsStatus]]
 +
|-
 +
| 7 || [[#RequestPrefetchForDynamicRights]]
 +
|-
 +
| 8 || [[#GetDynamicRightsState]]
 
|-
 
|-
| 1 || BoostSystemMemoryResourceLimit
+
| 9 || [7.0.0+] [[#RequestApplicationRightsOnServerToResume]]
|}
  −
 
  −
= ns:vm =
  −
This is "nn::ns::detail::IVulnerabilityManagerInterface".
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Cmd || Name
+
| 10 || [7.0.0+] [[#RequestAssignRightsToResume]]
 
|-
 
|-
| 1200 || [3.0.0+] [[#NeedsUpdateVulnerability]]
+
| 11 || [7.0.0+] [[#GetActivatedRightsUsers]]
 
|-
 
|-
| 1201 || [4.0.0+] [[#UpdateSafeSystemVersionForDebug]]
+
| 12 || [8.0.0+] [[#GetApplicationRightsStatus]]
 
|-
 
|-
| 1202 || [4.0.0+] [[#GetSafeSystemVersion]]
+
| 13 || [8.0.0+] [[#GetRunningApplicationStatus]]
|}
  −
 
  −
== 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
+
| 14 || [10.0.0+] SelectApplicationLicense
 
|-
 
|-
| 0 || [[#GetBackgroundNetworkUpdateState]]
+
| 15 || [12.0.0+] [[#RequestContentsAuthorizationToken]]
 
|-
 
|-
| 1 || [[#OpenSystemUpdateControl]]
+
| 16 || [13.0.0+] QualifyUser
 
|-
 
|-
| 2 || [[#NotifyExFatDriverRequired]]
+
| 17 || [13.0.0+] QualifyUserWithProcessId
 
|-
 
|-
| 3 || [[#ClearExFatDriverStatusForDebug]]
+
| 18 || [13.0.0+] NotifyApplicationRightsCheckStart
 
|-
 
|-
| 4 || [[#RequestBackgroundNetworkUpdate]]
+
| 19 || [13.0.0+] UpdateUserList
 
|-
 
|-
| 5 || [[#NotifyBackgroundNetworkUpdate]]
+
| 20 || [13.0.0+] IsRightsLostUser
 
|-
 
|-
| 6 || [[#NotifyExFatDriverDownloadedForDebug]]
+
| 21 || [13.1.0+] SetRequiredAddOnContentsOnContentsAvailabilityTransition
 
|-
 
|-
| 9 || [[#GetSystemUpdateNotificationEventForContentDelivery]]
+
| 22 || [14.0.0+] GetLimitedApplicationLicense
 
|-
 
|-
| 10 || [[#NotifySystemUpdateForContentDelivery]]
+
| 23 || [14.0.0+] GetLimitedApplicationLicenseUpgradableEvent
 
|-
 
|-
| 11 || [3.0.0+] [[#PrepareShutdown]]
+
| 24 || [14.0.0+] NotifyLimitedApplicationLicenseUpgradableEventForDebug
 
|-
 
|-
| 12 || [3.0.0-3.0.2]
+
| 25 || [14.0.0+] RequestProceedDynamicRightsState
|-
+
|}
| 13 || [3.0.0-3.0.2]
+
 
|-
+
==== RequestApplicationRightsOnServer ====
| 14 || [3.0.0-3.0.2]
+
Takes an input [[NCM_services#ApplicationId|ApplicationId]], an [[Account_services#Uid|Uid]] and an u32. Returns an output Event handle and an [[#IAsyncValue]].
|-
  −
| 15 || [3.0.0-3.0.2]
  −
|-
  −
| 16 || [4.0.0+] [[#DestroySystemUpdateTask]]
  −
|-
  −
| 17 || [4.0.0+] [[#RequestSendSystemUpdate]]
  −
|-
  −
| 18 || [4.0.0+] [[#GetSendSystemUpdateProgress]]
  −
|}
     −
== GetBackgroundNetworkUpdateState ==
+
==== RequestAssignRights ====
No input, returns an output [[#BackgroundNetworkUpdateState]].
+
Takes a type-0x5 input buffer containing an array of "nn::ns::ApplicationRightsOnServer". Returns an output Event handle and an [[#IAsyncResult]].
   −
This is similar to [[#HasDownloaded]], see [[#BackgroundNetworkUpdateState]].
+
==== DeprecatedRequestAssignRightsToResume ====
 +
Takes an input u64 "nn::ns::RightsEnvironmentHandle" and an [[Account_services#Uid|Uid]]. Returns an output Event handle and an [[#IAsyncResult]].
   −
== OpenSystemUpdateControl ==
+
==== VerifyActivatedRightsOwners ====
No input, returns an [[#ISystemUpdateControl]].
+
Takes an input u64 "nn::ns::RightsEnvironmentHandle". No output.
   −
== NotifyExFatDriverRequired ==
+
==== DeprecatedGetApplicationRightsStatus ====
No input/output.
+
Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns a bool "nn::ns::ApplicationRightsStatus".
   −
Only usable when an [[#ISystemUpdateControl]] isn't open.
+
==== RequestPrefetchForDynamicRights ====
 +
Takes an input [[Account_services#Uid|Uid]]. Returns an output Event handle and an [[#IAsyncResult]].
   −
This uses [[NIM_services|nim]] ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask.
+
==== GetDynamicRightsState ====
 +
No input. Returns a bool "nn::ns::DynamicRightsState".
   −
Then this runs ExFat handling, updates state, and sets the same state flag as [[#RequestBackgroundNetworkUpdate]].
+
==== RequestApplicationRightsOnServerToResume ====
 +
Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns an output Event handle and an [[#IAsyncValue]].
   −
== ClearExFatDriverStatusForDebug ==
+
==== RequestAssignRightsToResume ====
No input/output.
+
Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns an output Event handle and an [[#IAsyncResult]].
   −
== RequestBackgroundNetworkUpdate ==
+
==== GetActivatedRightsUsers ====
No input/output.
+
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]].
   −
Only usable when an [[#ISystemUpdateControl]] isn't open.
+
==== GetApplicationRightsStatus ====
 +
Takes an input "nn::ns::RightsEnvironmentHandle". Returns 2 bools "nn::ns::ApplicationRightsStatus" and "nn::ns::ApplicationLicenseType".
   −
This sets a state flag to value 1.
+
==== GetRunningApplicationStatus ====
 +
Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns an u32 "nn::ns::RunningApplicationStatus".
   −
== NotifyBackgroundNetworkUpdate ==
+
==== RequestContentsAuthorizationToken ====
Takes an input [[NCM_services#ContentMetaKey|ContentMetaKey]], no output.
+
Takes a total of 0x50-bytes of input, a type-0x5 input buffer. Returns an [[#IAsyncData_2|IAsyncData]] and an output handle.
   −
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]].
+
==== IAsyncData ====
 +
This is "nn::ns::detail::IAsyncData".
   −
== NotifyExFatDriverDownloadedForDebug ==
+
This was added with [12.0.0+].
No input/output.
     −
== GetSystemUpdateNotificationEventForContentDelivery ==
+
{| class="wikitable" border="1"
No input, returns an output Event handle with EventClearMode=0.
+
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetSize
 +
|-
 +
| 1 || Get
 +
|-
 +
| 2 || Cancel
 +
|-
 +
| 3 || GetErrorContext
 +
|}
   −
== NotifySystemUpdateForContentDelivery ==
+
=== IECommerceInterface===
No input/output.
+
This is "nn::ns::detail::IECommerceInterface".
   −
Signals the Event returned by [[#GetSystemUpdateNotificationEventForContentDelivery]].
+
This was added with [4.0.0+].
   −
== PrepareShutdown ==
+
{| class="wikitable" border="1"
No input/output.
+
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#RequestLinkDevice]]
 +
|-
 +
| 1 || [6.0.0+] [[#RequestCleanupAllPreInstalledApplications]]
 +
|-
 +
| 2 || [6.0.0+] [[#RequestCleanupPreInstalledApplication]]
 +
|-
 +
| 3 || [6.0.0+] [[#RequestSyncRights]]
 +
|-
 +
| 4 || [6.0.0+] [[#RequestUnlinkDevice]]
 +
|-
 +
| 5 || [6.1.0+] [[#RequestRevokeAllELicense]]
 +
|-
 +
| 6 || [9.0.0+] [[#RequestSyncRightsBasedOnAssignedELicenses]]
 +
|-
 +
| 7 || [14.0.0+] RequestOnlineSubscriptionFreeTrialAvailability
 +
|}
   −
This is used by [[AM_services|AM]].
+
==== RequestLinkDevice ====
 +
Takes an input [[Account_services#Uid|Uid]], returns an output Event handle and an [[#IAsyncResult]].
   −
Just returns 0 when an [[#ISystemUpdateControl]] is open.  
+
See [[#RequestApplicationUpdateInfo]] regarding nifm.
   −
This does various cleanup / uses various service-cmds etc for shutdown preparation.
+
==== RequestCleanupAllPreInstalledApplications ====
 +
No input, returns an output Event handle and an [[#IAsyncResult]].
   −
== DestroySystemUpdateTask ==
+
==== RequestCleanupPreInstalledApplication ====
No input/output.
+
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]].
   −
Only usable when an [[#ISystemUpdateControl]] isn't open.
+
==== RequestSyncRights ====
 +
No input, returns an output Event handle and an [[#IAsyncResult]].
   −
This uses [[NIM_services|nim]] ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask.
+
==== RequestUnlinkDevice ====
 +
Takes an input [[Account_services#Uid|Uid]], returns an output Event handle and an [[#IAsyncResult]].
   −
== RequestSendSystemUpdate ==
+
See [[#RequestApplicationUpdateInfo]] regarding nifm.
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.
+
==== RequestRevokeAllELicense ====
 +
Takes an input [[Account_services#Uid|Uid]], returns an output Event handle and an [[#IAsyncResult]].
   −
[[NIM_services|NIM]] will use the input addr/port with [[Sockets_services|bind()]]. During [[Sockets_services|accept()]] handling the addr from there must match the input addr. Hence, addr must be the client addr. [[NIM_services|NIM]] will also eventually verify that the system is not Internet-connected.
+
==== RequestSyncRightsBasedOnAssignedELicenses ====
 +
No input, returns an output Event handle and an [[#IAsyncResult]].
   −
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. Then the thread does:
+
=== IFactoryResetInterface ===
* Calls a func which does:
+
This is "nn::ns::detail::IFactoryResetInterface".
** Uses [[NIM_services|nim]] cmd76, returning the Result on failure.
  −
** Uses [[NIM_services|nim]] cmd77, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.
  −
** 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 cmd81 and cmd78.
  −
  −
== ISystemUpdateControl ==
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#HasDownloaded]]
+
| 100 || [[#ResetToFactorySettings]]
 
|-
 
|-
| 1 || [[#RequestCheckLatestUpdate]]
+
| 101 || [[#ResetToFactorySettingsWithoutUserSaveData]]
 
|-
 
|-
| 2 || [[#RequestDownloadLatestUpdate]]
+
| 102 || [[#ResetToFactorySettingsForRefurbishment]]
 
|-
 
|-
| 3 || [[#GetDownloadProgress]]
+
| 103 || [9.1.0+] [[#ResetToFactorySettingsWithPlatformRegion]]
 
|-
 
|-
| 4 || [[#ApplyDownloadedUpdate]]
+
| 104 || [9.1.0+] [[#ResetToFactorySettingsWithPlatformRegionAuthentication]]
 
|-
 
|-
| 5 || [[#RequestPrepareCardUpdate]]
+
| 105 || [10.0.0+] [[#RequestResetToFactorySettingsSecurely]]
 
|-
 
|-
| 6 || [[#GetPrepareCardUpdateProgress]]
+
| 106 || [10.0.0+] [[#RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely]]
 +
|}
 +
 
 +
==== ResetToFactorySettings ====
 +
No input/output.
 +
 
 +
As of [9.1.0] this is the only [[#IFactoryResetInterface]] cmd used by [[qlaunch]].
 +
 
 +
==== ResetToFactorySettingsWithoutUserSaveData ====
 +
No input/output.
 +
 
 +
==== ResetToFactorySettingsForRefurbishment ====
 +
No input/output.
 +
 
 +
==== ResetToFactorySettingsWithPlatformRegion ====
 +
No input/output.
 +
 
 +
==== ResetToFactorySettingsWithPlatformRegionAuthentication ====
 +
No input/output.
 +
 
 +
==== RequestResetToFactorySettingsSecurely ====
 +
Takes a total of 8-bytes of input, a handle, returns an output [[#IAsyncValueAndProgress]] and a handle.
 +
 
 +
==== RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely ====
 +
Takes a total of 0x10-bytes of input, a handle, returns an output [[#IAsyncValueAndProgress]] and a handle.
 +
 
 +
===== IAsyncValueAndProgress =====
 +
This is "nn::ns::detail::IAsyncValueAndProgress".
 +
 
 +
This was added with [10.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 7 || [[#HasPreparedCardUpdate]]
+
! Cmd || Name
 
|-
 
|-
| 8 || [[#ApplyCardUpdate]]
+
| 0 || GetSize
 
|-
 
|-
| 9 || [[#GetDownloadedEulaDataSize]]
+
| 1 || Get
 
|-
 
|-
| 10 || [[#GetDownloadedEulaData]]
+
| 2 || Cancel
|-
  −
| 11 || [[#SetupCardUpdate]]
   
|-
 
|-
| 12 || [[#GetPreparedCardUpdateEulaDataSize]]
+
| 3 || GetErrorContext
 
|-
 
|-
| 13 || [[#GetPreparedCardUpdateEulaData]]
+
| 4 || GetProgress
 +
|}
 +
 
 +
=== IApplicationResource ===
 +
This is "nn::ns::detail::IApplicationResource".
 +
 
 +
This was added with [9.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 14 || [4.0.0+] [[#SetupCardUpdateViaSystemUpdater]]
+
! Cmd || Name
 
|-
 
|-
| 15 || [4.0.0+] [[#HasReceived]]
+
| 0 || Attach
 
|-
 
|-
| 16 || [4.0.0+] [[#RequestReceiveSystemUpdate]]
+
| 1 || BoostSystemMemoryResourceLimit
 +
|}
 +
 
 +
= ns:vm =
 +
This is "nn::ns::detail::IVulnerabilityManagerInterface".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 17 || [4.0.0+] [[#GetReceiveProgress]]
+
! Cmd || Name
 
|-
 
|-
| 18 || [4.0.0+] [[#ApplyReceivedUpdate]]
+
| 1200 || [3.0.0+] [[#NeedsUpdateVulnerability]]
 
|-
 
|-
| 19 || [4.0.0+] [[#GetReceivedEulaDataSize]]
+
| 1201 || [4.0.0+] [[#UpdateSafeSystemVersionForDebug]]
 
|-
 
|-
| 20 || [4.0.0+] [[#GetReceivedEulaData]]
+
| 1202 || [4.0.0+] [[#GetSafeSystemVersion]]
|-
  −
| 21 || [4.0.0+] [[#SetupToReceiveSystemUpdate]]
  −
|-
  −
| 22 || [6.0.0+] [[#RequestCheckLatestUpdateIncludesRebootlessUpdate]]
   
|}
 
|}
   −
Only 1 ISystemUpdateControl can be open at a time.
+
== NeedsUpdateVulnerability ==
 +
No input, returns an output u8 bool flag.
   −
All Card cmds except SetupCardUpdate* require [[#SetupCardUpdate]]/[[#SetupCardUpdateViaSystemUpdater]] to be used previously. [[#GetPreparedCardUpdateEulaDataSize]]/[[#GetPreparedCardUpdateEulaData]] checks a different state flag.
+
Web-applets use this command to check if the system needs an update.
   −
=== HasDownloaded ===
+
== UpdateSafeSystemVersionForDebug ==
No input, returns an output u8 bool flag.
+
Takes an input [[NCM_services#ApplicationId|ApplicationId]] and an u32 '''version'''.
   −
Gets whether a network sysupdate was downloaded, with install pending.
+
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.
   −
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.
+
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'''.
   −
This always returns 0, however this will assert if GetSystemUpdateTaskInfo fails with ret!=0x3C89.
+
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".
   −
=== RequestCheckLatestUpdate ===
+
== GetSafeSystemVersion ==
No input, returns an output Event handle and an [[#IAsyncValue]].
+
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>).
   −
The data that can be read from the [[#IAsyncValue]] is [[#LatestSystemUpdate]].
+
= ns:su =
 +
This is "nn::ns::detail::ISystemUpdateInterface".
   −
=== RequestDownloadLatestUpdate ===
+
{| class="wikitable" border="1"
No input, returns an output Event handle and an [[#IAsyncResult]].
+
|-
 
+
! Cmd || Name
=== GetDownloadProgress ===
+
|-
No input, returns an output [[#SystemUpdateProgress]].
+
| 0 || [[#GetBackgroundNetworkUpdateState]]
 
+
|-
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.
+
| 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]]
 +
|}
   −
=== ApplyDownloadedUpdate ===
+
== GetBackgroundNetworkUpdateState ==
No input/output.
+
No input, returns an output [[#BackgroundNetworkUpdateState]].
   −
Runs code similar to [[#HasDownloaded]], throwing an error if a network sysupdate isn't ready for install. Then the sysupdate is installed:
+
This is similar to [[#HasDownloaded]], see [[#BackgroundNetworkUpdateState]].
   −
* Uses ListSystemUpdateTask again, then [[NIM_services|nim]] IsExFatDriverIncluded. Runs ExFat handling when the output flag is set.
+
== OpenSystemUpdateControl ==
* On newer system-versions, this uses [[NIM_services|nim]] GetSystemUpdateTaskInfo then on success uses data from there to save a SystemPlayReport when a state flag is set (by default it's not set).
+
No input, returns an [[#ISystemUpdateControl]].
** 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 FIRM 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 FIRM. After installing each FIRM, 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 ===
+
== NotifyExFatDriverRequired ==
No input, returns an output Event handle and an [[#IAsyncResult]].
+
No input/output.
   −
=== GetPrepareCardUpdateProgress ===
+
Only usable when an [[#ISystemUpdateControl]] isn't open.
No input, returns an output [[#SystemUpdateProgress]].
     −
=== HasPreparedCardUpdate ===
+
This uses [[NIM_services|nim]] ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask.
No input, returns an output u8 bool flag.
     −
=== ApplyCardUpdate ===
+
Then this runs ExFat handling, updates state, and sets the same state flag as [[#RequestBackgroundNetworkUpdate]].
No input/output.
     −
=== GetDownloadedEulaDataSize ===
+
== ClearExFatDriverStatusForDebug ==
Takes a type-0x15 input buffer [[#EulaDataPath]], returns an output u64 '''filesize'''.
+
No input/output.
   −
Runs code similar to [[#HasDownloaded]], throwing an error if a network sysupdate isn't ready for install.
+
== RequestBackgroundNetworkUpdate ==
 +
No input/output.
   −
Uses ListSystemUpdateTask again. Then [[NIM_services|nim]] GetDownloadedSystemDataPath, with the output ContentPath being used to mount the EULA title with FS.
+
Only usable when an [[#ISystemUpdateControl]] isn't open.
   −
Then "<mountname>:/<[[#EulaDataPath]]>" is opened, gets the '''filesize''', then runs cleanup.
+
This sets a state flag to value 1.
   −
=== GetDownloadedEulaData ===
+
== NotifyBackgroundNetworkUpdate ==
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 '''filesize'''.
+
Takes an input [[NCM_services#ContentMetaKey|ContentMetaKey]], no output.
   −
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.
+
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]].
   −
=== SetupCardUpdate ===
+
== NotifyExFatDriverDownloadedForDebug ==
Takes an input u64 size and a TransferMemory handle, no output.
+
No input/output.
   −
Official sw creates the TransferMemory with an user-specified buffer, with permissions=None.
+
== GetSystemUpdateNotificationEventForContentDelivery ==
 +
No input, returns an output Event handle with EventClearMode=0.
   −
[[qlaunch]] uses size 0x100000 for the TransferMemory buffer.
+
== NotifySystemUpdateForContentDelivery ==
 +
No input/output.
   −
=== GetPreparedCardUpdateEulaDataSize ===
+
Signals the Event returned by [[#GetSystemUpdateNotificationEventForContentDelivery]].
Takes a type-0x15 input buffer [[#EulaDataPath]], returns an output u64 '''filesize'''.
     −
This is similar to [[#GetDownloadedEulaDataSize]].
+
== PrepareShutdown ==
 +
No input/output.
   −
=== GetPreparedCardUpdateEulaData ===
+
This is used by [[AM_services|AM]].
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 '''filesize'''.
     −
This is similar to [[#GetDownloadedEulaData]].
+
Just returns 0 when an [[#ISystemUpdateControl]] is open.  
   −
=== SetupCardUpdateViaSystemUpdater ===
+
This does various cleanup / uses various service-cmds etc for shutdown preparation.
Takes an input u64 size and a TransferMemory handle, no output.
     −
The permissions for the TransferMemory is None.
+
== DestroySystemUpdateTask ==
 +
No input/output.
   −
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.
+
Only usable when an [[#ISystemUpdateControl]] isn't open.
   −
=== HasReceived ===
+
This uses [[NIM_services|nim]] ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask.
No input, returns an output u8 bool.
     −
Same as [[#HasDownloaded]] except this uses [[NIM_services|nim]] cmd71 and cmd73.
+
== RequestSendSystemUpdate ==
 
  −
=== RequestReceiveSystemUpdate ===
   
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], an u16 port, an u32 Ipv4Address, returns an output Event handle and an [[#IAsyncResult]].
 
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).
+
[[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.
   −
[[NIM_services|NIM]] will use the input addr/port with [[Sockets_services|connect()]].
+
[[NIM_services|NIM]] will use the input addr/port with [[Sockets_services|bind()]]. During [[Sockets_services|accept()]] handling the addr from there must match the input addr. Hence, addr must be the client addr. [[NIM_services|NIM]] will also eventually verify that the system is not Internet-connected.
    
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. Then the thread does:
 
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. Then the thread does:
   
* Calls a func which does:
 
* Calls a func which does:
** Throws an error if [[NIM_services#ListSystemUpdateTask|ListSystemUpdateTask]] returns any task.
+
** Uses [[NIM_services|nim]] cmd76, returning the Result on failure.
** Checks whether a sysupdate is actually required using the previously generated [[NCM_services#ContentMetaKey|ContentMetaKey]], throwing an error if not.
+
** Uses [[NIM_services|nim]] cmd77, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.
** Uses [[NIM_services|nim]] cmd69, returning the Result on failure.
  −
** Uses [[NIM_services|nim]] cmd72, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.
   
** Handles cleanup and returns.
 
** Handles cleanup and returns.
* On success, this loads various data which is then used for saving a SystemPlayReport when a state flag is set.
+
* Unlike [[#RequestReceiveSystemUpdate]], this doesn't save a SystemPlayReport.
** The EventId is "receive_system_update" with ApplicationId <NS ProgramId>.
     −
=== GetReceiveProgress ===
+
== GetSendSystemUpdateProgress ==
 
No input, returns an output [[#SystemUpdateProgress]].
 
No input, returns an output [[#SystemUpdateProgress]].
   −
Same as [[#GetDownloadProgress]] except this uses [[NIM_services|nim]] cmd71 and cmd73.
+
Same as [[#GetReceiveProgress]] except this uses nim cmd81 and cmd78.
   −
=== ApplyReceivedUpdate ===
+
== ISystemUpdateControl ==
No input/output.
+
This is "nn::ns::detail::ISystemUpdateControl".
 
  −
=== 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"
 
{| class="wikitable" border="1"
Line 1,970: Line 2,243:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || GetSize
+
| 0 || [[#HasDownloaded]]
 
|-
 
|-
| 1 || Get
+
| 1 || [[#RequestCheckLatestUpdate]]
 
|-
 
|-
| 2 || Cancel
+
| 2 || [[#RequestDownloadLatestUpdate]]
 
|-
 
|-
| 3 || [4.0.0+] GetErrorContext
+
| 3 || [[#GetDownloadProgress]]
|}
+
|-
 
+
| 4 || [[#ApplyDownloadedUpdate]]
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.
+
|-
 
+
| 5 || [[#RequestPrepareCardUpdate]]
* 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.
+
| 6 || [[#GetPrepareCardUpdateProgress]]
* 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
+
| 7 || [[#HasPreparedCardUpdate]]
 
|-
 
|-
| 0 || Get
+
| 8 || [[#ApplyCardUpdate]]
 
|-
 
|-
| 1 || Cancel
+
| 9 || [[#GetDownloadedEulaDataSize]]
 
|-
 
|-
| 2 || [4.0.0+] GetErrorContext
+
| 10 || [[#GetDownloadedEulaData]]
|}
  −
 
  −
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".
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Cmd || Name
+
| 11 || [[#SetupCardUpdate]]
 
|-
 
|-
| 0 || [[#LaunchProgram]]
+
| 12 || [[#GetPreparedCardUpdateEulaDataSize]]
 
|-
 
|-
| 1 || [[#TerminateProcess]]
+
| 13 || [[#GetPreparedCardUpdateEulaData]]
 
|-
 
|-
| 2 || [[#TerminateProgram]]
+
| 14 || [4.0.0+] [[#SetupCardUpdateViaSystemUpdater]]
 
|-
 
|-
| 4 || [[#GetShellEvent]]
+
| 15 || [4.0.0+] [[#HasReceived]]
 
|-
 
|-
| 5 || [[#GetShellEventInfo]]
+
| 16 || [4.0.0+] [[#RequestReceiveSystemUpdate]]
 
|-
 
|-
| 6 || [[#TerminateApplication]]
+
| 17 || [4.0.0+] [[#GetReceiveProgress]]
 
|-
 
|-
| 7 || [[#PrepareLaunchProgramFromHost]]
+
| 18 || [4.0.0+] [[#ApplyReceivedUpdate]]
 
|-
 
|-
| 8 || [[#LaunchApplicationForDevelop]]
+
| 19 || [4.0.0+] [[#GetReceivedEulaDataSize]]
 
|-
 
|-
| 9 || [[#LaunchApplicationWithStorageIdForDevelop]]
+
| 20 || [4.0.0+] [[#GetReceivedEulaData]]
 
|-
 
|-
| 10 || [6.0.0-8.1.0] IsSystemMemoryResourceLimitBoosted
+
| 21 || [4.0.0+] [[#SetupToReceiveSystemUpdate]]
 
|-
 
|-
| 11 || [6.0.0+] GetRunningApplicationProcessIdForDevelop
+
| 22 || [6.0.0+] [[#RequestCheckLatestUpdateIncludesRebootlessUpdate]]
|-
  −
| 12 || [6.0.0+] SetCurrentApplicationRightsEnvironmentCanBeActiveForDevelop
  −
|-
  −
| 13 || [9.0.0+] [[#CreateApplicationResourceForDevelop]]
  −
|-
  −
| 14 || [9.0.0+] [[#IsPreomiaForDevelop]]
   
|}
 
|}
   −
== LaunchProgram ==
+
Only 1 ISystemUpdateControl can be open at a time.
Wrapper for "pm:shell" [[Process_Manager_services#pm:shell|LaunchProcess]].
     −
== TerminateProcess ==
+
All Card cmds except SetupCardUpdate* require [[#SetupCardUpdate]]/[[#SetupCardUpdateViaSystemUpdater]] to be used previously. [[#GetPreparedCardUpdateEulaDataSize]]/[[#GetPreparedCardUpdateEulaData]] checks a different state flag.
Wrapper for "pm:shell" [[Process_Manager_services#pm:shell|TerminateProcess]].
     −
== TerminateProgram ==
+
=== HasDownloaded ===
Wrapper for "pm:shell" [[Process_Manager_services#pm:shell|TerminateProgram]].
+
No input, returns an output u8 bool flag.
   −
== GetShellEvent ==
+
Gets whether a network sysupdate was downloaded, with install pending.
Wrapper for "pm:shell" [[Process_Manager_services#pm:shell|GetProcessEventHandle]].
     −
== GetShellEventInfo ==
+
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.
Wrapper for "pm:shell" [[Process_Manager_services#pm:shell|GetProcessEventInfo]].
     −
== TerminateApplication ==
+
This always returns 0, however this will assert if GetSystemUpdateTaskInfo fails with ret!=0x3C89.
Calls "pm:shell" [[Process_Manager_services#pm:shell|GetApplicationProcessIdForShell]] and sends PID to [[Process_Manager_services#pm:shell|TerminateProcess]].
     −
== PrepareLaunchProgramFromHost ==
+
=== RequestCheckLatestUpdate ===
Takes a type-0x5 input buffer containing the [[Filesystem_services|ContentPath]], returns an output 0x10-byte struct.
+
No input, returns an output Event handle and an [[#IAsyncValue]].
   −
Calls [[NCM_services#IPathResolverForStorage|IPathResolverForStorage]] Set...NcaPath functions.
+
The data that can be read from the [[#IAsyncValue]] is [[#LatestSystemUpdate]].
   −
== LaunchApplicationForDevelop ==
+
=== RequestDownloadLatestUpdate ===
Takes an input u32 [[Process_Manager_services#LaunchFlags|LaunchFlags]] and [[NCM_services#ApplicationId|ApplicationId]], returns an output u64 PID.
+
No input, returns an output Event handle and an [[#IAsyncResult]].
   −
Same as LaunchApplicationWithStorageId except the last two params passed to the internal vtable funcptr call are value 0x6, instead of from the command input.
+
=== GetDownloadProgress ===
 +
No input, returns an output [[#SystemUpdateProgress]].
   −
== LaunchApplicationWithStorageIdForDevelop ==
+
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.
Takes 2 input u8s, an u32 [[Process_Manager_services#LaunchFlags|LaunchFlags]], and an [[NCM_services#ApplicationId|ApplicationId]]. Returns an output u64 PID.
     −
Launches an application title which is registered with NS.
+
=== ApplyDownloadedUpdate ===
 +
No input/output.
   −
== CreateApplicationResourceForDevelop ==
+
Runs code similar to [[#HasDownloaded]], throwing an error if a network sysupdate isn't ready for install. Then the sysupdate is installed:
Takes an input u32 (1 = Preomia). Returns an [[#IApplicationResource]].
     −
== IsPreomiaForDevelop ==
+
* Uses ListSystemUpdateTask again, then [[NIM_services|nim]] IsExFatDriverIncluded. Runs ExFat handling when the output flag is set.
Takes an u64 [[NCM_services#ProgramId|ProgramId]]. Returns a bool.
+
* 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.
= VersionListData =
+
** The following fields are added to the report, see [[NIM_services#SystemUpdateTaskInfo|nim SystemUpdateTaskInfo]]: "ContentMetaId", "Version", "DownloadSize", and "ThroughputKBps".
This is "nn::ns::VersionListData".
+
* 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 FIRM 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 FIRM. After installing each FIRM, 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.
   −
= ApplicationUpdateInfo =
+
=== RequestPrepareCardUpdate ===
This is "nn::ns::ApplicationUpdateInfo".
+
No input, returns an output Event handle and an [[#IAsyncResult]].
   −
This is an u8. [[qlaunch]] just checks whether this is 0.
+
=== GetPrepareCardUpdateProgress ===
 +
No input, returns an output [[#SystemUpdateProgress]].
   −
= ApplicationViewDeprecated =
+
=== HasPreparedCardUpdate ===
This is "nn::ns::ApplicationViewDeprecated". This is a 0x40-byte struct.
+
No input, returns an output u8 bool flag.
   −
This is converted from [[#ApplicationView]] by [[#GetApplicationViewDeprecated]] on newer system-versions as follows:
+
=== ApplyCardUpdate ===
 +
No input/output.
   −
{| class="wikitable" border="1"
+
=== GetDownloadedEulaDataSize ===
|-
+
Takes a type-0x15 input buffer [[#EulaDataPath]], returns an output u64 '''filesize'''.
! 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.
  −
|}
     −
= ApplicationView =
+
Runs code similar to [[#HasDownloaded]], throwing an error if a network sysupdate isn't ready for install.
This is "nn::ns::ApplicationView". This is a 0x50-byte struct.
     −
{| class="wikitable" border="1"
+
Uses ListSystemUpdateTask again. Then [[NIM_services|nim]] GetDownloadedSystemDataPath, with the output ContentPath being used to mount the EULA title with FS.
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0 || 0x50 || ?
  −
|}
     −
= ApplicationViewWithPromotionInfo =
+
Then "<mountname>:/<[[#EulaDataPath]]>" is opened, gets the '''filesize''', then runs cleanup.
This is a 0x70-byte struct.
+
 
 
+
=== GetDownloadedEulaData ===
{| class="wikitable" border="1"
+
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 '''filesize'''.
|-
+
 
 +
Similar to [[#GetDownloadedEulaDataSize]] except this reads the file instead, using the specified output buffer with size=filesize. This will throw an error if the filesize is larger than the buffer size.
 +
 
 +
=== SetupCardUpdate ===
 +
Takes an input u64 size and a TransferMemory handle, no output.
 +
 
 +
Official sw creates the TransferMemory with an user-specified buffer, with permissions=None.
 +
 
 +
[[qlaunch]] uses size 0x100000 for the TransferMemory buffer.
 +
 
 +
=== GetPreparedCardUpdateEulaDataSize ===
 +
Takes a type-0x15 input buffer [[#EulaDataPath]], returns an output u64 '''filesize'''.
 +
 
 +
This is similar to [[#GetDownloadedEulaDataSize]].
 +
 
 +
=== GetPreparedCardUpdateEulaData ===
 +
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 '''filesize'''.
 +
 
 +
This is similar to [[#GetDownloadedEulaData]].
 +
 
 +
=== SetupCardUpdateViaSystemUpdater ===
 +
Takes an input u64 size and a TransferMemory handle, no output.
 +
 
 +
The permissions for the TransferMemory is None.
 +
 
 +
Same as [[#SetupCardUpdate]], except this doesn't have the code for [[Filesystem_services|GetGameCardHandle/GetGameCardUpdatePartitionInfo]], and uses [[Filesystem_services|OpenRegisteredUpdatePartition]] instead of [[Filesystem_services|OpenGameCardFileSystem]]. This uses the same is_initialized bool state flag.
 +
 
 +
=== HasReceived ===
 +
No input, returns an output u8 bool.
 +
 
 +
Same as [[#HasDownloaded]] except this uses [[NIM_services|nim]] cmd71 and cmd73.
 +
 
 +
=== 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).
 +
 
 +
[[NIM_services|NIM]] will use the input addr/port with [[Sockets_services|connect()]].
 +
 
 +
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. 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]], throwing an error if not.
 +
** Uses [[NIM_services|nim]] cmd69, returning the Result on failure.
 +
** Uses [[NIM_services|nim]] cmd72, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.
 +
** 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]] cmd71 and cmd73.
 +
 
 +
=== ApplyReceivedUpdate ===
 +
No input/output.
 +
 
 +
=== 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+] [[#LaunchApplicationFromHost]] ([1.0.0-9.2.0] [[#LaunchApplicationForDevelop]])
 +
|-
 +
| 9 || [[#LaunchApplicationWithStorageIdForDevelop]]
 +
|-
 +
| 10 || [6.0.0-8.1.0] [[#IsSystemMemoryResourceLimitBoosted]]
 +
|-
 +
| 11 || [6.0.0+] [[#GetRunningApplicationProcessIdForDevelop]]
 +
|-
 +
| 12 || [6.0.0+] [[#SetCurrentApplicationRightsEnvironmentCanBeActiveForDevelop]]
 +
|-
 +
| 13 || [9.0.0+] [[#CreateApplicationResourceForDevelop]]
 +
|-
 +
| 14 || [9.0.0+] [[#IsPreomiaForDevelop]]
 +
|-
 +
| 15 || [10.0.0+] [[#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
 +
|}
 +
 
 +
== 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|ContentPath]], returns an output 0x10-byte struct.
 +
 
 +
Calls [[NCM_services#IPathResolverForStorage|IPathResolverForStorage]] Set...NcaPath functions.
 +
 
 +
== LaunchApplicationForDevelop ==
 +
Takes an input u32 [[Process_Manager_services#LaunchFlags|LaunchFlags]] and [[NCM_services#ApplicationId|ApplicationId]], returns an output u64 ProcessId.
 +
 
 +
Same as [[#LaunchApplicationWithStorageIdForDevelop]] except the last two params passed to the internal vtable funcptr call are value 0x6, instead of from the command input.
 +
 
 +
== LaunchApplicationFromHost ==
 +
Takes an input u32 [[Process_Manager_services#LaunchFlags|LaunchFlags]] and a type-0x5 input buffer containing the [[Filesystem_services|ContentPath]]. Returns an output u64 ProcessId.
 +
 
 +
== LaunchApplicationWithStorageIdForDevelop ==
 +
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.
 +
 
 +
== GetRunningApplicationProcessIdForDevelop ==
 +
Returns an output u64 ProcessId.
 +
 
 +
== SetCurrentApplicationRightsEnvironmentCanBeActiveForDevelop ==
 +
Takes an input bool. No output.
 +
 
 +
== CreateApplicationResourceForDevelop ==
 +
Takes an input u32 (1 = Preomia/MicroApplication). Returns an [[#IApplicationResource]].
 +
 
 +
== IsPreomiaForDevelop ==
 +
Takes an input u64 [[NCM_services#ProgramId|ProgramId]]. Returns a bool.
 +
 
 +
== GetApplicationProgramIdFromHost ==
 +
Takes a type-0x5 input buffer containing the [[Filesystem_services|ContentPath]]. Returns an u64 [[NCM_services#ProgramId|ProgramId]].
 +
 
 +
= acc:su =
 +
This is "nn::account::IAccountServiceForAdministrator".
 +
 
 +
[13.0.0+] This was moved from [[Account_services|account]].
 +
 
 +
{| 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 || [[#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+] 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]].
 +
|-
 +
| 230 || AuthenticateServiceAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 250 || GetBaasAccountAdministrator || Returns an [[#IAdministrator]].
 +
|-
 +
| 290 || ProxyProcedureForGuestLoginWithNintendoAccount || Returns an [[#IOAuthProcedureForExternalNsa]] (formerly [[#IOAuthProcedureForGuestLogin]] with [1.0.0-2.3.0]).
 +
|-
 +
| 291 || [3.0.0+] ProxyProcedureForFloatingRegistrationWithNintendoAccount || Returns an [[#IOAuthProcedureForExternalNsa]].
 +
|-
 +
| 299 || SuspendBackgroundDaemon || Returns an [[#ISessionObject]].
 +
|-
 +
| 900 || [13.0.0+] SetUserUnqualifiedForDebug ||
 +
|-
 +
| 901 || [13.0.0+] UnsetUserUnqualifiedForDebug ||
 +
|-
 +
| 902 || [13.0.0+] ListUsersUnqualifiedForDebug ||
 +
|-
 +
| 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"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || CheckAvailability ||
 +
|-
 +
| 1 || GetAccountId ||
 +
|-
 +
| 2 || EnsureIdTokenCacheAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 3 || LoadIdTokenCache ||
 +
|-
 +
| 100 || SetSystemProgramIdentification ||
 +
|-
 +
| 101 || [7.0.0+] RefreshNotificationTokenAsync ||
 +
|-
 +
| 110 || [4.0.0+] GetServiceEntryRequirementCache ||
 +
|-
 +
| 111 || [4.0.0+] InvalidateServiceEntryRequirementCache ||
 +
|-
 +
| 112 || [4.0.0-6.2.0] InvalidateTokenCache ||
 +
|-
 +
| 113 || [6.1.0+] GetServiceEntryRequirementCacheForOnlinePlay || Takes a total of 0x8-bytes of input, returns a total of 0x4-bytes of output.
 +
|-
 +
| 120 || GetNintendoAccountId ||
 +
|-
 +
| 121 || [9.0.0+] CalculateNintendoAccountAuthenticationFingerprint ||
 +
|-
 +
| 130 || GetNintendoAccountUserResourceCache ||
 +
|-
 +
| 131 || RefreshNintendoAccountUserResourceCacheAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 132 || RefreshNintendoAccountUserResourceCacheAsyncIfSecondsElapsed || Returns an [[#IAsyncContext]].
 +
|-
 +
| 133 || [9.0.0+] GetNintendoAccountVerificationUrlCache ||
 +
|-
 +
| 134 || [9.0.0+] RefreshNintendoAccountVerificationUrlCacheAsync ||
 +
|-
 +
| 135 || [9.0.0+] RefreshNintendoAccountVerificationUrlCacheAsyncIfSecondsElapsed ||
 +
|-
 +
| 140 || [5.0.0+] GetNetworkServiceLicenseCache ||
 +
|-
 +
| 141 || [5.0.0+] RefreshNetworkServiceLicenseCacheAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 142 || [5.0.0+] RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed || Returns an [[#IAsyncContext]].
 +
|-
 +
| 150 || CreateAuthorizationRequest || Returns an [[#IAuthorizationRequest]].
 +
|}
 +
 
 +
== IFloatingRegistrationRequest ==
 +
This is "nn::account::baas::IFloatingRegistrationRequest".
 +
 
 +
Added with [3.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || GetSessionId ||
 +
|-
 +
| 12 || GetAccountId ||
 +
|-
 +
| 13 || GetLinkedNintendoAccountId ||
 +
|-
 +
| 14 || GetNickname ||
 +
|-
 +
| 15 || GetProfileImage ||
 +
|-
 +
| 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".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || CheckAvailability ||
 +
|-
 +
| 1 || GetAccountId ||
 +
|-
 +
| 2 || EnsureIdTokenCacheAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 3 || LoadIdTokenCache ||
 +
|-
 +
| 100 || SetSystemProgramIdentification ||
 +
|-
 +
| 101 || [7.0.0+] RefreshNotificationTokenAsync
 +
|-
 +
| 110 || [4.0.0+] GetServiceEntryRequirementCache ||
 +
|-
 +
| 111 || [4.0.0+] InvalidateServiceEntryRequirementCache ||
 +
|-
 +
| 112 || [4.0.0-6.2.0] InvalidateTokenCache ||
 +
|-
 +
| 113 || [6.1.0+] GetServiceEntryRequirementCacheForOnlinePlay || Takes a total of 0x8-bytes of input, returns a total of 0x4-bytes of output.
 +
|-
 +
| 120 || GetNintendoAccountId ||
 +
|-
 +
| 121 || [9.0.0+] CalculateNintendoAccountAuthenticationFingerprint ||
 +
|-
 +
| 130 || GetNintendoAccountUserResourceCache ||
 +
|-
 +
| 131 || RefreshNintendoAccountUserResourceCacheAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 132 || RefreshNintendoAccountUserResourceCacheAsyncIfSecondsElapsed || Returns an [[#IAsyncContext]].
 +
|-
 +
| 133 || [9.0.0+] GetNintendoAccountVerificationUrlCache ||
 +
|-
 +
| 134 || [9.0.0+] RefreshNintendoAccountVerificationUrlCacheAsync ||
 +
|-
 +
| 135 || [9.0.0+] RefreshNintendoAccountVerificationUrlCacheAsyncIfSecondsElapsed ||
 +
|-
 +
| 140 || [5.0.0+] GetNetworkServiceLicenseCache ||
 +
|-
 +
| 141 || [5.0.0+] RefreshNetworkServiceLicenseCacheAsync ||
 +
|-
 +
| 142 || [5.0.0+] RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed ||
 +
|-
 +
| 150 || CreateAuthorizationRequest || Returns an [[#IAuthorizationRequest]].
 +
|-
 +
| 200 || IsRegistered ||
 +
|-
 +
| 201 || RegisterAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 202 || UnregisterAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 203 || DeleteRegistrationInfoLocally ||
 +
|-
 +
| 220 || SynchronizeProfileAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 221 || UploadProfileAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 222 || SynchronizeProfileAsyncIfSecondsElapsed || Returns an [[#IAsyncContext]].
 +
|-
 +
| 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]].
 +
|-
 +
| 410 || [13.1.0+] CheckRequiredLicenseForLexAsync ||
 +
|-
 +
| 900 || [9.0.0+] GetAuthenticationInfoForWin ||
 +
|-
 +
| 901 || [9.0.0+] ImportAsyncForWin ||
 +
|-
 +
| 997 || DebugUnlinkNintendoAccountAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 998 || DebugSetAvailabilityErrorDetail ||
 +
|}
 +
 
 +
== IAuthorizationRequest ==
 +
This is "nn::account::nas::IAuthorizationRequest".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || GetSessionId ||
 +
|-
 +
| 10 || InvokeWithoutInteractionAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 19 || IsAuthorized ||
 +
|-
 +
| 20 || GetAuthorizationCode ||
 +
|-
 +
| 21 || GetIdToken ||
 +
|-
 +
| 22 || GetState ||
 +
|}
 +
 
 +
== IOAuthProcedure ==
 +
This is "nn::account::http::IOAuthProcedure".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || PrepareAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 1 || GetRequest ||
 +
|-
 +
| 2 || ApplyResponse ||
 +
|-
 +
| 3 || ApplyResponseAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 10 || Suspend ||
 +
|}
 +
 
 +
== IOAuthProcedureForExternalNsa ==
 +
This is "nn::account::nas::IOAuthProcedureForExternalNsa".
 +
 
 +
Added with [3.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || PrepareAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 1 || GetRequest ||
 +
|-
 +
| 2 || ApplyResponse ||
 +
|-
 +
| 3 || ApplyResponseAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 10 || Suspend ||
 +
|-
 +
| 100 || GetAccountId ||
 +
|-
 +
| 101 || GetLinkedNintendoAccountId ||
 +
|-
 +
| 102 || GetNickname ||
 +
|-
 +
| 103 || GetProfileImage ||
 +
|}
 +
 
 +
== IOAuthProcedureForNintendoAccountLinkage ==
 +
This is "nn::account::nas::IOAuthProcedureForNintendoAccountLinkage".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || PrepareAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 1 || GetRequest ||
 +
|-
 +
| 2 || ApplyResponse ||
 +
|-
 +
| 3 || ApplyResponseAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 10 || Suspend ||
 +
|-
 +
| 100 || GetRequestWithTheme ||
 +
|-
 +
| 101 || IsNetworkServiceAccountReplaced ||
 +
|-
 +
| 199 || [2.0.0-5.1.0] GetUrlForIntroductionOfExtraMembership ||
 +
|}
 +
 
 +
== 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]]
 +
|}
 +
 
 +
=== 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]]
 +
|-
 +
| 100 || [[#Store]]
 +
|-
 +
| 101 || [[#StoreWithImage]]
 +
|}
 +
 
 +
=== Store ===
 +
Takes a [[#ProfileBase]] and an input type-0x19 buffer for [[#UserData]].
 +
 
 +
=== StoreWithImage ===
 +
Takes a [[#ProfileBase]], an input type-0x19 buffer for [[#UserData]], and an input type-0x5 buffer.
 +
 
 +
== IAsyncContext ==
 +
This is "nn::account::detail::IAsyncContext".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetSystemEvent
 +
|-
 +
| 1 || Cancel
 +
|-
 +
| 2 || HasDone
 +
|-
 +
| 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]].
 +
 
 +
{| 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 || [[#TrySelectUserWithoutInteraction]] ||
 +
|-
 +
| 60 || [5.0.0-5.1.0] ListOpenContextStoredUsers ||
 +
|-
 +
| 99 || [6.0.0+] DebugActivateOpenContextRetention || No input, returns an [[#ISessionObject]].
 +
|-
 +
| 100 || [[#InitializeApplicationInfoV0]] ||
 +
|-
 +
| 101 || GetBaasAccountManagerForApplication || Takes an input userID, returns an [[#IManagerForApplication]].
 +
|-
 +
| 102 || AuthenticateApplicationAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 103 || [4.0.0+] CheckNetworkServiceAvailabilityAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 110 || StoreSaveDataThumbnail ||
 +
|-
 +
| 111 || ClearSaveDataThumbnail ||
 +
|-
 +
| 120 || CreateGuestLoginRequest || Returns an [[#IGuestLoginRequest]].
 +
|-
 +
| 130 || [5.0.0+] LoadOpenContext ||
 +
|-
 +
| 131 || [6.0.0+] ListOpenContextStoredUsers ||
 +
|-
 +
| 140 || [6.0.0+] [[#InitializeApplicationInfoV1]] ||
 +
|-
 +
| 141 || [6.0.0+] ListQualifiedUsers ||
 +
|-
 +
| 150 || [6.0.0+] IsUserAccountSwitchLocked ||
 +
|-
 +
| 160 || [13.0.0+] InitializeApplicationInfoV2 ||
 +
|}
 +
 
 +
InitializeApplicationInfo* is used by the user-process during service init.
 +
 
 +
== InitializeApplicationInfoV0 ==
 +
Takes a PID and an input u64 pid_placeholder, no output.
 +
 
 +
== InitializeApplicationInfoV1 ==
 +
Takes a PID and an input u64 pid_placeholder, no output.
 +
 
 +
== IGuestLoginRequest ==
 +
This is "nn::account::baas::IGuestLoginRequest".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetSessionId
 +
|-
 +
| 11 || [1.0.0-2.3.0]
 +
|-
 +
| 12 || GetAccountId
 +
|-
 +
| 13 || GetLinkedNintendoAccountId
 +
|-
 +
| 14 || GetNickname
 +
|-
 +
| 15 || GetProfileImage
 +
|-
 +
| 21 || [3.0.0+] LoadIdTokenCache
 +
|}
 +
 
 +
== IManagerForApplication ==
 +
This is "nn::account::baas::IManagerForApplication".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || CheckAvailability ||
 +
|-
 +
| 1 || GetAccountId ||
 +
|-
 +
| 2 || EnsureIdTokenCacheAsync || Returns an [[#IAsyncContext]].
 +
|-
 +
| 3 || LoadIdTokenCache ||
 +
|-
 +
| 130 || GetNintendoAccountUserResourceCacheForApplication ||
 +
|-
 +
| 150 || CreateAuthorizationRequest || Returns an [[#IAuthorizationRequest]].
 +
|-
 +
| 160 || [5.0.0+] StoreOpenContext ||
 +
|-
 +
| 170 || [13.0.0+] EnsureIdTokenCacheForOnlinePlayAsync ([6.0.0-12.1.0] LoadNetworkServiceLicenseKindAsync) || No input, returns an [[#IAsyncContextForLoginForOnlinePlay]] ([6.0.0-12.1.0] [[#IAsyncNetworkServiceLicenseKindContext]]).
 +
|}
 +
 
 +
== IAsyncNetworkServiceLicenseKindContext ==
 +
This is "nn::account::detail::IAsyncNetworkServiceLicenseKindContext".
 +
 
 +
This was added with [6.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || GetSystemEvent ||
 +
|-
 +
| 1 || Cancel ||
 +
|-
 +
| 2 || HasDone ||
 +
|-
 +
| 3 || GetResult ||
 +
|-
 +
| 100 || GetNetworkServiceLicenseKind ||
 +
|}
 +
 
 +
== IAsyncContextForLoginForOnlinePlay ==
 +
This is "nn::account::baas::IAsyncContextForLoginForOnlinePlay".
 +
 
 +
This was added with [13.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || GetSystemEvent ||
 +
|-
 +
| 1 || Cancel ||
 +
|-
 +
| 2 || HasDone ||
 +
|-
 +
| 3 || GetResult ||
 +
|-
 +
| 100 || GetNetworkServiceLicenseInfoForOnlinePlay ||
 +
|}
 +
 
 +
= acc:u1 =
 +
This is "nn::account::IAccountServiceForSystemService".
 +
 
 +
[13.0.0+] This was moved from [[Account_services|account]].
 +
 
 +
{| 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 || [[#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+] UpdateNotificationReceiverInfo ([5.0.0-5.1.0] ActivateOpenContextHolder) ||
 +
|-
 +
| 997 || [3.0.0+] DebugInvalidateTokenCacheForUser ||
 +
|-
 +
| 998 || DebugSetUserStateClose ||
 +
|-
 +
| 999 || DebugSetUserStateOpen ||
 +
|}
 +
 
 +
[10.0.0+] DebugSetUserStateClose/DebugSetUserStateOpen now takes an additional 8-bytes of input.
 +
 
 +
== IOAuthProcedureForUserRegistration ==
 +
This is "nn::account::nas::IOAuthProcedureForUserRegistration".
 +
 
 +
This was added with [8.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 0 || PrepareAsync || No input, returns an [[#IAsyncContext]].
 +
|-
 +
| 1 || GetRequest ||
 +
|-
 +
| 2 || ApplyResponse ||
 +
|-
 +
| 3 || ApplyResponseAsync || Takes a type-0x9 input buffer, returns an [[#IAsyncContext]].
 +
|-
 +
| 10 || Suspend ||
 +
|-
 +
| 100 || GetAccountId ||
 +
|-
 +
| 101 || GetLinkedNintendoAccountId ||
 +
|-
 +
| 102 || GetNickname ||
 +
|-
 +
| 103 || GetProfileImage ||
 +
|-
 +
| 110 || RegisterUserAsync || No input, returns an [[#IAsyncContext]].
 +
|-
 +
| 111 || GetUid ||
 +
|}
 +
 
 +
= VersionListData =
 +
This is "nn::ns::VersionListData".
 +
 
 +
= ApplicationUpdateInfo =
 +
This is "nn::ns::ApplicationUpdateInfo".
 +
 
 +
This is an u8. [[qlaunch]] just checks whether this is 0.
 +
 
 +
= ApplicationOccupiedSize =
 +
This is "nn::ns::ApplicationOccupiedSize". This is a 0x80-byte struct.
 +
 
 +
= ProgressForDeleteUserSaveDataAll =
 +
This is "nn::ns::detail::ProgressForDeleteUserSaveDataAll". This is a 0x28-byte struct.
 +
 
 +
= ApplicationViewDeprecated =
 +
This is "nn::ns::ApplicationViewDeprecated". This is a 0x40-byte struct.
 +
 
 +
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.
 +
|}
 +
 
 +
= 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.
 +
 
 +
{| 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
 +
|}
 +
 
 +
= NoDownloadRightsErrorResolution =
 +
This is "nn::ns::NoDownloadRightsErrorResolution".
 +
 
 +
= BackgroundNetworkUpdateState =
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || No sysupdate task exists.
 +
|-
 +
| 1 || Sysupdate download in progress.
 +
|-
 +
| 2 || Sysupdate ready, pending install.
 +
|}
 +
 
 +
This is "nn::ns::BackgroundNetworkUpdateState". This is an u8.
 +
 
 +
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 =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x8 || s64 Current size. This value can be larger than total_size when the async operation is finishing. 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 || s64 Total size, this field is only valid when >0.
 +
|}
 +
 
 +
This is "nn::ns::SystemUpdateProgress". This is a 0x10-byte struct.
 +
 
 +
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 =
 +
{| 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 || SystemUpdateMetaVersion.
 +
|-
 +
| 0x10 || 0x8 || SystemUpdateMetaId.
 +
|-
 +
| 0x18 || 0x1 || FirmwareVariationId. Used by [[#RequestSendSystemUpdate]].
 +
|-
 +
| 0x19 || 0x1 || UpdatableFirmwareGroupId. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.
 +
|-
 +
| 0x1A || 0x1 || PlatformRegion (0x00 = Unknown, 0x01 = Global, 0x02 = China).
 +
|-
 +
| 0x1B || 0xC5 || Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.
 +
|-
 +
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes.
 +
|}
 +
 
 +
This is "nn::ns::SystemDeliveryInfo". This is a 0x100-byte struct.
 +
 
 +
= ApplicationDeliveryInfo =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x8 || ?
 +
|-
 +
| 0x8 || 0x8 || ApplicationId.
 +
|-
 +
| 0x10 || 0x4 || ApplicationVersion.
 +
|-
 +
| 0x14 || 0x4 || ?
 +
|-
 +
| 0x18 || 0x4 || RequiredSystemVersion.
 +
|-
 +
| 0x1C || 0x4 || ?
 +
|-
 +
| 0x20 || 0xC0 || ?
 +
|-
 +
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes. Uses a different key than [[#SystemDeliveryInfo]].
 +
|}
 +
 
 +
This is "nn::ns::ApplicationDeliveryInfo". This is a 0x100-byte struct.
 +
 
 +
= LatestSystemUpdate =
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Value
 +
!  Description
 +
|-
 +
| 1 || Unknown.
 +
|-
 +
| 2 || Unknown.
 +
|-
 +
| Other values || Unknown.
 +
|}
 +
 
 +
This is "nn::ns::LatestSystemUpdate". This is an u8.
 +
 
 +
= ReceiveApplicationProgress =
 +
This is "nn::ns::ReceiveApplicationProgress". This is a 0x10-byte struct.
 +
 
 +
= SendApplicationProgress =
 +
This is "nn::ns::SendApplicationProgress". This is a 0x10-byte struct.
 +
 
 +
= ApplicationRightsOnClient =
 +
This is a 0x20-byte struct.
 +
 
 +
[[qlaunch]] only uses +0x18/+0x19 in this struct.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]]
 +
|-
 +
| 0x8 || 0x10 || [[Account_services#Uid|Uid]]
 +
|-
 +
| 0x18 || 0x1 || Flags, [[qlaunch]] only uses bit0-bit4 and bit7.
 +
|-
 +
| 0x19 || 0x1 || Flags, [[qlaunch]] only uses bit0.
 +
|-
 +
| 0x1A || 0x6 || Unknown
 +
|}
 +
 
 +
= DownloadTaskStatus =
 +
This is "nn::ns::DownloadTaskStatus". This is a 0x20-byte struct.
 +
 
 +
= ApplicationLaunchInfo =
 +
This is a 0x40-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 
! Offset
 
! Offset
 
! Size
 
! Size
 
! Description
 
! Description
 
|-
 
|-
| 0x0 || 0x50 || [[#ApplicationView]]
+
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]]
|-
  −
| 0x50 || 0x20 || [[#PromotionInfo]]
  −
|}
  −
 
  −
= PromotionInfo =
  −
This is a 0x20-byte struct.
  −
 
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0 || 0x20 || ?
  −
|}
  −
 
  −
= NoDownloadRightsErrorResolution =
  −
This is "nn::ns::NoDownloadRightsErrorResolution".
  −
 
  −
= BackgroundNetworkUpdateState =
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  Value
+
| 0x8 || 0x4 || Application version
!  Description
   
|-
 
|-
| 0 || No sysupdate task exists.
+
| 0xC || 0x4 || [[Process_Manager_services#LaunchFlags|LaunchFlags]], set to hard-coded value 0xB by [[#GetApplicationLaunchInfo]].
|-
  −
| 1 || Sysupdate download in progress.
  −
|-
  −
| 2 || Sysupdate ready, pending install.
  −
|}
  −
 
  −
This is "nn::ns::BackgroundNetworkUpdateState". This is an u8.
  −
 
  −
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 =
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset
+
| 0x10 || 0x1 || Application [[NCM_services#StorageId|StorageId]]
! Size
  −
! Description
   
|-
 
|-
| 0x0 || 0x8 || s64 Current size. This value can be larger than total_size when the async operation is finishing. When total_size is <=0, this current_size field may contain a progress value for when the total_size is not yet determined.
+
| 0x11 || 0x1 || Update [[NCM_services#StorageId|StorageId]]
 
|-
 
|-
| 0x8 || 0x8 || s64 Total size, this field is only valid when >0.
+
| 0x12 || 0x2E ||  
 
|}
 
|}
   −
This is "nn::ns::SystemUpdateProgress". This is a 0x10-byte struct.
+
= UserData =
 
  −
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 =
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Offset
+
! Offset || Size || Description
! 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 || SystemUpdateMetaVersion.
   
|-
 
|-
| 0x10 || 0x8 || SystemUpdateMetaId.
+
| 0x0 || 0x4? || ?
 
|-
 
|-
| 0x18 || 0x1 || FirmwareVariationId. Used by [[#RequestSendSystemUpdate]].
+
| 0x4 || 0x4? || Icon ID. 0 = Mii, the rest are character icon IDs.
 
|-
 
|-
| 0x19 || 0x1 || UpdatableFirmwareGroupId. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.
+
| 0x8 || 0x1? || Profile icon background color ID
 
|-
 
|-
| 0x1A || 0x1 || PlatformRegion (0x00 = Unknown, 0x01 = Global, 0x02 = China).
+
| 0x9 || 0x7 || ?
 
|-
 
|-
| 0x1B || 0xC5 || Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.
+
| 0x10 || 0x10 || Some ID related to the Mii? All zeros when a character icon is used.
 
|-
 
|-
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes.
+
| 0x20 || 0x60 || Usually zeros?
 
|}
 
|}
   −
This is "nn::ns::SystemDeliveryInfo". This is a 0x100-byte struct.
+
This is a 0x80-byte struct.
   −
= ApplicationDeliveryInfo =
+
= ProfileBase =
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Offset
+
! Offset || Size || Description
! Size
  −
! Description
  −
|-
  −
| 0x0 || 0x8 || ?
  −
|-
  −
| 0x8 || 0x8 || ApplicationId.
  −
|-
  −
| 0x10 || 0x4 || ApplicationVersion.
  −
|-
  −
| 0x14 || 0x4 || ?
  −
|-
  −
| 0x18 || 0x4 || RequiredSystemVersion.
  −
|-
  −
| 0x1C || 0x4 || ?
  −
|-
  −
| 0x20 || 0xC0 || ?
  −
|-
  −
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes. Uses a different key than [[#SystemDeliveryInfo]].
  −
|}
  −
 
  −
This is "nn::ns::ApplicationDeliveryInfo". This is a 0x100-byte struct.
  −
 
  −
= LatestSystemUpdate =
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  Value
+
| 0x0 || 0x10 || userID
!  Description
   
|-
 
|-
| 1 || Unknown.
+
| 0x10 || 0x8 || POSIX UTC timestamp, for last account edit.
 
|-
 
|-
| 2 || Unknown.
+
| 0x18 || 0x20 || UTF-8 Nickname. Official sw uses strncpy to copy this into another struct (<code>nn::account::Nickname</code>), with a NUL-byte written after the copied data.
 
|-
 
|-
| Other values || Unknown.
   
|}
 
|}
   −
This is "nn::ns::LatestSystemUpdate". This is an u8.
+
This is a 0x38-byte struct.
 
  −
= ReceiveApplicationProgress =
  −
This is "nn::ns::ReceiveApplicationProgress". This is a 0x10-byte struct.
  −
 
  −
= SendApplicationProgress =
  −
This is "nn::ns::SendApplicationProgress". This is a 0x10-byte struct.
  −
 
  −
= ApplicationRightsOnClient =
  −
This is a 0x20-byte struct.
  −
 
  −
[[qlaunch]] only uses +0x18/+0x19 in this struct.
     −
{| class="wikitable" border="1"
+
= Uid =
|-
+
This is "nn::account::Uid". This is a 0x10-byte struct. This contains 2 u64s for the UserId.
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]]
  −
|-
  −
| 0x8 || 0x10 || [[Account_services#Uid|Uid]]
  −
|-
  −
| 0x18 || 0x1 || Flags, [[qlaunch]] only uses bit0-bit4 and bit7.
  −
|-
  −
| 0x19 || 0x1 || Flags, [[qlaunch]] only uses bit0.
  −
|-
  −
| 0x1A || 0x6 || Unknown
  −
|}
      
[[Category:Services]]
 
[[Category:Services]]

Navigation menu