Difference between revisions of "NS services"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 2,060: Line 2,060:
 
= ApplicationUpdateInfo =
 
= ApplicationUpdateInfo =
 
This is "nn::ns::ApplicationUpdateInfo".
 
This is "nn::ns::ApplicationUpdateInfo".
 +
 +
This is an u8. [[qlaunch]] just checks whether this is 0.
  
 
= NoDownloadRightsErrorResolution =
 
= NoDownloadRightsErrorResolution =

Revision as of 02:32, 17 February 2020

aoc:u

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

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
100 [7.0.0+] CreateEcPurchasedEventManager
101 [9.0.0+] CreatePermanentEcPurchasedEventManager

IPurchaseEventManager

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

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

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
19 #LaunchApplication
21 #GetApplicationContentPath
22 TerminateApplication
23 [2.0.0+] ResolveApplicationContentPath
26 BeginInstallApplication
27 DeleteApplicationRecord
30 RequestApplicationUpdateInfo
31 RequestUpdateApplication
32 CancelApplicationDownload
33 ResumeApplicationDownload
34
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

These services are all, at the top level, "nn::ns::detail::IServiceGetterInterface". These commands check a state field for a command-specific bit and returns an error if not set, this is likely a permissions check for service+command.

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 #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]
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 [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
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 RegisterContentsExternalKey
605 ListApplicationContentMetaStatusWithRightsCheck
606 [3.0.0+] GetContentMetaStorage
607 [6.0.0+] ListAvailableAddOnContent
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+] 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
1000 RequestVerifyApplicationDeprecated
1001 CorruptApplicationForDebug
1002 [3.0.0+] RequestVerifyAddOnContentsRights
1003 [5.0.0+] #RequestVerifyApplication
1004 [5.0.0+] CorruptContentForDebug
1200 #NeedsUpdateVulnerability
1300 #IsAnyApplicationEntityInstalled
1301 DeleteApplicationContentEntities
1302 CleanupUnrecordedApplicationEntity
1303 [3.0.0+] CleanupAddOnContentsWithNoRights
1304 [3.0.0+] DeleteApplicationContentEntity
1308 [5.0.0+] DeleteApplicationCompletelyForDebug
1309 [6.0.0+] #CleanupUnavailableAddOnContents
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
1800 IsNotificationSetupCompleted
1801 GetLastNotificationInfoCount
1802 ListLastNotificationInfo
1803 [3.0.0+] ListNotificationTask
1900 [3.0.0+] IsActiveAccount
1901 [4.0.0+] #RequestDownloadApplicationPrepurchasedRights
1902 [5.0.0+] GetApplicationTicketInfo
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 [9.0.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+] GetGameCardApplicationCopyIdentifier
2201 [6.0.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
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 [9.0.0+] LaunchPreomia
2514 [9.0.0+] ClearTaskOfAsyncTaskManager
2800 [9.0.0+] GetApplicationIdOfPreomia

[4.0.0+] RequestDownloadAddOnContent now takes an additional 8-bytes of input.

GetApplicationRecordUpdateSystemEvent

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

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.

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, with a 0.5s sleep-thread afterwards on success.

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.

RequestDownloadApplicationControlData

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

See #RequestApplicationUpdateInfo regarding nifm.

ListApplicationTitle

Takes a total of 0x10-bytes of input, a type-0x5 input buffer, an input handle, returns an output Event handle and an #IAsyncValue.

ListApplicationIcon

Takes a total of 0x10-bytes of input, a type-0x5 input buffer, an input handle, returns an output Event handle and an #IAsyncValue.

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.

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.

RequestVerifyApplication

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

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.

FormatSdCard

No input/output.

NeedsSystemUpdateToFormatSdCard

No input, returns an output u8 bool.

GetLastSdCardFormatUnexpectedResult

No input/output.

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 a state flag 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 a state flag 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.

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.

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

Returns an #IApplicationResource.

GetApplicationResource

Returns an #IApplicationResource.

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

IProgressAsyncResult

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

Cmd Name
0 Get
1 Cancel
2 GetProgress
3 GetDetailResult
4 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
1000 PerformAutoUpdate

RequestVersionListData

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

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

IContentManagerInterface

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

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

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

IReadOnlyApplicationRecordInterface

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

This was added with [5.0.0+].

Cmd Name Notes
0 HasApplicationRecord Same as #IApplicationManagerInterface cmd 910

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 Notes
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

RequestApplicationRightsOnServer

Takes a total of 0x20-bytes of input, returns an output Event handle and an #IAsyncValue.

RequestApplicationRightsOnServerToResume

Takes a total of 8-bytes of input, returns an output Event handle and an #IAsyncValue.

IECommerceInterface

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

This was added with [4.0.0+].

Cmd Name Notes
0 RequestLinkDevice Takes a total of 0x10-bytes of input, returns an #IAsyncResult.
1 [6.0.0+] RequestCleanupAllPreInstalledApplications No input, returns an #IAsyncResult.
2 [6.0.0+] RequestCleanupPreInstalledApplication Takes a total of 0x8-bytes of input, returns an #IAsyncResult.
3 [6.0.0+] RequestSyncRights No input, returns an #IAsyncResult.
4 [6.0.0+] RequestUnlinkDevice Takes a total of 0x10-bytes of input, returns an #IAsyncResult.
5 [6.1.0+] RequestRevokeAllELicense Takes a total of 0x10-bytes of input, returns an #IAsyncResult.
6 [9.0.0+] RequestSyncRightsBasedOnAssignedELicenses

IFactoryResetInterface

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

Cmd Name
100 ResetToFactorySettings
101 ResetToFactorySettingsWithoutUserSaveData
102 ResetToFactorySettingsForRefurbishment
103 [9.1.0+] ResetToFactorySettingsWithPlatformRegion
104 [9.1.0+] ResetToFactorySettingsWithPlatformRegionAuthentication

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

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 a state flag is set (by default it's not 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 a state flag is set.
    • The EventId is "receive_system_update" with ApplicationId <NS ProgramId>.

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

Cmd Name
0 #LaunchProgram
1 #TerminateProcess
2 #TerminateProgram
4 #GetShellEvent
5 #GetShellEventInfo
6 #TerminateApplication
7 #PrepareLaunchProgramFromHost
8 #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

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

Same as LaunchApplicationWithStorageId except the last two params passed to the internal vtable funcptr call are value 0x6, instead of from the command input.

LaunchApplicationWithStorageIdForDevelop

Takes 2 input u8s, an u32 LaunchFlags, and an ApplicationId. Returns an output u64 PID.

Launches an application title which is registered with NS.

CreateApplicationResourceForDevelop

Takes an input u32 (1 = Preomia). Returns an #IApplicationResource.

IsPreomiaForDevelop

Takes an u64 ProgramId. Returns a bool.

VersionListData

This is "nn::ns::VersionListData".

ApplicationUpdateInfo

This is "nn::ns::ApplicationUpdateInfo".

This is an u8. qlaunch just checks whether this is 0.

NoDownloadRightsErrorResolution

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

BackgroundNetworkUpdateState

Value Description
0 No sysupdate task exists.
1 Sysupdate download in progress.
2 Sysupdate ready, pending install.

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

Similar to #HasDownloaded, #GetBackgroundNetworkUpdateState uses nim 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

Offset Size Description
0x0 0x8 s64 Current size. This value can be larger than total_size when the async operation is finishing. When total_size is <=0, this current_size field may contain a progress value for when the total_size is not yet determined.
0x8 0x8 s64 Total size, this field is only valid when >0.

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

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

EulaDataPath

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

This contains a file path.

SystemDeliveryInfo

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.

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

ApplicationDeliveryInfo

Offset Size Description
0x0 0x8 ?
0x8 0x8 ApplicationId.
0x10 0x4 ApplicationVersion.
0x14 0x4 ?
0x18 0x4 RequiredSystemVersion.
0x1C 0x4 ?
0x20 0xC0 ?
0xE0 0x20 HMAC-SHA256 over the previous 0xE0-bytes. Uses a different key than #SystemDeliveryInfo.

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

LatestSystemUpdate

Value Description
1 Unknown.
2 Unknown.
Other values Unknown.

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

ReceiveApplicationProgress

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

SendApplicationProgress

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