Difference between revisions of "NS services"

From Nintendo Switch Brew
Jump to navigation Jump to search
(11 intermediate revisions by 2 users not shown)
Line 45: Line 45:
 
|-
 
|-
 
| 200 || [13.1.0+] SetRequiredAddOnContentsOnContentsAvailabilityTransition
 
| 200 || [13.1.0+] SetRequiredAddOnContentsOnContentsAvailabilityTransition
 +
|-
 +
| 300 || [16.0.0+] SetupHostAddOnContent
 +
|-
 +
| 301 || [16.0.0+] GetRegisteredAddOnContentPath
 +
|-
 +
| 302 || [16.0.0+] UpdateCachedList
 
|}
 
|}
  
Line 74: Line 80:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#RequestContentsAuthorizationToken]]
+
| 0 || [16.0.0+] RequestContentsAuthorizationTokenDeprecated ([12.0.0-15.0.1] [[#RequestContentsAuthorizationToken]])
 +
|-
 +
| 1 || [16.0.0+] RequestContentsAuthorizationToken
 
|}
 
|}
  
Line 766: Line 774:
 
| 603 || GetOwnedApplicationContentMetaStatus
 
| 603 || GetOwnedApplicationContentMetaStatus
 
|-
 
|-
| 604 || RegisterContentsExternalKey
+
| 604 || [1.0.0-15.0.1] RegisterContentsExternalKey
 
|-
 
|-
 
| 605 || ListApplicationContentMetaStatusWithRightsCheck
 
| 605 || ListApplicationContentMetaStatusWithRightsCheck
Line 777: Line 785:
 
|-
 
|-
 
| 610 || [14.0.0+] GetInstalledContentMetaStorage
 
| 610 || [14.0.0+] GetInstalledContentMetaStorage
 +
|-
 +
| 611 || [16.0.0+] PrepareAddOnContent
 
|-
 
|-
 
| 700 || PushDownloadTaskList
 
| 700 || PushDownloadTaskList
Line 1,121: Line 1,131:
 
The data that can be read from the [[#IAsyncValue]] is [[#ApplicationUpdateInfo]].
 
The data that can be read from the [[#IAsyncValue]] is [[#ApplicationUpdateInfo]].
  
Before using the cmd, official sw uses [[Network_Interface_services#IsAnyInternetRequestAccepted|IsAnyInternetRequestAccepted]] with the output from [[#Network_Interface_services#GetClientId|GetClientId]], throwing an error when the returned bool is false.
+
Before using the cmd, official sw uses [[Network_Interface_services#IsAnyInternetRequestAccepted|IsAnyInternetRequestAccepted]] with the output from [[Network_Interface_services#GetClientId|GetClientId]], throwing an error when the returned bool is false.
  
 
==== CancelApplicationDownload ====
 
==== CancelApplicationDownload ====
Line 1,233: Line 1,243:
 
No input, returns an output u64.
 
No input, returns an output u64.
  
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>.
+
A state flag must be non-zero, otherwise an error is thrown. When a state field is value 1, a hard-coded ProgramId for MaintenanceMenu is used. Otherwise, the ProgramId is loaded from [[System_Settings|system-setting]] <code>ns.applet!system_applet_id</code>.
  
 
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.
 
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.
Line 1,242: Line 1,252:
 
No input, returns an output u64.
 
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>.
+
A state flag must be non-zero, otherwise an error is thrown. The ProgramId is loaded from [[System_Settings|system-setting]] <code>ns.applet!overlay_applet_id</code>.
  
 
The OverlayApplet is launched with StorageId=BuiltInSystem via [[Process_Manager_services|pmshell]] LaunchProgram ([10.0.0+] [[PGL_services#LaunchProgram|pgl]] with pgl_launch_flags=0). [[Process_Manager_services#LaunchFlags|LaunchFlags]] value 0x9 is used here. The output u64 from here is written to the output for this cmd, on success.
 
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.
Line 1,564: Line 1,574:
  
 
==== CreateApplicationResource ====
 
==== CreateApplicationResource ====
Returns an [[#IApplicationResource]].
+
Takes an input [[#ApplicationResourceType]]. Returns an [[#IApplicationResource]].
  
 
==== GetApplicationResource ====
 
==== GetApplicationResource ====
Returns an [[#IApplicationResource]].
+
Takes an input u64 ProcessId and an input [[#ApplicationResourceType]]. Returns an [[#IApplicationResource]].
  
 
==== RegisterDeviceLockKey ====
 
==== RegisterDeviceLockKey ====
Line 1,895: Line 1,905:
 
| 13 || [8.0.0+] [[#GetRunningApplicationStatus]]
 
| 13 || [8.0.0+] [[#GetRunningApplicationStatus]]
 
|-
 
|-
| 14 || [10.0.0+] SelectApplicationLicense
+
| 14 || [10.0.0-15.0.1] SelectApplicationLicense
 
|-
 
|-
 
| 15 || [12.0.0+] [[#RequestContentsAuthorizationToken]]
 
| 15 || [12.0.0+] [[#RequestContentsAuthorizationToken]]
Line 2,736: Line 2,746:
 
|-
 
|-
 
| 902 || [13.0.0+] ListUsersUnqualifiedForDebug ||
 
| 902 || [13.0.0+] ListUsersUnqualifiedForDebug ||
 +
|-
 +
| 910 || [16.0.0+] RefreshFirmwareSettingsForDebug ||
 
|-
 
|-
 
| 997 || [3.0.0+] DebugInvalidateTokenCacheForUser ||
 
| 997 || [3.0.0+] DebugInvalidateTokenCacheForUser ||
Line 2,802: Line 2,814:
 
|-
 
|-
 
| 150 || CreateAuthorizationRequest || Returns an [[#IAuthorizationRequest]].
 
| 150 || CreateAuthorizationRequest || Returns an [[#IAuthorizationRequest]].
 +
|-
 +
| 160 || [15.0.0+] RequiresUpdateNetworkServiceAccountIdTokenCache ||
 +
|-
 +
| 161 || [16.0.0+] RequireReauthenticationOfNetworkServiceAccount ||
 
|}
 
|}
  
Line 2,888: Line 2,904:
 
|-
 
|-
 
| 150 || CreateAuthorizationRequest || Returns an [[#IAuthorizationRequest]].
 
| 150 || CreateAuthorizationRequest || Returns an [[#IAuthorizationRequest]].
 +
|-
 +
| 160 || [15.0.0+] RequiresUpdateNetworkServiceAccountIdTokenCache ||
 +
|-
 +
| 161 || [16.0.0+] RequireReauthenticationOfNetworkServiceAccount ||
 
|-
 
|-
 
| 200 || IsRegistered ||
 
| 200 || IsRegistered ||
Line 3,026: Line 3,046:
 
|-
 
|-
 
| 199 || [2.0.0-5.1.0] GetUrlForIntroductionOfExtraMembership ||
 
| 199 || [2.0.0-5.1.0] GetUrlForIntroductionOfExtraMembership ||
 +
|-
 +
| 200 || [16.0.0+] ApplyAsyncWithAuthorizedToken ||
 
|}
 
|}
  
Line 3,392: Line 3,414:
  
 
= ApplicationUpdateInfo =
 
= ApplicationUpdateInfo =
This is "nn::ns::ApplicationUpdateInfo".
+
This is "nn::ns::ApplicationUpdateInfo". This is an u8.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value
 +
! Description
 +
|-
 +
| 0 || UpToDate
 +
|-
 +
| 1 || Updatable
 +
|}
  
This is an u8. [[qlaunch]] just checks whether this is 0.
+
[[qlaunch]] just checks whether this is 0.
  
 
= ApplicationOccupiedSize =
 
= ApplicationOccupiedSize =
 
This is "nn::ns::ApplicationOccupiedSize". This is a 0x80-byte struct.
 
This is "nn::ns::ApplicationOccupiedSize". This is a 0x80-byte struct.
  
= ProgressForDeleteUserSaveDataAll =
+
{| class="wikitable" border="1"
This is "nn::ns::detail::ProgressForDeleteUserSaveDataAll". This is a 0x28-byte struct.
+
|-
 
+
! Offset
= ApplicationViewDeprecated =
+
! Size
This is "nn::ns::ApplicationViewDeprecated". This is a 0x40-byte struct.
+
! Description
 +
|-
 +
| 0x0 || 0x20 * 4 || Array of [[#ApplicationOccupiedSizeEntity]]
 +
|}
  
This is converted from [[#ApplicationView]] by [[#GetApplicationViewDeprecated]] on newer system-versions as follows:
+
= ApplicationOccupiedSizeEntity =
 +
This is "nn::ns::ApplicationOccupiedSizeEntity". This is a 0x20-byte struct.
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 3,413: Line 3,449:
 
! Description
 
! Description
 
|-
 
|-
| 0x0 || 0x20 || Same as [[#ApplicationView]] +0x0.
+
| 0x0 || 0x1 || [[NCM_services#StorageId|StorageId]]
|-
 
| 0x20 || 0x4 || Same as [[#ApplicationView]] +0x20.
 
 
|-
 
|-
| 0x24 || 0x2 || Same as [[#ApplicationView]] +0x24.
+
| 0x1 || 0x7 || Reserved
 
|-
 
|-
| 0x26 || 0x2 || Cleared to 0.
+
| 0x8 || 0x8 || AppSize
 
|-
 
|-
| 0x28 || 0x10 || Same as [[#ApplicationView]] +0x30.
+
| 0x10 || 0x8 || PatchSize
 
|-
 
|-
| 0x38 || 0x4 || Same as [[#ApplicationView]] +0x40.
+
| 0x18 || 0x8 || AocSize
|-
+
|}
| 0x3C || 0x1 || Same as [[#ApplicationView]] +0x44.
+
 
|-
+
= ProgressForDeleteUserSaveDataAll =
| 0x3D || 0x2 || Cleared to 0.
+
This is "nn::ns::detail::ProgressForDeleteUserSaveDataAll". This is a 0x28-byte struct.
|-
 
| 0x3F || 0x1 || Cleared to 0.
 
|}
 
 
 
= ApplicationView =
 
This is "nn::ns::ApplicationView". This is a 0x50-byte struct.
 
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 3,441: Line 3,469:
 
! Description
 
! Description
 
|-
 
|-
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]]
+
| 0x0 || 0x8 || StartedAt
 +
|-
 +
| 0x8 || 0x4 || Count
 +
|-
 +
| 0xC || 0x4 || Reserved
 +
|-
 +
| 0x10 || 0x8 || SizeInBytes
 
|-
 
|-
| 0x8 || 0x4 || ?
+
| 0x18 || 0x1 || IsSystem
 
|-
 
|-
| 0xC || 0x4 || Flags
+
| 0x19 || 0x7 || Reserved
 
|-
 
|-
| 0x10 || 0x40 || ?
+
| 0x20 || 0x8 || ApplicationId
 
|}
 
|}
  
= ApplicationViewWithPromotionInfo =
+
= ApplicationViewDeprecated =
This is a 0x70-byte struct.
+
This is "nn::ns::ApplicationViewDeprecated". This is a 0x40-byte struct.
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 3,459: Line 3,493:
 
! Description
 
! Description
 
|-
 
|-
| 0x0 || 0x50 || [[#ApplicationView]]
+
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]]
 +
|-
 +
| 0x8 || 0x4 || Version
 +
|-
 +
| 0xC || 0x4 || [[#ApplicationViewFlag|Flag]]
 +
|-
 +
| 0x10 || 0x18 || [[#ApplicationDownloadProgress|Progress]]
 
|-
 
|-
| 0x50 || 0x20 || [[#PromotionInfo]]
+
| 0x28 || 0x18 || [[#ApplicationApplyDeltaProgress|ApplyProgress]]
 
|}
 
|}
  
= PromotionInfo =
+
This is converted from [[#ApplicationView]] by [[#GetApplicationViewDeprecated]] on newer system-versions as follows:
This is a 0x20-byte struct.
 
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 3,473: Line 3,512:
 
! Description
 
! Description
 
|-
 
|-
| 0x0 || 0x8 || PosixTime start_timestamp.
+
| 0x0 || 0x20 || Same as [[#ApplicationView]] +0x0.
 
|-
 
|-
| 0x8 || 0x8 || PosixTime end_timestamp.
+
| 0x20 || 0x4 || Same as [[#ApplicationView]] +0x20.
 
|-
 
|-
| 0x10 || 0x8 || Remaining time until the promotion ends, in nanoseconds ({end_timestamp - current_time} converted to nanoseconds).
+
| 0x24 || 0x2 || Same as [[#ApplicationView]] +0x24.
 
|-
 
|-
| 0x18 || 0x4 || Not set, left at zero.
+
| 0x26 || 0x2 || Cleared to 0.
 +
|-
 +
| 0x28 || 0x10 || Same as [[#ApplicationView]] +0x30.
 +
|-
 +
| 0x38 || 0x4 || Same as [[#ApplicationView]] +0x40.
 +
|-
 +
| 0x3C || 0x1 || Same as [[#ApplicationView]] +0x44.
 
|-
 
|-
| 0x1C || 0x1 || Flags. Bit0: whether the PromotionInfo is valid (including bit1). Bit1 clear: u64 +0x10 is set.
+
| 0x3D || 0x2 || Cleared to 0.
 
|-
 
|-
| 0x1D || 0x3 || Padding
+
| 0x3F || 0x1 || Cleared to 0.
 
|}
 
|}
  
= NoDownloadRightsErrorResolution =
+
= ApplicationViewFlag =
This is "nn::ns::NoDownloadRightsErrorResolution".
+
This is "nn::ns::ApplicationViewFlag". This is a 32-bit flag.
  
= BackgroundNetworkUpdateState =
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Value
+
! Bit
! Description
+
! Description
 +
|-
 +
| 0
 +
|
 +
|-
 +
| 1
 +
|
 +
|-
 +
| 2
 +
|
 +
|-
 +
| 3
 +
|
 +
|-
 +
| 4
 +
|
 +
|-
 +
| 5
 +
|
 +
|-
 +
| 6
 +
|
 +
|-
 +
| 7
 +
|
 +
|-
 +
| 8
 +
|
 +
|-
 +
| 9
 +
|
 +
|-
 +
| 10
 +
|
 +
|-
 +
| 11
 +
|
 +
|-
 +
| 12
 +
|
 +
|-
 +
| 13
 +
|
 +
|-
 +
| 14
 +
|
 
|-
 
|-
| 0 || No sysupdate task exists.
+
| 15
 +
|  
 
|-
 
|-
| 1 || Sysupdate download in progress.
+
| 16
 +
|  
 
|-
 
|-
| 2 || Sysupdate ready, pending install.
+
| 17
 +
|  
 
|}
 
|}
  
This is "nn::ns::BackgroundNetworkUpdateState". This is an u8.
+
= ApplicationDownloadProgress =
 
+
This is "nn::ns::ApplicationDownloadProgress". This is a 0x18-byte struct.
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"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 3,515: Line 3,603:
 
! Description
 
! 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.
+
| 0x0 || 0x8 || Downloaded
 
|-
 
|-
| 0x8 || 0x8 || s64 Total size, this field is only valid when >0.
+
| 0x8 || 0x8 || Total
 +
|-
 +
| 0x10 || 0x4 || LastResult
 +
|-
 +
| 0x14 || 0x1 || [[#ApplicationDownloadState|State]]
 +
|-
 +
| 0x15 || 0x3 || Reserved
 
|}
 
|}
  
This is "nn::ns::SystemUpdateProgress". This is a 0x10-byte struct.
+
= ApplicationApplyDeltaProgress =
 +
This is "nn::ns::ApplicationApplyDeltaProgress". This is a 0x18-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"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 3,536: Line 3,623:
 
! Description
 
! Description
 
|-
 
|-
| 0x0 || 0x4 || SystemDeliveryProtocolVersion. Must be <= to and match [[System_Settings|system-setting]] <code>contents_delivery!system_delivery_protocol_version</code>.
+
| 0x0 || 0x8 || Applied
 
|-
 
|-
| 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 || 0x8 || Total
 
|-
 
|-
| 0x8 || 0x1 || HasExFat. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.
+
| 0x10 || 0x4 || LastResult
 
|-
 
|-
| 0x9 || 0x3 || Reserved.
+
| 0x14 || 0x1 || [[#ApplicationApplyDeltaState|State]]
 
|-
 
|-
| 0xC || 0x4 || SystemUpdateMetaVersion.
+
| 0x15 || 0x3 || Reserved
 +
|}
 +
 
 +
= ApplicationDownloadState =
 +
This is "nn::ns::ApplicationDownloadState". This is an u8.
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x10 || 0x8 || SystemUpdateMetaId.
+
! Value
 +
! Description
 
|-
 
|-
| 0x18 || 0x1 || FirmwareVariationId. Used by [[#RequestSendSystemUpdate]].
+
| 0 || Runnable
 
|-
 
|-
| 0x19 || 0x1 || UpdatableFirmwareGroupId. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.
+
| 1 || Suspended
 
|-
 
|-
| 0x1A || 0x1 || PlatformRegion (0x00 = Unknown, 0x01 = Global, 0x02 = China).
+
| 2 || NotEnoughSpace
 
|-
 
|-
| 0x1B || 0xC5 || Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.
+
| 3 || Fatal
 
|-
 
|-
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes.
+
| 4 || Finished
 
|}
 
|}
  
This is "nn::ns::SystemDeliveryInfo". This is a 0x100-byte struct.
+
= ApplicationApplyDeltaState =
 +
This is "nn::ns::ApplicationApplyDeltaState". This is an u8.
  
= ApplicationDeliveryInfo =
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Offset
+
! Value
! Size
 
 
! Description
 
! Description
 
|-
 
|-
| 0x0 || 0x8 || ?
+
| 0 || Applying
 
|-
 
|-
| 0x8 || 0x8 || ApplicationId.
+
| 1 || Suspended
 
|-
 
|-
| 0x10 || 0x4 || ApplicationVersion.
+
| 2 || NotEnoughSpace
|-
 
| 0x14 || 0x4 || ?
 
 
|-
 
|-
| 0x18 || 0x4 || RequiredSystemVersion.
+
| 3 || Fatal
 
|-
 
|-
| 0x1C || 0x4 || ?
+
| 4 || NoTask
 
|-
 
|-
| 0x20 || 0xC0 || ?
+
| 5 || WaitApply
 
|-
 
|-
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes. Uses a different key than [[#SystemDeliveryInfo]].
+
| 6 || Applied
 
|}
 
|}
  
This is "nn::ns::ApplicationDeliveryInfo". This is a 0x100-byte struct.
+
= ApplicationView =
 
+
This is "nn::ns::ApplicationView". This is a 0x50-byte struct.
= LatestSystemUpdate =
+
 
{| class="wikitable" border="1"
+
{| class="wikitable" border="1"
|-
+
|-
! Value
+
! Offset
! Description
+
! Size
|-
+
! Description
| 1 || Unknown.
+
|-
|-
+
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]]
| 2 || Unknown.
+
|-
|-
+
| 0x8 || 0x4 || ?
| Other values || Unknown.
+
|-
|}
+
| 0xC || 0x4 || Flags
 
+
|-
This is "nn::ns::LatestSystemUpdate". This is an u8.
+
| 0x10 || 0x40 || ?
 
+
|}
= ReceiveApplicationProgress =
+
 
This is "nn::ns::ReceiveApplicationProgress". This is a 0x10-byte struct.
+
= ApplicationViewWithPromotionInfo =
 
+
This is a 0x70-byte struct.
= SendApplicationProgress =
+
 
This is "nn::ns::SendApplicationProgress". This is a 0x10-byte struct.
+
{| class="wikitable" border="1"
 
+
|-
= ApplicationRightsOnClient =
+
! Offset
This is a 0x20-byte struct.
+
! Size
 
+
! Description
[[qlaunch]] only uses +0x18/+0x19 in this struct.
+
|-
 
+
| 0x0 || 0x50 || [[#ApplicationView]]
{| class="wikitable" border="1"
+
|-
|-
+
| 0x50 || 0x20 || [[#PromotionInfo]]
! Offset
+
|}
! Size
+
 
! Description
+
= PromotionInfo =
 +
This is a 0x20-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x8 || PosixTime start_timestamp.
 +
|-
 +
| 0x8 || 0x8 || PosixTime end_timestamp.
 +
|-
 +
| 0x10 || 0x8 || Remaining time until the promotion ends, in nanoseconds ({end_timestamp - current_time} converted to nanoseconds).
 +
|-
 +
| 0x18 || 0x4 || Not set, left at zero.
 +
|-
 +
| 0x1C || 0x1 || Flags. Bit0: whether the PromotionInfo is valid (including bit1). Bit1 clear: u64 +0x10 is set.
 +
|-
 +
| 0x1D || 0x3 || Padding
 +
|}
 +
 
 +
= ApplicationResourceType =
 +
This is "nn::ns::ApplicationResourceType". This is an u8.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value
 +
! Description
 +
|-
 +
| 0 || ApplicationResource
 +
|-
 +
| 1 || MicroApplicationResource
 +
|}
 +
 
 +
= ApplicationErrorCodeCategory =
 +
This is "nn::ns::ApplicationErrorCodeCategory". This is an u64.
 +
 
 +
= NoDownloadRightsErrorResolution =
 +
This is "nn::ns::NoDownloadRightsErrorResolution".
 +
 
 +
= BackgroundNetworkUpdateState =
 +
This is "nn::ns::BackgroundNetworkUpdateState". This is an u8.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value
 +
! Description
 +
|-
 +
| 0 || None
 +
|-
 +
| 1 || InProgress
 +
|-
 +
| 2 || Ready
 +
|}
 +
 
 +
Similar to [[#HasDownloaded]], [[#GetBackgroundNetworkUpdateState]] uses [[NIM_services|nim]] ListSystemUpdateTask and [[NIM_services|nim]] GetSystemUpdateTaskInfo. When ListSystemUpdateTask successfully returns a task and GetSystemUpdateTaskInfo is successful, the output value is set to: <code>1 + *((u8*)(taskinfo+0) == 0x3</code>. Otherwise, value=0.
 +
 
 +
[[#GetBackgroundNetworkUpdateState]] always returns Result 0, however this will assert if GetSystemUpdateTaskInfo fails with ret!=0x3C89.
 +
 
 +
= SystemUpdateProgress =
 +
This is "nn::ns::SystemUpdateProgress". This is a 0x10-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x8 || Loaded (this value can be larger than total_size when the async operation is finishing and when total_size is <=0, this current_size field may contain a progress value for when the total_size is not yet determined)
 +
|-
 +
| 0x8 || 0x8 || Total (this field is only valid when >0)
 +
|}
 +
 
 +
Commands which have this as output will return 0 with the output cleared, when no task is available.
 +
 
 +
= EulaDataPath =
 +
This is "nn::ns::detail::EulaDataPath". This is a 0x100-byte struct.
 +
 
 +
This contains a file path.
 +
 
 +
= SystemDeliveryInfo =
 +
This is "nn::ns::SystemDeliveryInfo". This is a 0x100-byte struct.
 +
 
 +
{| 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.
 +
|}
 +
 
 +
= ApplicationDeliveryInfo =
 +
This is "nn::ns::ApplicationDeliveryInfo". This is a 0x100-byte struct.
 +
 
 +
{| 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]].
 +
|}
 +
 
 +
= LatestSystemUpdate =
 +
This is "nn::ns::LatestSystemUpdate". This is an u8.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value
 +
! Description
 +
|-
 +
| 0 || UpToDate
 +
|-
 +
| 1 || Downloaded
 +
|-
 +
| 2 || NeedsDownload
 +
|}
 +
 
 +
= 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.
 +
 
 +
{| 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
 +
|}
 +
 
 +
[[qlaunch]] only uses +0x18/+0x19 in this struct.
 +
 
 +
= DownloadTaskStatus =
 +
This is "nn::ns::DownloadTaskStatus". This is a 0x20-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x10 || Uuid
 +
|-
 +
| 0x10 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]]
 +
|-
 +
| 0x18 || 0x1 || [[#DownloadTaskStatusDetail|Detail]]
 +
|-
 +
| 0x19 || 0x1 || NeedsCleanup
 +
|-
 +
| 0x1A || 0x2 || Reserved
 +
|-
 +
| 0x1C || 0x4 || Result
 +
|}
 +
 
 +
= DownloadTaskStatusDetail =
 +
This is "nn::ns::DownloadTaskStatusDetail". This is an u8.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value
 +
! Description
 +
|-
 +
| 0 || Created
 +
|-
 +
| 1 || Added
 +
|-
 +
| 2 || AlreadyExists
 
|-
 
|-
| 0x0 || 0x8 || [[NCM_services#ApplicationId|ApplicationId]]
+
| 3 || Failed
|-
 
| 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 =
 
= ApplicationLaunchInfo =
Line 3,656: Line 3,952:
  
 
= UserData =
 
= UserData =
 +
This is a 0x80-byte struct.
 +
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 3,673: Line 3,971:
 
|}
 
|}
  
This is a 0x80-byte struct.
+
= ProfileBase =
 +
This is a 0x38-byte struct.
  
= ProfileBase =
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 3,685: Line 3,983:
 
|-
 
|-
 
| 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.
 
| 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.
|-
 
 
|}
 
|}
 
This is a 0x38-byte struct.
 
  
 
= Uid =
 
= Uid =
Line 3,696: Line 3,991:
 
[[Process_Manager_services|pm:bm]] GetBootMode is used to determine whether aoc:u is available (see above). This value is also passed to thread "nn.ns.DelayedInitialization", which calls various funcs depending on the BootMode in various cases.
 
[[Process_Manager_services|pm:bm]] GetBootMode is used to determine whether aoc:u is available (see above). This value is also passed to thread "nn.ns.DelayedInitialization", which calls various funcs depending on the BootMode in various cases.
  
The output of GetBootMode is also written into state. This same func later enters a code block when BootMode is Maintenance/SafeMode: various [[NCM_services|ncm]] cmds are used with input StorageId=BuiltInUser (VerifyContentMetaDatabase, VerifyContentStorage, ActivateContentMetaDatabase, ActivateContentStorage, InactivateContentMetaDatabase, InactivateContentStorage) and state fields are written. Then if the BootMode is Maintenance the savedata for [[Flash_Filesystem|ns_rightsid]] (0x800000000000004A) is deleted. Then 0 is returned.
+
The "nn.ns.DelayedInitialization" thread uses BootMode as follows (this also handles various other initialization):
 +
* Initializes [[NPNS_services|npns:s]] only for BootMode Normal/Maintenance.
 +
* Initializes the hosted acc:* services and service [[Account_services|acc:su]] only for BootMode Normal/Maintenance.
 +
* Calls a func only for BootMode Normal.
 +
* Initializes [[ETicket_services|es]] and [[Shared_Database_services|avm]] only for BootMode Normal/Maintenance.
 +
 
 +
The output of GetBootMode is also written into state. This same func later enters a code block when BootMode is Maintenance/SafeMode: various [[NCM_services|ncm]] cmds are used with input StorageId=BuiltInUser (VerifyContentMetaDatabase, VerifyContentStorage, ActivateContentMetaDatabase, ActivateContentStorage, InactivateContentMetaDatabase, InactivateContentStorage) and state fields are written. Then if the BootMode is Maintenance the savedata for [[Flash_Filesystem|ns_rightsid]] (0x800000000000004A) is deleted. Then 0 is returned. Otherwise for BootMode Normal it continues with various initialization, including gamecard handling which handles launching the gamecard title in certain conditions (this is the only time ns launches anything with pgl outside of service cmds).
  
 
In the above block, InactivateContentMetaDatabase/InactivateContentStorage are only used if using ActivateContentMetaDatabase/ActivateContentStorage failed (error is only checked after using both cmds). If any of the ncm cmds prior to this fail, it will skip using the rest of the ncm cmds.
 
In the above block, InactivateContentMetaDatabase/InactivateContentStorage are only used if using ActivateContentMetaDatabase/ActivateContentStorage failed (error is only checked after using both cmds). If any of the ncm cmds prior to this fail, it will skip using the rest of the ncm cmds.
  
 
[[Category:Services]]
 
[[Category:Services]]

Revision as of 23:37, 30 April 2023

aoc:u

This is "nn::aocsrv::detail::IAddOnContentManager".

This is only available when pm:bm GetBootMode returns output 0 (Normal).

Cmd Name
0 [1.0.0-6.2.0] CountAddOnContentByApplicationId
1 [1.0.0-6.2.0] ListAddOnContentByApplicationId
2 CountAddOnContent
3 ListAddOnContent
4 [1.0.0-6.2.0] GetAddOnContentBaseIdByApplicationId
5 GetAddOnContentBaseId
6 [1.0.0-6.2.0] PrepareAddOnContentByApplicationId
7 PrepareAddOnContent
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+] CreateEcPurchasedEventManager
101 [9.0.0+] CreatePermanentEcPurchasedEventManager
110 [12.0.0+] CreateContentsServiceManager
200 [13.1.0+] SetRequiredAddOnContentsOnContentsAvailabilityTransition
300 [16.0.0+] SetupHostAddOnContent
301 [16.0.0+] GetRegisteredAddOnContentPath
302 [16.0.0+] UpdateCachedList

IPurchaseEventManager

This is "nn::ec::IPurchaseEventManager".

Cmd Name
0 SetDefaultDeliveryTarget
1 SetDeliveryTarget
2 GetPurchasedEventReadableHandle
3 PopPurchasedProductInfo
4 [9.0.0+] PopPurchasedProductInfoWithUid

IContentsServiceManager

This is "nn::ec::IContentsServiceManager".

This was added with [12.0.0+].

Cmd Name
0 [16.0.0+] RequestContentsAuthorizationTokenDeprecated ([12.0.0-15.0.1] #RequestContentsAuthorizationToken)
1 [16.0.0+] RequestContentsAuthorizationToken

RequestContentsAuthorizationToken

Takes a total of 0x50-bytes of input, a PID, a type-0x5 input buffer. Returns an IAsyncData and an output handle.

IAsyncData

This is "nn::ec::detail::IAsyncData".

This was added with [12.0.0+].

Cmd Name
0 GetSize
1 Get
2 Cancel

ns:am

This is "nn::ns::detail::IApplicationManagerInterface".

[3.0.0+] This service was replaced by ns:am2.

Cmd Name
0 #ListApplicationRecord
1 GenerateApplicationRecordCount
2 GetApplicationRecordUpdateSystemEvent
3 GetApplicationViewDeprecated
4 DeleteApplicationEntity
5 DeleteApplicationCompletely
6 IsAnyApplicationEntityRedundant
7 DeleteRedundantApplicationEntity
8 IsApplicationEntityMovable
9 MoveApplicationEntity
11 #CalculateApplicationOccupiedSize
16 PushApplicationRecord
17 ListApplicationRecordContentMeta
18 CheckLaunchRights
19 #LaunchApplication
21 #GetApplicationContentPath
22 TerminateApplication
23 [2.0.0+] ResolveApplicationContentPath
26 BeginInstallApplication
27 DeleteApplicationRecord
30 RequestApplicationUpdateInfo
31 RequestUpdateApplication
32 CancelApplicationDownload
33 ResumeApplicationDownload
34 ClearTaskStatusList
35 UpdateVersionList
36 PushLaunchVersion
37 ListRequiredVersion
38 CheckApplicationLaunchVersion
39 CheckApplicationLaunchRights
40 GetApplicationLogoData
41 CalculateApplicationDownloadRequiredSize
42 CleanupSdCard
43 #CheckSdCardMountStatus
44 GetSdCardMountStatusChangedEvent
45 GetGameCardAttachmentEvent
46 GetGameCardAttachmentInfo
47 #GetTotalSpaceSize
48 #GetFreeSpaceSize
49 GetSdCardRemovedEvent
52 GetGameCardUpdateDetectionEvent
53 DisableApplicationAutoDelete
54 EnableApplicationAutoDelete
55 #GetApplicationDesiredLanguage
56 SetApplicationTerminateResult
57 ClearApplicationTerminateResult
58 GetLastSdCardMountUnexpectedResult
59 ConvertApplicationLanguageToLanguageCode
60 #ConvertLanguageCodeToApplicationLanguage
61 GetBackgroundDownloadStressTaskInfo
62 GetGameCardStopper
63 IsSystemProgramInstalled
64 [2.0.0+] StartApplyDeltaTask
65 [2.0.0+] GetRequestServerStopper
100 ResetToFactorySettings
101 ResetToFactorySettingsWithoutUserSaveData
102 [2.0.0+] ResetToFactorySettingsForRefurbishment
200 CalculateUserSaveDataStatistics
201 DeleteUserSaveDataAll
210 DeleteUserSystemSaveData
220 UnregisterNetworkServiceAccount
300 GetApplicationShellEvent
301 PopApplicationShellEventInfo
302 LaunchLibraryApplet
303 TerminateLibraryApplet
304 LaunchSystemApplet
305 TerminateSystemApplet
306 LaunchOverlayApplet
307 TerminateOverlayApplet
400 #GetApplicationControlData
401 InvalidateAllApplicationControlCache
402 RequestDownloadApplicationControlData
403 GetMaxApplicationControlCacheCount
404 [2.0.0+] InvalidateApplicationControlCache
405 [2.0.0+] ListApplicationControlCacheEntryInfo
502 [2.0.0+] RequestCheckGameCardRegistration
503 [2.0.0+] RequestGameCardRegistrationGoldPoint
504 [2.0.0+] RequestRegisterGameCard
600 [2.0.0+] #CountApplicationContentMeta
601 [2.0.0+] #ListApplicationContentMetaStatus
602 [2.0.0+] ListAvailableAddOnContent
603 [2.0.0+] GetOwnedApplicationContentMetaStatus
604 [2.0.0+] RegisterContentsExternalKey
605 [2.0.0+] ListApplicationContentMetaStatusWithRightsCheck
700 [2.0.0+] PushDownloadTaskList
701 [2.0.0+] #ClearTaskStatusList
702 [2.0.0+] #RequestDownloadTaskList
703 [2.0.0+] #RequestEnsureDownloadTask
704 [2.0.0+] #ListDownloadTaskStatus
705 [2.0.0+] RequestDownloadTaskListData
800 [2.0.0+] RequestVersionList
801 [2.0.0+] ListVersionList
900 [2.0.0+] GetApplicationRecord
901 [2.0.0+] GetApplicationRecordProperty
902 [2.0.0+] EnableApplicationAutoUpdate
903 [2.0.0+] DisableApplicationAutoUpdate
904 [2.0.0+] TouchApplication
905 [2.0.0+] RequestApplicationUpdate
906 [2.0.0+] IsApplicationUpdateRequested
907 [2.0.0+] WithdrawApplicationUpdateRequest
908 [2.0.0+] ListApplicationRecordInstalledContentMeta
1000 [2.0.0+] RequestVerifyApplicationDeprecated
1001 [2.0.0+] CorruptApplicationForDebug
1200 [2.0.0+] #NeedsUpdateVulnerability
1300 [2.0.0+] IsAnyApplicationEntityInstalled
1301 [2.0.0+] DeleteApplicationContentEntities
1302 [2.0.0+] CleanupUnrecordedApplicationEntity
1400 [2.0.0+] PrepareShutdown
1500 [2.0.0+] FormatSdCard
1501 [2.0.0+] NeedsSystemUpdateToFormatSdCard
1502 [2.0.0+] GetLastSdCardFormatUnexpectedResult
1503 [2.0.0+]
1600 [2.0.0+] GetSystemSeedForPseudoDeviceId
1700 [2.0.0+] ListApplicationDownloadingContentMeta
1800 [2.0.0+] IsNotificationSetupCompleted
1801 [2.0.0+] GetLastNotificationInfoCount
1802 [2.0.0+] ListLastNotificationInfo

ListApplicationRecord

Takes a type-0x6 output buffer containing an array of the below record and an s32 entry_offset, returns an output s32 out_entrycount.

Returns an array of entries with the below format using the specified offset and count.

Application Record Format

Offset Size Description
0x0 0x8 ApplicationId
0x8 0x1 Type? (Known values: 0x2=Installing?, 0x3=Installed / Gamecard inserted, 0x5=Gamecard not inserted, 0xB=Archived)
0x9 0x1 Unknown, usually 0x02
0xA 0x6 Unknown, usually zeros?
0x10 0x1 Unknown, seems to change between reboots and removing/reinserting gamecards
0x11 0x7 Unknown, usually zeros?

LaunchApplication

Takes an input ApplicationId, returns an output u64 PID.

Launches an application title which is registered with NS.

GetApplicationContentPath

Takes a 0x16-type output buffer, an u8 ContentMetaType, and an ApplicationId.

The input ApplicationId is used with the application-title table like various other cmds, anything not in that table can't be used with this.

Returns a string path for the specified type of patch content with this ApplicationId, otherwise returns regular-application paths when update-title not installed. Returns an error when the specified type of content doesn't exist for this title. Starts with "@{SdCardContent,UserContent}://" and ends in ".nca".

For gamecard content, the output path is: "@GcSXXXXXXXX:/<NcaId>.nca". NCA-type0 with gamecard returns 0 with an empty output string.

The output string is then used by the user-process with FS to mount the content.

GetTotalSpaceSize

Takes an input u8 StorageId, no output.

The StorageId must be SdCard.

Returns the s64 from NCM_services#IContentStorage GetFreeSpaceSize.

GetFreeSpaceSize

Takes an input u8 StorageId, no output.

The StorageId must be SdCard.

Returns the s64 from NCM_services#IContentStorage GetTotalSpaceSize.

GetApplicationDesiredLanguage

Takes an input u8 language-bitmask, returns an output u8 control.nacp langentry index.

User-processes generate the language-bitmask with the following for all 16 lang-entries: if(<either string in langentry[i] is non-empty>)bitmask |= 1<<i

ConvertLanguageCodeToApplicationLanguage

Takes an input u8 pointer for the resulting Id to be written to and a string represented as a u64 (i.e 0x53552D6E65 for 'en-US').

Returns 0 if an ID was successfully found, otherwise returns 0x25810.

GetApplicationControlData

Takes an input u8 #ApplicationControlSource, an ApplicationId, and a type-0x6 output buffer. Returns an output u32 for actual_size. Official user-processes use buffer size 0x24000. qlaunch only uses source value 0x1 (Storage if not in cache).

Loads cached control.nacp to buf+0 and the cached icon to buf+0x4000. Returns an error if the buffer is too small.

ApplicationControlSource

Value Description
0x0 CacheOnly (Returns data from cache)
0x1 Storage (Returns data from storage if not present in cache)
0x2 StorageOnly (Returns data from storage without using cache)

ListApplicationContentMetaStatus

Takes a type-0x6 output buffer containing an array of the below entries, an input s32 index and ApplicationId, returns an output s32 out_entrycount.

Returns 0x10-byte entries using the specified ApplicationId starting at the specified index. Can only return game titles. The second entry if any is the update-title usually. When the input entryindex is >= totalentries, this will return 0 with out_entrycount=0.

Entry structure:

Offset Size Description
0x0 0x1 ContentMetaType ("type")
0x1 0x1 StorageId ("installedStorage")
0x2 0x1 Unknown. Non-zero with output from cmd 605, differs for app/update titles.
0x3 0x1 Padding
0x4 0x4 Version
0x8 0x8 ApplicationId

ns:am2, ns:ec, ns:rid, ns:rt, ns:web, ns:ro, ns:sweb

These are "nn::ns::detail::IServiceGetterInterface".

These commands check a state field for a command-specific bit and returns an error if not set, this is likely a permissions check for service+command.

[11.0.0+] ns:ro was added.

[15.0.0+] ns:sweb was added.

Cmd Name
7988 [6.0.0+] GetDynamicRightsInterface
7989 [5.1.0+] GetReadOnlyApplicationControlDataInterface
7991 [5.0.0+] GetReadOnlyApplicationRecordInterface
7992 [4.0.0+] GetECommerceInterface
7993 [4.0.0+] GetApplicationVersionInterface
7994 GetFactoryResetInterface
7995 GetAccountProxyInterface
7996 GetApplicationManagerInterface
7997 GetDownloadTaskInterface
7998 GetContentManagementInterface
7999 GetDocumentInterface

IAccountProxyInterface

This is "nn::ns::detail::IAccountProxyInterface".

Cmd Name
0 CreateUserAccount

IApplicationManagerInterface

This is "nn::ns::detail::IApplicationManagerInterface".

Cmd Name
0 #ListApplicationRecord
1 GenerateApplicationRecordCount
2 #GetApplicationRecordUpdateSystemEvent
3 #GetApplicationViewDeprecated
4 #DeleteApplicationEntity
5 #DeleteApplicationCompletely
6 IsAnyApplicationEntityRedundant
7 #DeleteRedundantApplicationEntity
8 #IsApplicationEntityMovable
9 [1.0.0-9.2.0] #MoveApplicationEntity
11 #CalculateApplicationOccupiedSize
16 PushApplicationRecord
17 ListApplicationRecordContentMeta
19 [1.0.0-5.1.0] LaunchApplicationOld
21 #GetApplicationContentPath
22 TerminateApplication
23 ResolveApplicationContentPath
26 BeginInstallApplication
27 DeleteApplicationRecord
30 #RequestApplicationUpdateInfo
31 [1.0.0-3.0.2] RequestUpdateApplication
32 #CancelApplicationDownload
33 #ResumeApplicationDownload
35 UpdateVersionList
36 PushLaunchVersion
37 ListRequiredVersion
38 #CheckApplicationLaunchVersion
39 [1.0.0-6.2.0] CheckApplicationLaunchRights
40 GetApplicationLogoData
41 CalculateApplicationDownloadRequiredSize
42 #CleanupSdCard
43 #CheckSdCardMountStatus
44 #GetSdCardMountStatusChangedEvent
45 GetGameCardAttachmentEvent
46 GetGameCardAttachmentInfo
47 #GetTotalSpaceSize
48 #GetFreeSpaceSize
49 GetSdCardRemovedEvent
52 #GetGameCardUpdateDetectionEvent
53 #DisableApplicationAutoDelete
54 #EnableApplicationAutoDelete
55 GetApplicationDesiredLanguage
56 #SetApplicationTerminateResult
57 #ClearApplicationTerminateResult
58 #GetLastSdCardMountUnexpectedResult
59 ConvertApplicationLanguageToLanguageCode
60 #ConvertLanguageCodeToApplicationLanguage
61 GetBackgroundDownloadStressTaskInfo
62 GetGameCardStopper
63 IsSystemProgramInstalled
64 StartApplyDeltaTask
65 #GetRequestServerStopper
66 [3.0.0+] GetBackgroundApplyDeltaStressTaskInfo
67 [3.0.0+] #CancelApplicationApplyDelta
68 [3.0.0+] #ResumeApplicationApplyDelta
69 [3.0.0+] #CalculateApplicationApplyDeltaRequiredSize
70 [3.0.0+] #ResumeAll
71 [3.0.0+] #GetStorageSize
80 [3.0.0+] RequestDownloadApplication
81 [3.0.0+] RequestDownloadAddOnContent
82 [3.0.0+] DownloadApplication
83 [4.0.0-6.2.0] CheckApplicationResumeRights
84 [4.0.0+] GetDynamicCommitEvent
85 [4.0.0+] #RequestUpdateApplication2
86 [4.0.0+] EnableApplicationCrashReport
87 [4.0.0+] IsApplicationCrashReportEnabled
90 [15.0.0+] BoostSystemMemoryResourceLimit ([4.0.0-8.1.0] BoostSystemMemoryResourceLimit)
91 [5.0.0+] DeprecatedLaunchApplication
92 [5.0.0+] GetRunningApplicationProgramId
93 [5.0.0+] GetMainApplicationProgramIndex
94 [6.0.0+] LaunchApplication
95 [6.0.0+] #GetApplicationLaunchInfo
96 [6.0.0+] #AcquireApplicationLaunchInfo
97 [6.0.0+] GetMainApplicationProgramIndexByApplicationLaunchInfo
98 [6.0.0+] EnableApplicationAllThreadDumpOnCrash
99 [8.0.0+] #LaunchDevMenu
100 #ResetToFactorySettings
101 #ResetToFactorySettingsWithoutUserSaveData
102 #ResetToFactorySettingsForRefurbishment
103 [9.1.0+] #ResetToFactorySettingsWithPlatformRegion
104 [9.1.0+] #ResetToFactorySettingsWithPlatformRegionAuthentication
105 [10.0.0+] #RequestResetToFactorySettingsSecurely
106 [10.0.0+] #RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely
200 CalculateUserSaveDataStatistics
201 #DeleteUserSaveDataAll
210 #DeleteUserSystemSaveData
211 [6.0.0+] #DeleteSaveData
220 #UnregisterNetworkServiceAccount
221 [6.0.0+] #UnregisterNetworkServiceAccountWithUserSaveDataDeletion
300 GetApplicationShellEvent
301 PopApplicationShellEventInfo
302 #LaunchLibraryApplet
303 TerminateLibraryApplet
304 #LaunchSystemApplet
305 TerminateSystemApplet
306 #LaunchOverlayApplet
307 TerminateOverlayApplet
400 #GetApplicationControlData
401 InvalidateAllApplicationControlCache
402 #RequestDownloadApplicationControlData
403 GetMaxApplicationControlCacheCount
404 InvalidateApplicationControlCache
405 ListApplicationControlCacheEntryInfo
406 [6.0.0+] GetApplicationControlProperty
407 [8.0.0+] #ListApplicationTitle
408 [8.0.0+] #ListApplicationIcon
502 #RequestCheckGameCardRegistration
503 #RequestGameCardRegistrationGoldPoint
504 #RequestRegisterGameCard
505 [3.0.0+] #GetGameCardMountFailureEvent
506 [3.0.0+] #IsGameCardInserted
507 [3.0.0+] #EnsureGameCardAccess
508 [3.0.0+] #GetLastGameCardMountFailureResult
509 [5.0.0+] #ListApplicationIdOnGameCard
510 [9.0.0+] #GetGameCardPlatformRegion
600 #CountApplicationContentMeta
601 #ListApplicationContentMetaStatus
602 [2.0.0-5.1.0] ListAvailableAddOnContent
603 GetOwnedApplicationContentMetaStatus
604 [1.0.0-15.0.1] RegisterContentsExternalKey
605 ListApplicationContentMetaStatusWithRightsCheck
606 [3.0.0+] GetContentMetaStorage
607 [6.0.0+] #ListAvailableAddOnContent
609 [13.0.0+] ListAvailabilityAssuredAddOnContent
610 [14.0.0+] GetInstalledContentMetaStorage
611 [16.0.0+] PrepareAddOnContent
700 PushDownloadTaskList
701 #ClearTaskStatusList
702 #RequestDownloadTaskList
703 #RequestEnsureDownloadTask
704 #ListDownloadTaskStatus
705 #RequestDownloadTaskListData
800 RequestVersionList
801 ListVersionList
802 [3.0.0+] #RequestVersionListData
900 GetApplicationRecord
901 GetApplicationRecordProperty
902 EnableApplicationAutoUpdate
903 DisableApplicationAutoUpdate
904 #TouchApplication
905 RequestApplicationUpdate
906 #IsApplicationUpdateRequested
907 #WithdrawApplicationUpdateRequest
908 ListApplicationRecordInstalledContentMeta
909 [3.0.0-14.1.2] WithdrawCleanupAddOnContentsWithNoRightsRecommendation
910 [5.0.0+] HasApplicationRecord
911 [5.1.0+] SetPreInstalledApplication
912 [5.1.0+] ClearPreInstalledApplicationFlag
913 [9.0.0+] ListAllApplicationRecord
914 [9.0.0+] HideApplicationRecord
915 [9.0.0+] ShowApplicationRecord
916 [11.0.0+] IsApplicationAutoDeleteDisabled
1000 #RequestVerifyApplicationDeprecated
1001 CorruptApplicationForDebug
1002 [3.0.0-9.2.0] #RequestVerifyAddOnContentsRights
1003 [5.0.0+] #RequestVerifyApplication
1004 [5.0.0+] CorruptContentForDebug
1200 #NeedsUpdateVulnerability
1300 #IsAnyApplicationEntityInstalled
1301 DeleteApplicationContentEntities
1302 CleanupUnrecordedApplicationEntity
1303 [3.0.0-9.2.0] CleanupAddOnContentsWithNoRights
1304 [3.0.0+] DeleteApplicationContentEntity
1308 [5.0.0+] DeleteApplicationCompletelyForDebug
1309 [6.0.0+] #CleanupUnavailableAddOnContents
1310 [10.0.0+] #RequestMoveApplicationEntity
1311 [10.0.0+] #EstimateSizeToMove
1312 [10.0.0+] HasMovableEntity
1313 [11.0.0+] CleanupOrphanContents
1314 [11.0.0+] CheckPreconditionSatisfiedToMove
1400 PrepareShutdown
1500 #FormatSdCard
1501 #NeedsSystemUpdateToFormatSdCard
1502 #GetLastSdCardFormatUnexpectedResult
1504 [3.0.0+] InsertSdCard
1505 [3.0.0+] RemoveSdCard
1506 [9.0.0+] GetSdCardStartupStatus
1600 GetSystemSeedForPseudoDeviceId
1601 [3.0.0+] ResetSystemSeedForPseudoDeviceId
1700 ListApplicationDownloadingContentMeta
1701 [3.0.0+] #GetApplicationView
1702 [3.0.0+] GetApplicationDownloadTaskStatus
1703 [4.0.0+] #GetApplicationViewDownloadErrorContext
1704 [8.0.0+] #GetApplicationViewWithPromotionInfo
1705 [11.0.0+] #IsPatchAutoDeletableApplication
1800 IsNotificationSetupCompleted
1801 GetLastNotificationInfoCount
1802 ListLastNotificationInfo
1803 [3.0.0+] ListNotificationTask
1900 [3.0.0-12.1.0] IsActiveAccount
1901 [4.0.0+] #RequestDownloadApplicationPrepurchasedRights
1902 [5.0.0+] GetApplicationTicketInfo
1903 [13.1.0+] RequestDownloadApplicationPrepurchasedRightsForAccount
2000 [4.0.0+] #GetSystemDeliveryInfo
2001 [4.0.0+] #SelectLatestSystemDeliveryInfo
2002 [4.0.0+] #VerifyDeliveryProtocolVersion
2003 [4.0.0+] #GetApplicationDeliveryInfo
2004 [4.0.0+] #HasAllContentsToDeliver
2005 [4.0.0+] #CompareApplicationDeliveryInfo
2006 [4.0.0+] #CanDeliverApplication
2007 [4.0.0+] #ListContentMetaKeyToDeliverApplication
2008 [4.0.0+] #NeedsSystemUpdateToDeliverApplication
2009 [4.0.0+] #EstimateRequiredSize
2010 [4.0.0+] #RequestReceiveApplication
2011 [4.0.0+] #CommitReceiveApplication
2012 [4.0.0+] #GetReceiveApplicationProgress
2013 [4.0.0+] #RequestSendApplication
2014 [4.0.0+] #GetSendApplicationProgress
2015 [4.0.0+] #CompareSystemDeliveryInfo
2016 [4.0.0+] #ListNotCommittedContentMeta
2017 [4.0.0+] #RecoverDownloadTask
2018 [5.0.0+] #GetApplicationDeliveryInfoHash
2050 [6.0.0+] #GetApplicationRightsOnClient
2051 [9.0.0+] InvalidateRightsIdCache
2100 [6.0.0+] #GetApplicationTerminateResult
2101 [6.0.0+] GetRawApplicationTerminateResult
2150 [6.0.0+] CreateRightsEnvironment
2151 [6.0.0+] DestroyRightsEnvironment
2152 [6.0.0+] ActivateRightsEnvironment
2153 [6.0.0+] DeactivateRightsEnvironment
2154 [6.0.0+] ForceActivateRightsContextForExit
2155 [7.0.0+] UpdateRightsEnvironmentStatus
2156 [10.0.0-12.1.0] CreateRightsEnvironmentForMicroApplication ([9.0.0-9.2.0] CreateRightsEnvironmentForPreomia)
2160 [6.0.0+] AddTargetApplicationToRightsEnvironment
2161 [6.0.0+] SetUsersToRightsEnvironment
2170 [6.0.0+] GetRightsEnvironmentStatus
2171 [6.0.0+] GetRightsEnvironmentStatusChangedEvent
2180 [6.0.0+] RequestExtendExpirationInRightsEnvironment
2181 [6.0.0+] GetResultOfExtendExpirationInRightsEnvironment
2182 [6.0.0+] SetActiveRightsContextUsingStateToRightsEnvironment
2190 [6.0.0+] #GetRightsEnvironmentHandleForApplication
2199 [6.0.0+] GetRightsEnvironmentCountForDebug
2200 [6.0.0-9.2.0] GetGameCardApplicationCopyIdentifier
2201 [6.0.0-9.2.0] GetInstalledApplicationCopyIdentifier
2250 [6.0.0-6.2.0] RequestReportActiveELicence
2300 [6.0.0-8.1.0] ListEventLog
2350 [7.0.0+] PerformAutoUpdateByApplicationId
2351 [9.0.0+] #RequestNoDownloadRightsErrorResolution
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
2357 [15.0.0+] EnableMultiCoreDownload
2358 [15.0.0+] DisableMultiCoreDownload
2359 [15.0.0+] IsMultiCoreDownloadEnabled
2400 [8.0.0+] #GetPromotionInfo
2401 [8.0.0+] CountPromotionInfo
2402 [8.0.0+] ListPromotionInfo
2403 [8.0.0+] #ImportPromotionJsonForDebug
2404 [8.0.0+] #ClearPromotionInfoForDebug
2500 [8.0.0+] ConfirmAvailableTime
2510 [9.0.0+] #CreateApplicationResource
2511 [9.0.0+] #GetApplicationResource
2513 [10.0.0+] LaunchMicroApplication ([9.0.0-9.2.0] LaunchPreomia)
2514 [9.0.0+] ClearTaskOfAsyncTaskManager
2515 [10.0.0+] CleanupAllPlaceHolderAndFragmentsIfNoTask
2516 [10.0.0-14.1.2] 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
3000 [11.0.0+] #RegisterDeviceLockKey
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

No input, returns an output Event handle with EventClearMode=1.

GetApplicationViewDeprecated

Takes a type-0x6 output buffer containing an array of #ApplicationViewDeprecated, a type-0x5 input buffer containing an array of u64 ApplicationIds, no output.

On newer system-versions this is the same as #GetApplicationView, except this converts the output from the func called in the loop from #ApplicationView to #ApplicationViewDeprecated.

DeleteApplicationEntity

Takes an input ApplicationId, no output.

DeleteApplicationCompletely

Takes an input ApplicationId, no output.

DeleteRedundantApplicationEntity

No input/output.

IsApplicationEntityMovable

Takes an input u8 StorageId, an ApplicationId, returns an output u8 bool.

MoveApplicationEntity

Takes an input u8 StorageId, an ApplicationId, no output.

RequestApplicationUpdateInfo

Takes an input ApplicationId, returns an output Event handle and an #IAsyncValue.

The data that can be read from the #IAsyncValue is #ApplicationUpdateInfo.

Before using the cmd, official sw uses IsAnyInternetRequestAccepted with the output from GetClientId, throwing an error when the returned bool is false.

CancelApplicationDownload

Takes an input ApplicationId, no output.

ResumeApplicationDownload

Takes an input ApplicationId, no output.

CheckApplicationLaunchVersion

Takes an input ApplicationId, no output.

CalculateApplicationDownloadRequiredSize

Takes an input u8 StorageId, an ApplicationId, returns an output s64.

CleanupSdCard

No input/output.

GetSdCardMountStatusChangedEvent

No input, returns an output Event handle with EventClearMode=0.

GetGameCardUpdateDetectionEvent

No input, returns an output Event handle with EventClearMode=0.

DisableApplicationAutoDelete

Takes an input ApplicationId, no output.

EnableApplicationAutoDelete

Takes an input ApplicationId, no output.

SetApplicationTerminateResult

Takes an input u32 Result, an ApplicationId, no output.

ClearApplicationTerminateResult

Takes an input ApplicationId, no output.

GetLastSdCardMountUnexpectedResult

No input/output.

GetRequestServerStopper

No input, returns an output #IRequestServerStopper.

CancelApplicationApplyDelta

Takes an input ApplicationId, no output.

ResumeApplicationApplyDelta

Takes an input ApplicationId, no output.

CalculateApplicationApplyDeltaRequiredSize

Takes an input u8 StorageId, an ApplicationId, returns an output s64.

ResumeAll

No input/output.

GetStorageSize

Takes an input u8 StorageId, returns two output s64s.

This temporarily mounts the ContentStorage specified by the StorageId (must be BuiltInUser or SdCard). The two output s64s are the output from GetTotalSpaceSize and GetFreeSpaceSize with this ContentStorage, with it this being unmounted afterwards.

RequestUpdateApplication2

Takes an input ApplicationId, returns an output Event handle and an #IAsyncResult.

See #RequestApplicationUpdateInfo regarding nifm.

LaunchApplication

Takes an input u8 ProgramIndex, an input #ApplicationLaunchInfo, returns an output u64.

GetApplicationLaunchInfo

Takes an input ApplicationId, returns an output #ApplicationLaunchInfo.

AcquireApplicationLaunchInfo

Takes an input 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

No input/output.

This is used by AM cmd LaunchDevMenu.

This loads ProgramIds from system-settings ns.applet!devmenu_id and ns.applet!devoverlaydisp_id, which only exists on devunits. An error is thrown if loading these fail.

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 pmshell LaunchProgram ([10.0.0+] pgl with pgl_launch_flags=0), with a 0.5s sleep-thread afterwards on success. LaunchFlags value 0xB is used here.

DeleteUserSaveDataAll

Takes an input Uid, returns an output #IProgressMonitorForDeleteUserSaveDataAll.

On success, #IProgressMonitorForDeleteUserSaveDataAll GetProgress is used with the output being copied into object state.

DeleteUserSystemSaveData

Takes an input Uid, an u64 SystemSaveDataId, no output.

DeleteSaveData

Takes an input u8 SaveDataSpaceId, an u64 SaveDataId, no output.

UnregisterNetworkServiceAccount

Takes an input Uid, no output.

UnregisterNetworkServiceAccountWithUserSaveDataDeletion

Takes an input Uid, no output.

LaunchLibraryApplet

Takes an input u64 ProgramId, returns an output u64.

The specified program is launched with StorageId=BuiltInSystem via pmshell LaunchProgram ([10.0.0+] pgl with pgl_launch_flags=0). 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 AM.

LaunchSystemApplet

No input, returns an output u64.

A state flag must be non-zero, otherwise an error is thrown. When a state field is value 1, a hard-coded ProgramId for MaintenanceMenu is used. Otherwise, the ProgramId is loaded from system-setting ns.applet!system_applet_id.

The SystemApplet is launched with StorageId=BuiltInSystem via pmshell LaunchProgram ([10.0.0+] pgl with pgl_launch_flags=0). 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 AM.

LaunchOverlayApplet

No input, returns an output u64.

A state flag must be non-zero, otherwise an error is thrown. The ProgramId is loaded from system-setting ns.applet!overlay_applet_id.

The OverlayApplet is launched with StorageId=BuiltInSystem via pmshell LaunchProgram ([10.0.0+] pgl with pgl_launch_flags=0). 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 AM.

RequestDownloadApplicationControlData

Takes an input 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 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 title-entry for each specified ApplicationId.

The TransferMemory size must be at least: count*sizeof(title-entry) + count*sizeof(u64) + count*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 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*0x20000 + count*sizeof(u64) + 0x24000.

This is essentially an async wrapper for #GetApplicationControlData, with support for multiple ApplicationIds.

RequestCheckGameCardRegistration

Takes an input ApplicationId, returns an output Event handle and an #IAsyncResult.

See #RequestApplicationUpdateInfo regarding nifm.

RequestGameCardRegistrationGoldPoint

Takes an input Uid, an ApplicationId, returns an output Event handle and an #IAsyncValue.

The data that can be read from the #IAsyncValue is 4-bytes.

See #RequestApplicationUpdateInfo regarding nifm.

RequestRegisterGameCard

Takes an input s32, an Uid, an ApplicationId, returns an output Event handle and an #IAsyncResult.

See #RequestApplicationUpdateInfo regarding nifm.

GetGameCardMountFailureEvent

No input, returns an output Event handle with EventClearMode=0.

IsGameCardInserted

No input, returns an output u8 bool.

EnsureGameCardAccess

No input/output.

GetLastGameCardMountFailureResult

No input/output.

ListApplicationIdOnGameCard

Takes a type-0x6 output buffer containing an array of u64 ApplicationIds, returns an output s32 for total output entries.

GetGameCardPlatformRegion

No input, returns an u8 GameCardPlatformRegion (0x00 = Global, 0x01 = China).

This calls fsp-srv IDeviceOperator GetGameCardCompatibilityType and returns the result.

ListAvailableAddOnContent

[10.0.0+] This now takes a total of 0x10-bytes of input instead of a total of 0x18-bytes of input.

[15.0.0+] This now takes a total of 0x8-bytes of input instead of a total of 0x10-bytes of input.

RequestDownloadTaskListData

No input, returns an output Event handle and an #IAsyncValue.

TouchApplication

Takes an input ApplicationId, no output.

IsApplicationUpdateRequested

Takes an input ApplicationId, returns an output u8 bool and an u32.

The output u32 is only valid when the output bool is set.

WithdrawApplicationUpdateRequest

Takes an input ApplicationId, no output.

RequestVerifyApplicationDeprecated

Takes an input TransferMemory handle, an ApplicationId, an u64 size, returns an output Event handle and an #IProgressAsyncResult.

On newer system-versions this calls the same func as #RequestVerifyApplication, with the u32 value set to 0x7.

RequestVerifyAddOnContentsRights

Takes an input ApplicationId, returns an output Event handle and an #IProgressAsyncResult.

RequestVerifyApplication

Takes an input TransferMemory handle, an u32, an ApplicationId, an u64 size, returns an output Event handle and an #IProgressAsyncResult.

Official sw creates the TransferMemory with an user-specified buffer with permissions=0. qlaunch uses buffer size 0x100000.

Official sw has an additional wrapper func which calls the original wrapper func, this uses value 0x7 for the u32. This is the same func used by qlaunch.

IsAnyApplicationEntityInstalled

Takes an input ApplicationId, returns an output u8 bool.

CleanupUnavailableAddOnContents

Takes an input u64 ApplicationId, an Uid, no output.

RequestMoveApplicationEntity

Takes an input TransferMemory handle, a type-0x5 input buffer containing an array of StorageId, a StorageId, an u32 bitfield of "nn::ns::KeepApplicationEntityFlagTag", an ApplicationId, an u64 tmem_size, returns an output Event handle and an #IProgressAsyncResult.

The TransferMemory uses permissions=0.

EstimateSizeToMove

Takes a type-0x5 input buffer containing an array of StorageId, a StorageId, an u32 bitfield of "nn::ns::KeepApplicationEntityFlagTag", an ApplicationId, returns an output s64.

This calls a func also used by #RequestMoveApplicationEntity, then calls another func.

FormatSdCard

No input/output.

NeedsSystemUpdateToFormatSdCard

No input, returns an output u8 bool.

GetLastSdCardFormatUnexpectedResult

No input/output.

GetApplicationView

Takes a type-0x6 output buffer containing an array of #ApplicationView, a type-0x5 input buffer containing an array of u64 ApplicationIds, no output.

GetApplicationViewDownloadErrorContext

Takes a type-0x16 output buffer containg an ErrorContext, an u64 ApplicationId, no output.

GetApplicationViewWithPromotionInfo

Takes a type-0x6 output buffer containing an array of #ApplicationViewWithPromotionInfo, a type-0x5 input buffer containing an array of u64 ApplicationIds, no output.

IsPatchAutoDeletableApplication

Takes an input ApplicationId, returns an output bool.

Compares the input ApplicationId with the value of system-setting ns.application!auto_deletable_application_id_on_not_enough_space, with the bool being set to the comparsion result.

RequestDownloadApplicationPrepurchasedRights

Takes an input ApplicationId, returns an output Event handle and an #IAsyncResult.

See #RequestApplicationUpdateInfo regarding nifm.

GetSystemDeliveryInfo

Takes a type-0x16 output buffer containing a #SystemDeliveryInfo, no output.

This generates a #SystemDeliveryInfo using the currently installed SystemUpdate meta title.

SelectLatestSystemDeliveryInfo

Takes a type-0x15 input buffer containing a #SystemDeliveryInfo, a type-0x5 input buffer containing an array of #SystemDeliveryInfo, a type-0x5 input buffer containing an array of #ApplicationDeliveryInfo, and returns an output s32.

This determines the latest version from the input #ApplicationDeliveryInfo array, using value 0 if the array is empty. If this value is less than a state field, the state field value is used instead. Then this selects a #SystemDeliveryInfo with the latest version from the input array, where the minimum version is the previously mentioned value. The version must also be also be at least the version value from the type-0x15 #SystemDeliveryInfo buffer. This also does various validation, etc. The output s32 is an index in that array for the selected entry, -1 if none found.

VerifyDeliveryProtocolVersion

Takes a type-0x15 input buffer containing a #SystemDeliveryInfo, no output.

This validates the #SystemDeliveryInfo HMAC and the protocol-version fields. Then the meta version is compared with a state field, an error is returned on match otherwise 0 is returned.

GetApplicationDeliveryInfo

Takes a type-0x6 output buffer containing an array of #ApplicationDeliveryInfo, an input u32 bitmask nn::ns::ApplicationDeliveryAttributeTag, an ApplicationId, and returns an output s32 total_out.

An error is thrown if any bit is set in ApplicationDeliveryAttributeTag besides bit1. The output array-count must be at least 1: only 1 entry will be written to this array (hence on success total_out will also only be 1 on success).

HasAllContentsToDeliver

Takes a type-0x5 input buffer containing an array of #ApplicationDeliveryInfo, returns an output u8 bool.

The array-count must match 1. After validating the #ApplicationDeliveryInfo, the output bool is set to u32 #ApplicationDeliveryInfo+0x1C & 0x10000002 != 0x2, then this returns 0.

CompareApplicationDeliveryInfo

Takes two type-0x5 input buffers containing an array of #ApplicationDeliveryInfo, returns an output s32.

The array-count for both buffers must be 1, otherwise an error is returned.

Both #ApplicationDeliveryInfo are validated, then the application-version in the first/second buffer are compared. The output s32 is set to the comparison result: -1 for less than, 0 for equal, and 1 for higher than.

CanDeliverApplication

Takes two type-0x5 input buffers containing an array of #ApplicationDeliveryInfo, returns an output u8 bool.

The array-count for the second buffer must be 1 and the array-count for the first buffer must be <=1, otherwise an error is returned. If the array-count for the first buffer is 0, this will return 0 with the output bool set to 0.

ListContentMetaKeyToDeliverApplication

Takes a type-0x6 output buffer containing an array of ContentMetaKey, a type-0x5 input buffer containing an array of #ApplicationDeliveryInfo, a s32, and returns an output s32 total_out.

The array-count for ContentMetaKey must be at least 1, and for ApplicationDeliveryInfo it must match 1.

This will only return 1 ContentMetaKey entry. This will not output the entry when the input s32 is larger than 0. This also does other validation, etc.

NeedsSystemUpdateToDeliverApplication

Takes a type-0x15 input buffer containing a #SystemDeliveryInfo, a type-0x5 input buffer containing an array of #ApplicationDeliveryInfo, and returns an output u8 bool.

The array-count must match 1.

After validation etc, this sets the output bool by comparing system-version fields in the #SystemDeliveryInfo/#ApplicationDeliveryInfo and with a state field.

EstimateRequiredSize

Takes a type-0x5 input buffer containing an array of ContentMetaKey, returns an output s64.

When the array-count is less than 1, this will return 0 with the s64 set to 0.

RequestReceiveApplication

Takes a type-0x5 input buffer containing an array of ContentMetaKey, a StorageId, an u16 port, an u32 Ipv4Address, an ApplicationId, returns an output Event handle and an #IAsyncResult.

qlaunch uses value Any for the StorageId, and value 55556 for the port.

An error is thrown if a state ref-count is zero. An error is thrown if nim ListApplicationApplyDeltaTask returns a task.

This loops through the input ContentMetaKey array, throwing an error if the ContentMetaType doesn't match Patch. The input array is copied into state which is used later by the thread for nim cmd53, max entries is 0x12.

This does various setup then creates the #IAsyncResult + the async thread which handles the #IAsyncResult operation. Then the thread does:

  • Calls a func which does:
    • Throws an error if a state flag is set.
    • Uses nim cmd53, returning the Result on failure.
    • Uses 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.
  • On success, this loads various data which is then used for saving a SystemPlayReport when the cached system-setting "systemreport!enabled" is set.
    • The EventId is "receive_app_contents" with ApplicationId <NS ProgramId>.

CommitReceiveApplication

Takes an input ApplicationId, no output.

GetReceiveApplicationProgress

Takes an input ApplicationId, returns an output #ReceiveApplicationProgress.

An error is thrown if a state ref-count is zero. An error is thrown if nim ListApplicationApplyDeltaTask returns a task.

Uses nim cmd67, throwing an error if no task is returned. Then nim cmd57 is used, returning the error from there on failure. Lastly, this writes the 0x10-bytes from output+8 from the latter cmd to the output #ReceiveApplicationProgress, and returns 0.

RequestSendApplication

Takes a type-0x5 input buffer containing an array of ContentMetaKey, an u16 port, an u32 Ipv4Address, an ApplicationId, returns an output Event handle and an #IAsyncResult.

qlaunch uses value 55556 for the port.

An error is thrown if a state ref-count is zero. An error is thrown if nim ListApplicationApplyDeltaTask returns a task.

The ContentMetaType must match Patch.

This does various setup and selects a ContentMetaKey to use from the input, then creates the #IAsyncResult + the async thread which handles the #IAsyncResult operation. Then the thread does:

  • Calls a func which does:
    • Throws an error if a state flag is set.
    • Uses nim cmd60, returning the Result on failure.
    • Uses 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.
  • On success, this loads various data which is then used for saving a SystemPlayReport when the cached system-setting "systemreport!enabled" is set.
    • The EventId is "send_app_contents" with ApplicationId <NS ProgramId>.

GetSendApplicationProgress

Takes an input ApplicationId, returns an output #SendApplicationProgress.

Same as #GetReceiveApplicationProgress except this is the Send version, and uses nim cmd68/cmd63 instead.

CompareSystemDeliveryInfo

Takes two type-0x15 input buffers containing a #SystemDeliveryInfo, returns an output s32.

This is essentially the same as #CompareApplicationDeliveryInfo, except this compares the #SystemDeliveryInfo SystemUpdate version.

ListNotCommittedContentMeta

Takes a type-0x6 output buffer containing an array of ContentMetaKey, a s32, an ApplicationId, returns an output s32 total_out.

RecoverDownloadTask

Takes a type-0x5 input buffer containing an array of {unknown} and an input u64, no output.

GetApplicationDeliveryInfoHash

Takes a type-0x5 input buffer containing an array of #ApplicationDeliveryInfo, returns an output 0x20-byte SHA256 hash.

This extracts data from the input array for hashing with SHA256, with validation being done when handling each entry.

GetApplicationRightsOnClient

Takes a type-0x6 output buffer containing an array of #ApplicationRightsOnClient, an input u32 flags, an ApplicationId, an Uid, returns 4-bytes of output for total output entries.

Official sw has at least two wrappers which use this cmd: one with an all-zero Uid, one with an user-specified Uid. With both of these, the passed flags are hard-coded to value 0x3.

For the output array count, qlaunch uses value 3.

GetApplicationTerminateResult

Takes an input ApplicationId, returns an output u32 Result.

GetRightsEnvironmentHandleForApplication

No input, returns a total of 8-bytes of output.

[9.0.0+] Now takes a total of 8-bytes of input, returns a total of 8-bytes of output.

RequestNoDownloadRightsErrorResolution

Takes an input ApplicationId, returns an output Event handle and an #IAsyncValue.

The data that can be read from the #IAsyncValue is #NoDownloadRightsErrorResolution.

See #RequestApplicationUpdateInfo regarding nifm.

RequestResolveNoDownloadRightsError

Takes an input ApplicationId, returns an output Event handle and an #IAsyncValue.

The data that can be read from the #IAsyncValue is #NoDownloadRightsErrorResolution.

See #RequestApplicationUpdateInfo regarding nifm.

GetPromotionInfo

Takes a type-0x6 output buffer containing an array of #PromotionInfo, a type-0x5 input buffer containing an array of u64 ApplicationIds, a type-0x5 input buffer containing an array of Uids, no output.

Official sw uses hard-coded value 1 for the count with each of these arrays.

ImportPromotionJsonForDebug

Takes a type-0x5 input buffer, no output.

The output from Settings_services#GetDebugModeFlag must be 1, otherwise an error is returned.

ClearPromotionInfoForDebug

No input/output.

The output from Settings_services#GetDebugModeFlag must be 1, otherwise an error is returned.

This just clears 0xC-bytes in state.

CreateApplicationResource

Takes an input #ApplicationResourceType. Returns an #IApplicationResource.

GetApplicationResource

Takes an input u64 ProcessId and an input #ApplicationResourceType. Returns an #IApplicationResource.

RegisterDeviceLockKey

Takes a type-0x5 input buffer containing an InArray of u8, no output.

User-processes expose this with two funcs: one which uses an user-specified u8 array directly, while the other uses NpadButton.

This does SHA256 hashing, etc.

UnregisterDeviceLockKey

No input/output.

Runs code identical to #RegisterDeviceLockKey, except the passed buffer/size are 0.

VerifyDeviceLockKey

Takes a type-0x5 input buffer containing an InArray of u8, no output.

User-processes expose this with two funcs: one which uses an user-specified u8 array directly, while the other uses NpadButton.

This runs hashing similar to #RegisterDeviceLockKey, with the calculated hash being verified with the one from state.

HideApplicationIcon

No input/output.

ShowApplicationIcon

No input/output.

HideApplicationTitle

No input/output.

ShowApplicationTitle

No input/output.

EnableGameCard

No input/output.

DisableGameCard

No input/output.

EnableLocalContentShare

No input/output.

DisableLocalContentShare

No input/output.

IsApplicationIconHidden

No input, returns an output bool.

IsApplicationTitleHidden

No input, returns an output bool.

IsGameCardEnabled

No input, returns an output bool.

IsLocalContentShareEnabled

No input, returns an output bool.

Various Deliver cmds now load the same flag used by this cmd (IsLocalContentShareEnabled), with an error being returned when it's not enabled.

IGameCardStopper

This is "nn::ns::detail::IGameCardStopper".

This interface has no commands.

IRequestServerStopper

This is "nn::ns::detail::IRequestServerStopper".

This interface has no commands.

IProgressMonitorForDeleteUserSaveDataAll

This is "nn::ns::detail::IProgressMonitorForDeleteUserSaveDataAll".

Cmd Name
0 GetSystemEvent
1 IsFinished
2 GetResult
10 GetProgress

When closing the object, official sw uses IsFinished first, asserting when the output bool is false.

  • GetSystemEvent: No input, returns an output Event handle. qlaunch doesn't use this.
  • IsFinished: No input, returns an output u8 bool.
  • GetResult: No input/output.

IProgressAsyncResult

This is "nn::ns::detail::IProgressAsyncResult".

Cmd Name
0 Get
1 Cancel
2 GetProgress
3 GetDetailResult
4 [4.0.0+] GetErrorContext

IApplicationVersionInterface

This is "nn::ns::detail::IApplicationVersionInterface".

This was added with [4.0.0+].

Cmd Name
0 GetLaunchRequiredVersion
1 UpgradeLaunchRequiredVersion
35 UpdateVersionList
36 PushLaunchVersion
37 ListRequiredVersion
800 RequestVersionList
801 ListVersionList
802 #RequestVersionListData
900 [12.0.0+] ImportAutoUpdatePolicyJsonForDebug
901 [12.0.0+] ListDefaultAutoUpdatePolicy
902 [12.0.0+] ListAutoUpdatePolicyForSpecificApplication
1000 PerformAutoUpdate
1001 [11.0.0+] ListAutoUpdateSchedule

RequestVersionListData

No input, returns an output Event handle and an #IAsyncValue.

The data that can be read from the #IAsyncValue is #VersionListData.

IContentManagementInterface

This is "nn::ns::detail::IContentManagementInterface".

Cmd Name
11 #CalculateApplicationOccupiedSize
43 #CheckSdCardMountStatus
47 #GetTotalSpaceSize
48 #GetFreeSpaceSize
600 #CountApplicationContentMeta
601 #ListApplicationContentMetaStatus
605 #ListApplicationContentMetaStatusWithRightsCheck
607 #IsAnyApplicationRunning

CalculateApplicationOccupiedSize

Takes an input ApplicationId, returns an output #ApplicationOccupiedSize.

CheckSdCardMountStatus

No input/output.

CountApplicationContentMeta

Takes an input ApplicationId, returns an output s32.

ListApplicationContentMetaStatusWithRightsCheck

Same input/output as #ListApplicationContentMetaStatus.

IsAnyApplicationRunning

No input, returns an output u8 bool.

IDocumentInterface

This is "nn::ns::detail::IDocumentInterface".

Cmd Name
21 GetApplicationContentPath
23 ResolveApplicationContentPath
92 [5.0.0+] GetRunningApplicationProgramId

IDownloadTaskInterface

This is "nn::ns::detail::IDownloadTaskInterface".

Cmd Name
701 #ClearTaskStatusList
702 #RequestDownloadTaskList
703 #RequestEnsureDownloadTask
704 #ListDownloadTaskStatus
705 #RequestDownloadTaskListData
706 [4.0.0+] #TryCommitCurrentApplicationDownloadTask
707 [4.0.0+] #EnableAutoCommit
708 [4.0.0+] #DisableAutoCommit
709 [4.0.0+] #TriggerDynamicCommitEvent

ClearTaskStatusList

No input/output.

RequestDownloadTaskList

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.

IReadOnlyApplicationRecordInterface

This is "nn::ns::detail::IReadOnlyApplicationRecordInterface".

This was added with [5.0.0+].

Cmd Name Notes
0 HasApplicationRecord Same as #IApplicationManagerInterface cmd 910
1 [10.0.0+] NotifyApplicationFailure
2 [10.0.0+] IsDataCorruptedResult

IReadOnlyApplicationControlDataInterface

This is "nn::ns::detail::IReadOnlyApplicationControlDataInterface".

This was added with [5.1.0+].

Cmd Name Notes
0 #GetApplicationControlData Same as #IApplicationManagerInterface cmd 400
1 #GetApplicationDesiredLanguage Same as #IApplicationManagerInterface cmd 55
2 ConvertApplicationLanguageToLanguageCode Same as #IApplicationManagerInterface cmd 59
3 #ConvertLanguageCodeToApplicationLanguage Same as #IApplicationManagerInterface cmd 60
4 [9.0.0+] SelectApplicationDesiredLanguage

IDynamicRightsInterface

This is "nn::ns::detail::IDynamicRightsInterface".

This was added with [6.0.0+].

Cmd Name
0 #RequestApplicationRightsOnServer
1 #RequestAssignRights
4 #DeprecatedRequestAssignRightsToResume
5 #VerifyActivatedRightsOwners
6 #DeprecatedGetApplicationRightsStatus
7 #RequestPrefetchForDynamicRights
8 #GetDynamicRightsState
9 [7.0.0+] #RequestApplicationRightsOnServerToResume
10 [7.0.0+] #RequestAssignRightsToResume
11 [7.0.0+] #GetActivatedRightsUsers
12 [8.0.0+] #GetApplicationRightsStatus
13 [8.0.0+] #GetRunningApplicationStatus
14 [10.0.0-15.0.1] SelectApplicationLicense
15 [12.0.0+] #RequestContentsAuthorizationToken
16 [13.0.0+] QualifyUser
17 [13.0.0+] QualifyUserWithProcessId
18 [13.0.0+] NotifyApplicationRightsCheckStart
19 [13.0.0+] UpdateUserList
20 [13.0.0+] IsRightsLostUser
21 [13.1.0+] SetRequiredAddOnContentsOnContentsAvailabilityTransition
22 [14.0.0+] GetLimitedApplicationLicense
23 [14.0.0+] GetLimitedApplicationLicenseUpgradableEvent
24 [14.0.0+] NotifyLimitedApplicationLicenseUpgradableEventForDebug
25 [14.0.0+] RequestProceedDynamicRightsState

RequestApplicationRightsOnServer

Takes an input ApplicationId, an Uid and an u32. Returns an output Event handle and an #IAsyncValue.

RequestAssignRights

Takes a type-0x5 input buffer containing an array of "nn::ns::ApplicationRightsOnServer". Returns an output Event handle and an #IAsyncResult.

DeprecatedRequestAssignRightsToResume

Takes an input u64 "nn::ns::RightsEnvironmentHandle" and an Uid. Returns an output Event handle and an #IAsyncResult.

VerifyActivatedRightsOwners

Takes an input u64 "nn::ns::RightsEnvironmentHandle". No output.

DeprecatedGetApplicationRightsStatus

Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns a bool "nn::ns::ApplicationRightsStatus".

RequestPrefetchForDynamicRights

Takes an input Uid. Returns an output Event handle and an #IAsyncResult.

GetDynamicRightsState

No input. Returns a bool "nn::ns::DynamicRightsState".

RequestApplicationRightsOnServerToResume

Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns an output Event handle and an #IAsyncValue.

RequestAssignRightsToResume

Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns an output Event handle and an #IAsyncResult.

GetActivatedRightsUsers

Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns a bool, an u32 and a type-0x6 output buffer containing an array of Uid.

GetApplicationRightsStatus

Takes an input "nn::ns::RightsEnvironmentHandle". Returns 2 bools "nn::ns::ApplicationRightsStatus" and "nn::ns::ApplicationLicenseType".

GetRunningApplicationStatus

Takes an input u64 "nn::ns::RightsEnvironmentHandle". Returns an u32 "nn::ns::RunningApplicationStatus".

RequestContentsAuthorizationToken

Takes a total of 0x50-bytes of input, a type-0x5 input buffer. Returns an IAsyncData and an output handle.

IAsyncData

This is "nn::ns::detail::IAsyncData".

This was added with [12.0.0+].

Cmd Name
0 GetSize
1 Get
2 Cancel
3 GetErrorContext

IECommerceInterface

This is "nn::ns::detail::IECommerceInterface".

This was added with [4.0.0+].

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

RequestLinkDevice

Takes an input Uid, returns an output Event handle and an #IAsyncResult.

See #RequestApplicationUpdateInfo regarding nifm.

RequestCleanupAllPreInstalledApplications

No input, returns an output Event handle and an #IAsyncResult.

RequestCleanupPreInstalledApplication

Takes an input ApplicationId, returns an output Event handle and an #IAsyncResult.

RequestSyncRights

No input, returns an output Event handle and an #IAsyncResult.

RequestUnlinkDevice

Takes an input Uid, returns an output Event handle and an #IAsyncResult.

See #RequestApplicationUpdateInfo regarding nifm.

RequestRevokeAllELicense

Takes an input Uid, returns an output Event handle and an #IAsyncResult.

RequestSyncRightsBasedOnAssignedELicenses

No input, returns an output Event handle and an #IAsyncResult.

IFactoryResetInterface

This is "nn::ns::detail::IFactoryResetInterface".

Cmd Name
100 #ResetToFactorySettings
101 #ResetToFactorySettingsWithoutUserSaveData
102 #ResetToFactorySettingsForRefurbishment
103 [9.1.0+] #ResetToFactorySettingsWithPlatformRegion
104 [9.1.0+] #ResetToFactorySettingsWithPlatformRegionAuthentication
105 [10.0.0+] #RequestResetToFactorySettingsSecurely
106 [10.0.0+] #RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely

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 an input u64 tmem_size, a TransferMemory handle, returns an output #IAsyncValueAndProgress and an Event handle.

The TransferMemory uses permissions=0.

RequestResetToFactorySettingsWithPlatformRegionAuthenticationSecurely

Takes an input u32 "nn::ae::PlatformRegion", an u64 tmem_size, a TransferMemory handle, returns an output #IAsyncValueAndProgress and an Event handle.

The TransferMemory uses permissions=0.

IAsyncValueAndProgress

This is "nn::ns::detail::IAsyncValueAndProgress".

This was added with [10.0.0+].

Cmd Name
0 GetSize
1 Get
2 Cancel
3 GetErrorContext
4 GetProgress

IApplicationResource

This is "nn::ns::detail::IApplicationResource".

This was added with [9.0.0+].

Cmd Name
0 Attach
1 BoostSystemMemoryResourceLimit

ns:vm

This is "nn::ns::detail::IVulnerabilityManagerInterface".

Cmd Name
1200 [3.0.0+] #NeedsUpdateVulnerability
1201 [4.0.0+] #UpdateSafeSystemVersionForDebug
1202 [4.0.0+] #GetSafeSystemVersion

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 ApplicationId and an u32 version.

This command is not available for retail units. On a debug unit, if the system setting vulnerability!enable_debug is set, this mounts the system savegame 0x8000000000000049 as "ns_ssversion:/", opens the file "ns_ssversion:/entry" and writes the supplied ApplicationId and version in it.

Finally, it calls OpenContentMetaDatabase with StorageId 3, then calls GetLatestContentMetaKey with the supplied ApplicationId and compares the version field from the returned Content Meta Record with the supplied version.

If the supplied version is higher than the one in NCM's database, the value returned by NeedsUpdateVulnerability is set to "true".

GetSafeSystemVersion

No input, returns an output ContentMetaKey with the cached contents of "ns_ssversion:/entry" (ApplicationId, u32 version and u32 policy from vulnerability!needs_update_vulnerability_policy).

ns:su

This is "nn::ns::detail::ISystemUpdateInterface".

Cmd Name
0 #GetBackgroundNetworkUpdateState
1 #OpenSystemUpdateControl
2 #NotifyExFatDriverRequired
3 #ClearExFatDriverStatusForDebug
4 #RequestBackgroundNetworkUpdate
5 #NotifyBackgroundNetworkUpdate
6 #NotifyExFatDriverDownloadedForDebug
9 #GetSystemUpdateNotificationEventForContentDelivery
10 #NotifySystemUpdateForContentDelivery
11 [3.0.0+] #PrepareShutdown
12 [3.0.0-3.0.2]
13 [3.0.0-3.0.2]
14 [3.0.0-3.0.2]
15 [3.0.0-3.0.2]
16 [4.0.0+] #DestroySystemUpdateTask
17 [4.0.0+] #RequestSendSystemUpdate
18 [4.0.0+] #GetSendSystemUpdateProgress

GetBackgroundNetworkUpdateState

No input, returns an output #BackgroundNetworkUpdateState.

This is similar to #HasDownloaded, see #BackgroundNetworkUpdateState.

OpenSystemUpdateControl

No input, returns an #ISystemUpdateControl.

NotifyExFatDriverRequired

No input/output.

Only usable when an #ISystemUpdateControl isn't open.

This uses nim ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask.

Then this runs ExFat handling, updates state, and sets the same state flag as #RequestBackgroundNetworkUpdate.

ClearExFatDriverStatusForDebug

No input/output.

RequestBackgroundNetworkUpdate

No input/output.

Only usable when an #ISystemUpdateControl isn't open.

This sets a state flag to value 1.

NotifyBackgroundNetworkUpdate

Takes an input ContentMetaKey, no output.

This checks whether a sysupdate is needed with the input ContentMetaKey using NCM commands, if not this will just return 0. Otherwise, this will then run code which is identical to #RequestBackgroundNetworkUpdate.

NotifyExFatDriverDownloadedForDebug

No input/output.

GetSystemUpdateNotificationEventForContentDelivery

No input, returns an output Event handle with EventClearMode=0.

NotifySystemUpdateForContentDelivery

No input/output.

Signals the Event returned by #GetSystemUpdateNotificationEventForContentDelivery.

PrepareShutdown

No input/output.

This is used by AM.

Just returns 0 when an #ISystemUpdateControl is open.

This does various cleanup / uses various service-cmds etc for shutdown preparation.

DestroySystemUpdateTask

No input/output.

Only usable when an #ISystemUpdateControl isn't open.

This uses nim ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask.

RequestSendSystemUpdate

Takes a type-0x15 input buffer containing a #SystemDeliveryInfo, an u16 port, an u32 Ipv4Address, returns an output Event handle and an #IAsyncResult.

qlaunch uses value 55556 for the port. IP is normally a local-WLAN address, however this can be any address. port/addr are little-endian.

NIM will use the input addr/port with bind(). During accept() handling the addr from there must match the input addr. Hence, addr must be the client addr. NIM will also eventually verify that the system is not Internet-connected.

This validates the #SystemDeliveryInfo and generates a ContentMetaKey from that, and creates the #IAsyncResult + the async thread which handles the #IAsyncResult operation. Then the thread does:

  • Calls a func which does:
    • Uses nim cmd76, returning the Result on failure.
    • Uses 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

This is "nn::ns::detail::ISystemUpdateControl".

Cmd Name
0 #HasDownloaded
1 #RequestCheckLatestUpdate
2 #RequestDownloadLatestUpdate
3 #GetDownloadProgress
4 #ApplyDownloadedUpdate
5 #RequestPrepareCardUpdate
6 #GetPrepareCardUpdateProgress
7 #HasPreparedCardUpdate
8 #ApplyCardUpdate
9 #GetDownloadedEulaDataSize
10 #GetDownloadedEulaData
11 #SetupCardUpdate
12 #GetPreparedCardUpdateEulaDataSize
13 #GetPreparedCardUpdateEulaData
14 [4.0.0+] #SetupCardUpdateViaSystemUpdater
15 [4.0.0+] #HasReceived
16 [4.0.0+] #RequestReceiveSystemUpdate
17 [4.0.0+] #GetReceiveProgress
18 [4.0.0+] #ApplyReceivedUpdate
19 [4.0.0+] #GetReceivedEulaDataSize
20 [4.0.0+] #GetReceivedEulaData
21 [4.0.0+] #SetupToReceiveSystemUpdate
22 [6.0.0+] #RequestCheckLatestUpdateIncludesRebootlessUpdate

Only 1 ISystemUpdateControl can be open at a time.

All Card cmds except SetupCardUpdate* require #SetupCardUpdate/#SetupCardUpdateViaSystemUpdater to be used previously. #GetPreparedCardUpdateEulaDataSize/#GetPreparedCardUpdateEulaData checks a different state flag.

HasDownloaded

No input, returns an output u8 bool flag.

Gets whether a network sysupdate was downloaded, with install pending.

Uses nim ListSystemUpdateTask and nim GetSystemUpdateTaskInfo. When ListSystemUpdateTask successfully returns a task and GetSystemUpdateTaskInfo is successful, the output flag is set to: *((u8*)(taskinfo+0) == 0x3. Otherwise, flag=0.

This always returns 0, however this will assert if GetSystemUpdateTaskInfo fails with ret!=0x3C89.

RequestCheckLatestUpdate

No input, returns an output Event handle and an #IAsyncValue.

The data that can be read from the #IAsyncValue is #LatestSystemUpdate.

RequestDownloadLatestUpdate

No input, returns an output Event handle and an #IAsyncResult.

GetDownloadProgress

No input, returns an output #SystemUpdateProgress.

Similar to #HasDownloaded except instead of a flag, this returns the 0x10-bytes from taskinfo+8. The output struct is cleared when the task(info) isn't available.

ApplyDownloadedUpdate

No input/output.

Runs code similar to #HasDownloaded, throwing an error if a network sysupdate isn't ready for install. Then the sysupdate is installed:

  • Uses ListSystemUpdateTask again, then nim IsExFatDriverIncluded. Runs ExFat handling when the output flag is set.
  • On newer system-versions, this uses nim GetSystemUpdateTaskInfo then on success uses data from there to save a SystemPlayReport when the cached system-setting "systemreport!enabled" is set.
    • The EventId is "systemupdate_dl_throughput" with ApplicationId 0100000000001018.
    • The following fields are added to the report, see nim 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 CommitSystemUpdateTask and 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 NotifySystemDataUpdateEvent, however this doesn't happen with ApplyDownloadedUpdate since that input flag is 0.

RequestPrepareCardUpdate

No input, returns an output Event handle and an #IAsyncResult.

GetPrepareCardUpdateProgress

No input, returns an output #SystemUpdateProgress.

HasPreparedCardUpdate

No input, returns an output u8 bool flag.

ApplyCardUpdate

No input/output.

GetDownloadedEulaDataSize

Takes a type-0x15 input buffer #EulaDataPath, returns an output u64 filesize.

Runs code similar to #HasDownloaded, throwing an error if a network sysupdate isn't ready for install.

Uses ListSystemUpdateTask again. Then nim GetDownloadedSystemDataPath, with the output ContentPath being used to mount the EULA title with FS.

Then "<mountname>:/<#EulaDataPath>" is opened, gets the filesize, then runs cleanup.

GetDownloadedEulaData

Takes a type-0x15 input buffer #EulaDataPath and a type-0x6 output buffer, returns an output u64 filesize.

Similar to #GetDownloadedEulaDataSize except this reads the file instead, using the specified output buffer with size=filesize. This will throw an error if the filesize is larger than the buffer size.

SetupCardUpdate

Takes an input u64 size and a TransferMemory handle, no output.

Official sw creates the TransferMemory with an user-specified buffer, with permissions=None.

qlaunch uses size 0x100000 for the TransferMemory buffer.

GetPreparedCardUpdateEulaDataSize

Takes a type-0x15 input buffer #EulaDataPath, returns an output u64 filesize.

This is similar to #GetDownloadedEulaDataSize.

GetPreparedCardUpdateEulaData

Takes a type-0x15 input buffer #EulaDataPath and a type-0x6 output buffer, returns an output u64 filesize.

This is similar to #GetDownloadedEulaData.

SetupCardUpdateViaSystemUpdater

Takes an input u64 size and a TransferMemory handle, no output.

The permissions for the TransferMemory is None.

Same as #SetupCardUpdate, except this doesn't have the code for GetGameCardHandle/GetGameCardUpdatePartitionInfo, and uses OpenRegisteredUpdatePartition instead of 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 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 will use the input addr/port with connect().

This validates the #SystemDeliveryInfo and generates a 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 ListSystemUpdateTask returns any task.
    • Checks whether a sysupdate is actually required using the previously generated ContentMetaKey, throwing an error if not.
    • Uses nim cmd69, returning the Result on failure.
    • Uses 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-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 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 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".

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 ErrorContext.

IAsyncResult

This is "nn::ns::detail::IAsyncResult".

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 ErrorContext.

ns:dev

This is "nn::ns::detail::IDevelopInterface".

[10.0.0+] Some of these cmds were replaced by the pgl system module.

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" LaunchProcess.

TerminateProcess

Wrapper for "pm:shell" TerminateProcess.

TerminateProgram

Wrapper for "pm:shell" TerminateProgram.

GetShellEvent

Wrapper for "pm:shell" GetProcessEventHandle.

GetShellEventInfo

Wrapper for "pm:shell" GetProcessEventInfo.

TerminateApplication

Calls "pm:shell" GetApplicationProcessIdForShell and sends the ProcessId to TerminateProcess.

PrepareLaunchProgramFromHost

Takes a type-0x5 input buffer containing the ContentPath, returns an output 0x10-byte struct.

Calls IPathResolverForStorage Set...NcaPath functions.

LaunchApplicationForDevelop

Takes an input u32 LaunchFlags and 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 LaunchFlags and a type-0x5 input buffer containing the ContentPath. Returns an output u64 ProcessId.

LaunchApplicationWithStorageIdForDevelop

Takes 2 input u8 StorageIds, an u32 LaunchFlags, and an 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 ProgramId. Returns a bool.

GetApplicationProgramIdFromHost

Takes a type-0x5 input buffer containing the ContentPath. Returns an u64 ProgramId.

acc:su

This is "nn::account::IAccountServiceForAdministrator".

[13.0.0+] This was moved from account.

This is only available when the output from pm:bm GetBootMode is Normal/Maintenance.

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
910 [16.0.0+] RefreshFirmwareSettingsForDebug
997 [3.0.0+] DebugInvalidateTokenCacheForUser
998 DebugSetUserStateClose
999 DebugSetUserStateOpen

[10.0.0+] DebugSetUserStateClose/DebugSetUserStateOpen now takes an additional 8-bytes of input.

IsUserRegistrationRequestPermitted

Takes a PID, an input u64 pid_reserved, and returns an output u8 bool.

TrySelectUserWithoutInteraction

Takes an input u8 bool isNetworkServiceAccountRequired, returns an output Uid.

IManagerForSystemService

This is "nn::account::baas::IManagerForSystemService".

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.
160 [15.0.0+] RequiresUpdateNetworkServiceAccountIdTokenCache
161 [16.0.0+] RequireReauthenticationOfNetworkServiceAccount

IFloatingRegistrationRequest

This is "nn::account::baas::IFloatingRegistrationRequest".

Added with [3.0.0+].

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".

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.
160 [15.0.0+] RequiresUpdateNetworkServiceAccountIdTokenCache
161 [16.0.0+] RequireReauthenticationOfNetworkServiceAccount
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".

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".

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+].

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".

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
200 [16.0.0+] ApplyAsyncWithAuthorizedToken

INotifier

This is "nn::account::detail::INotifier".

Cmd Name
0 GetSystemEvent

IProfile

This is "nn::account::profile::IProfile".

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".

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".

Cmd Name
0 GetSystemEvent
1 Cancel
2 HasDone
3 GetResult

ISessionObject

This is "nn::account::detail::ISessionObject".

Cmd Name
999 Dummy

acc:u0

This is "nn::account::IAccountServiceForApplication".

[13.0.0+] This was moved from account.

This is only available when the output from pm:bm GetBootMode is Normal/Maintenance.

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".

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".

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+].

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+].

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.

This is only available when the output from pm:bm GetBootMode is Normal/Maintenance.

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+].

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.

Value Description
0 UpToDate
1 Updatable

qlaunch just checks whether this is 0.

ApplicationOccupiedSize

This is "nn::ns::ApplicationOccupiedSize". This is a 0x80-byte struct.

Offset Size Description
0x0 0x20 * 4 Array of #ApplicationOccupiedSizeEntity

ApplicationOccupiedSizeEntity

This is "nn::ns::ApplicationOccupiedSizeEntity". This is a 0x20-byte struct.

Offset Size Description
0x0 0x1 StorageId
0x1 0x7 Reserved
0x8 0x8 AppSize
0x10 0x8 PatchSize
0x18 0x8 AocSize

ProgressForDeleteUserSaveDataAll

This is "nn::ns::detail::ProgressForDeleteUserSaveDataAll". This is a 0x28-byte struct.

Offset Size Description
0x0 0x8 StartedAt
0x8 0x4 Count
0xC 0x4 Reserved
0x10 0x8 SizeInBytes
0x18 0x1 IsSystem
0x19 0x7 Reserved
0x20 0x8 ApplicationId

ApplicationViewDeprecated

This is "nn::ns::ApplicationViewDeprecated". This is a 0x40-byte struct.

Offset Size Description
0x0 0x8 ApplicationId
0x8 0x4 Version
0xC 0x4 Flag
0x10 0x18 Progress
0x28 0x18 ApplyProgress

This is converted from #ApplicationView by #GetApplicationViewDeprecated on newer system-versions as follows:

Offset Size Description
0x0 0x20 Same as #ApplicationView +0x0.
0x20 0x4 Same as #ApplicationView +0x20.
0x24 0x2 Same as #ApplicationView +0x24.
0x26 0x2 Cleared to 0.
0x28 0x10 Same as #ApplicationView +0x30.
0x38 0x4 Same as #ApplicationView +0x40.
0x3C 0x1 Same as #ApplicationView +0x44.
0x3D 0x2 Cleared to 0.
0x3F 0x1 Cleared to 0.

ApplicationViewFlag

This is "nn::ns::ApplicationViewFlag". This is a 32-bit flag.

Bit Description
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

ApplicationDownloadProgress

This is "nn::ns::ApplicationDownloadProgress". This is a 0x18-byte struct.

Offset Size Description
0x0 0x8 Downloaded
0x8 0x8 Total
0x10 0x4 LastResult
0x14 0x1 State
0x15 0x3 Reserved

ApplicationApplyDeltaProgress

This is "nn::ns::ApplicationApplyDeltaProgress". This is a 0x18-byte struct.

Offset Size Description
0x0 0x8 Applied
0x8 0x8 Total
0x10 0x4 LastResult
0x14 0x1 State
0x15 0x3 Reserved

ApplicationDownloadState

This is "nn::ns::ApplicationDownloadState". This is an u8.

Value Description
0 Runnable
1 Suspended
2 NotEnoughSpace
3 Fatal
4 Finished

ApplicationApplyDeltaState

This is "nn::ns::ApplicationApplyDeltaState". This is an u8.

Value Description
0 Applying
1 Suspended
2 NotEnoughSpace
3 Fatal
4 NoTask
5 WaitApply
6 Applied

ApplicationView

This is "nn::ns::ApplicationView". This is a 0x50-byte struct.

Offset Size Description
0x0 0x8 ApplicationId
0x8 0x4 ?
0xC 0x4 Flags
0x10 0x40 ?

ApplicationViewWithPromotionInfo

This is a 0x70-byte struct.

Offset Size Description
0x0 0x50 #ApplicationView
0x50 0x20 #PromotionInfo

PromotionInfo

This is a 0x20-byte struct.

Offset Size Description
0x0 0x8 PosixTime start_timestamp.
0x8 0x8 PosixTime end_timestamp.
0x10 0x8 Remaining time until the promotion ends, in nanoseconds ({end_timestamp - current_time} converted to nanoseconds).
0x18 0x4 Not set, left at zero.
0x1C 0x1 Flags. Bit0: whether the PromotionInfo is valid (including bit1). Bit1 clear: u64 +0x10 is set.
0x1D 0x3 Padding

ApplicationResourceType

This is "nn::ns::ApplicationResourceType". This is an u8.

Value Description
0 ApplicationResource
1 MicroApplicationResource

ApplicationErrorCodeCategory

This is "nn::ns::ApplicationErrorCodeCategory". This is an u64.

NoDownloadRightsErrorResolution

This is "nn::ns::NoDownloadRightsErrorResolution".

BackgroundNetworkUpdateState

This is "nn::ns::BackgroundNetworkUpdateState". This is an u8.

Value Description
0 None
1 InProgress
2 Ready

Similar to #HasDownloaded, #GetBackgroundNetworkUpdateState uses nim ListSystemUpdateTask and nim GetSystemUpdateTaskInfo. When ListSystemUpdateTask successfully returns a task and GetSystemUpdateTaskInfo is successful, the output value is set to: 1 + *((u8*)(taskinfo+0) == 0x3. Otherwise, value=0.

#GetBackgroundNetworkUpdateState always returns Result 0, however this will assert if GetSystemUpdateTaskInfo fails with ret!=0x3C89.

SystemUpdateProgress

This is "nn::ns::SystemUpdateProgress". This is a 0x10-byte struct.

Offset Size Description
0x0 0x8 Loaded (this value can be larger than total_size when the async operation is finishing and when total_size is <=0, this current_size field may contain a progress value for when the total_size is not yet determined)
0x8 0x8 Total (this field is only valid when >0)

Commands which have this as output will return 0 with the output cleared, when no task is available.

EulaDataPath

This is "nn::ns::detail::EulaDataPath". This is a 0x100-byte struct.

This contains a file path.

SystemDeliveryInfo

This is "nn::ns::SystemDeliveryInfo". This is a 0x100-byte struct.

Offset Size Description
0x0 0x4 SystemDeliveryProtocolVersion. Must be <= to and match system-setting contents_delivery!system_delivery_protocol_version.
0x4 0x4 ApplicationDeliveryProtocolVersion. Loaded from system-setting contents_delivery!application_delivery_protocol_version. 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.

ApplicationDeliveryInfo

This is "nn::ns::ApplicationDeliveryInfo". This is a 0x100-byte struct.

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.

LatestSystemUpdate

This is "nn::ns::LatestSystemUpdate". This is an u8.

Value Description
0 UpToDate
1 Downloaded
2 NeedsDownload

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.

Offset Size Description
0x0 0x8 ApplicationId
0x8 0x10 Uid
0x18 0x1 Flags, qlaunch only uses bit0-bit4 and bit7.
0x19 0x1 Flags, qlaunch only uses bit0.
0x1A 0x6 Unknown

qlaunch only uses +0x18/+0x19 in this struct.

DownloadTaskStatus

This is "nn::ns::DownloadTaskStatus". This is a 0x20-byte struct.

Offset Size Description
0x0 0x10 Uuid
0x10 0x8 ApplicationId
0x18 0x1 Detail
0x19 0x1 NeedsCleanup
0x1A 0x2 Reserved
0x1C 0x4 Result

DownloadTaskStatusDetail

This is "nn::ns::DownloadTaskStatusDetail". This is an u8.

Value Description
0 Created
1 Added
2 AlreadyExists
3 Failed

ApplicationLaunchInfo

This is a 0x40-byte struct.

Offset Size Description
0x0 0x8 ApplicationId
0x8 0x4 Application version
0xC 0x4 LaunchFlags, set to hard-coded value 0xB by #GetApplicationLaunchInfo.
0x10 0x1 Application StorageId
0x11 0x1 Update StorageId
0x12 0x2E

UserData

This is a 0x80-byte struct.

Offset Size Description
0x0 0x4? ?
0x4 0x4? Icon ID. 0 = Mii, the rest are character icon IDs.
0x8 0x1? Profile icon background color ID
0x9 0x7 ?
0x10 0x10 Some ID related to the Mii? All zeros when a character icon is used.
0x20 0x60 Usually zeros?

ProfileBase

This is a 0x38-byte struct.

Offset Size Description
0x0 0x10 userID
0x10 0x8 POSIX UTC timestamp, for last account edit.
0x18 0x20 UTF-8 Nickname. Official sw uses strncpy to copy this into another struct (nn::account::Nickname), with a NUL-byte written after the copied data.

Uid

This is "nn::account::Uid". This is a 0x10-byte struct. This contains 2 u64s for the UserId.

Notes

pm:bm GetBootMode is used to determine whether aoc:u is available (see above). This value is also passed to thread "nn.ns.DelayedInitialization", which calls various funcs depending on the BootMode in various cases.

The "nn.ns.DelayedInitialization" thread uses BootMode as follows (this also handles various other initialization):

  • Initializes npns:s only for BootMode Normal/Maintenance.
  • Initializes the hosted acc:* services and service acc:su only for BootMode Normal/Maintenance.
  • Calls a func only for BootMode Normal.
  • Initializes es and avm only for BootMode Normal/Maintenance.

The output of GetBootMode is also written into state. This same func later enters a code block when BootMode is Maintenance/SafeMode: various ncm cmds are used with input StorageId=BuiltInUser (VerifyContentMetaDatabase, VerifyContentStorage, ActivateContentMetaDatabase, ActivateContentStorage, InactivateContentMetaDatabase, InactivateContentStorage) and state fields are written. Then if the BootMode is Maintenance the savedata for ns_rightsid (0x800000000000004A) is deleted. Then 0 is returned. Otherwise for BootMode Normal it continues with various initialization, including gamecard handling which handles launching the gamecard title in certain conditions (this is the only time ns launches anything with pgl outside of service cmds).

In the above block, InactivateContentMetaDatabase/InactivateContentStorage are only used if using ActivateContentMetaDatabase/ActivateContentStorage failed (error is only checked after using both cmds). If any of the ncm cmds prior to this fail, it will skip using the rest of the ncm cmds.