Changes

Jump to navigation Jump to search
7,232 bytes added ,  05:00, 25 August 2019
Line 113: Line 113:  
| 31 || [2.0.0+] [[#GetWriterLockAccessorEx]] ||  
 
| 31 || [2.0.0+] [[#GetWriterLockAccessorEx]] ||  
 
|-
 
|-
| 100 || [6.0.0+] PopRequestLaunchApplicationForDebug ||
+
| 100 || [6.0.0+] [[#PopRequestLaunchApplicationForDebug]] ||
 
|-
 
|-
 
| 200 || [8.0.0+] [[#LaunchDevMenu]] ||
 
| 200 || [8.0.0+] [[#LaunchDevMenu]] ||
Line 142: Line 142:     
The input value must be 0-3. 0 = HomeButton.
 
The input value must be 0-3. 0 = HomeButton.
 +
 +
==== PopRequestLaunchApplicationForDebug ====
 +
Takes a type-0x6 output buffer containing an array of u128 userIDs, returns an output u64 titleID (<code>nn::ncm::ApplicationId</code>) and an output s32 '''total_userIDs'''.
 +
 +
The total entries in the userID buffer must be >= {total userIDs in state}.
    
==== LaunchDevMenu ====
 
==== LaunchDevMenu ====
Line 149: Line 154:     
Uses [[NS_Services#IApplicationManagerInterface]] cmd99.
 
Uses [[NS_Services#IApplicationManagerInterface]] cmd99.
 +
 +
This is used by [[qlaunch]]. On success, official sw will enter an infinite loop with sleep-thread value 86400000000000.
    
==== ILockAccessor ====
 
==== ILockAccessor ====
Line 272: Line 279:  
| 100 || [[#PopFloatingApplicationForDevelopment]] ||  
 
| 100 || [[#PopFloatingApplicationForDevelopment]] ||  
 
|}
 
|}
 +
 +
[[#CreateApplication]]/[[#CreateSystemApplication]] eventually call the same internal func. With [[#CreateApplication]], two ptrs passed to the internal func are NULL, while with [[#CreateSystemApplication]] these are loaded from state. The initial content of [[#ApplicationLaunchRequestInfo]] is all-zero with [[#CreateSystemApplication]], while with [[#CreateApplication]] the first two u32s are value 0x3 with the rest all-zero. The [[#AppletId]] is set to 0x01 with [[#CreateApplication]], while with [[#CreateSystemApplication]] it's 0x04.
    
==== CreateApplication ====
 
==== CreateApplication ====
Takes an input u64 <code>nn::ncm::ApplicationId</code>(titleID), returns an [[#IApplicationAccessor]].
+
Takes an input u64 titleID (<code>nn::ncm::ApplicationId</code>), returns an [[#IApplicationAccessor]].
    
==== PopLaunchRequestedApplication ====
 
==== PopLaunchRequestedApplication ====
Line 280: Line 289:     
==== CreateSystemApplication ====
 
==== CreateSystemApplication ====
Takes an input u64 <code>nn::ncm::SystemApplicationId</code>, returns an [[#IApplicationAccessor]].
+
Takes an input u64 titleID (<code>nn::ncm::SystemApplicationId</code>), returns an [[#IApplicationAccessor]].
 +
 
 +
[[qlaunch]] only uses this with a hard-coded titleID for the "starter" title.
    
==== PopFloatingApplicationForDevelopment ====
 
==== PopFloatingApplicationForDevelopment ====
 
No input, returns an [[#IApplicationAccessor]].
 
No input, returns an [[#IApplicationAccessor]].
 +
 +
Should not be used if no FloatingApplication is available (svcBreak).
    
==== IApplicationAccessor ====
 
==== IApplicationAccessor ====
Line 353: Line 366:  
===== GetApplicationControlProperty =====
 
===== GetApplicationControlProperty =====
 
No input, takes a type-0x6 output buffer.
 
No input, takes a type-0x6 output buffer.
 +
 +
The output buffer must be at least 0x4000-bytes. Returns an error when the [[#AppletId]] is 0x04, aka when the IApplicationAccessor is for a SystemApplication.
    
This gets the application [[NACP_Format|control.nacp]].
 
This gets the application [[NACP_Format|control.nacp]].
Line 359: Line 374:  
Takes a type-0x6 output buffer.
 
Takes a type-0x6 output buffer.
   −
The output buffer size must be at least 0x10-bytes.
+
The output buffer size must be at least 0x10-bytes. Returns an error when the [[#AppletId]] is 0x04, aka when the IApplicationAccessor is for a SystemApplication.
   −
This gets the cached ApplicationLaunchProperty.
+
This gets the [[#ApplicationLaunchProperty]].
    
===== GetApplicationLaunchRequestInfo =====
 
===== GetApplicationLaunchRequestInfo =====
 
No input, returns an output 0x10-byte struct.
 
No input, returns an output 0x10-byte struct.
   −
This gets the ApplicationLaunchRequestInfo from state. The output struct is "nn::applet::ApplicationLaunchRequestInfo".
+
This gets the [[#ApplicationLaunchRequestInfo]] from state. The output struct is "nn::applet::ApplicationLaunchRequestInfo".
    
===== SetUsers =====
 
===== SetUsers =====
Line 373: Line 388:  
The total entries for the userIDs must be <=8.
 
The total entries for the userIDs must be <=8.
   −
When the input flag is true, the '''users_available''' state flag is cleared to 0, however as long as total_entries is valid this state flag will be set to 1 afterwards regardless.
+
When the input flag is true, this just clears the '''users_available''' state flag to 0 and returns.
    
===== CheckRightsEnvironmentAvailable =====
 
===== CheckRightsEnvironmentAvailable =====
Line 384: Line 399:  
Takes a type-0x6 output buffer containing an array of u128 userIDs, returns an output s32 '''total_entries'''.
 
Takes a type-0x6 output buffer containing an array of u128 userIDs, returns an output s32 '''total_entries'''.
   −
Gets a userID listing, this is unrelated to [[#SetUsers]].
+
Gets a userID listing, this is unrelated to [[#SetUsers]]. [[qlaunch]] only uses 1 userID with this.
    
The stored entry-count in state must be <= <size of output buffer in entries>.
 
The stored entry-count in state must be <= <size of output buffer in entries>.
Line 598: Line 613:  
Exits the LibraryApplet and returns to running the title which launched this LibraryApplet ([[qlaunch]] for example).
 
Exits the LibraryApplet and returns to running the title which launched this LibraryApplet ([[qlaunch]] for example).
   −
Official sw enters an infinite sleep-thread loop after using this.
+
On success, official sw will enter an infinite loop with sleep-thread value 86400000000000.
    
==== GetLibraryAppletInfo ====
 
==== GetLibraryAppletInfo ====
Line 673: Line 688:     
==== CreateGameMovieTrimmer ====
 
==== CreateGameMovieTrimmer ====
Takes an input u64 and handle, returns a GRC [[GRC_services#IGameMovieTrimmer|IGameMovieTrimmer]].
+
Takes an input u64 size and a TransferMemory handle, returns a GRC [[GRC_services#IGameMovieTrimmer|IGameMovieTrimmer]].
 +
 
 +
This is a wrapper for GRC [[GRC_services#OpenGameMovieTrimmer|OpenGameMovieTrimmer]].
 +
 
 +
Official sw uses an user-buffer for the tmem, with permissions=0.
    
==== ReserveResourceForMovieOperation ====
 
==== ReserveResourceForMovieOperation ====
Line 777: Line 796:  
==== StartShutdownSequenceForOverlay ====
 
==== StartShutdownSequenceForOverlay ====
 
No input/output.
 
No input/output.
 +
 +
On success, official sw will enter an infinite loop with sleep-thread value 86400000000000.
    
==== StartRebootSequenceForOverlay ====
 
==== StartRebootSequenceForOverlay ====
 
No input/output.
 
No input/output.
 +
 +
On success, official sw will enter an infinite loop with sleep-thread value 86400000000000.
    
==== SetHandlingHomeButtonShortPressedEnabled ====
 
==== SetHandlingHomeButtonShortPressedEnabled ====
Line 791: Line 814:  
==== BeginToObserveHidInputForDevelop ====
 
==== BeginToObserveHidInputForDevelop ====
 
No input/output.
 
No input/output.
 +
 +
Sets various state fields and signals an userspace-event.
 +
 +
Enables HID input for the OverlayApplet, without disabling input for the foreground applet.
    
== IApplicationProxy ==
 
== IApplicationProxy ==
Line 835: Line 862:  
| 15 || [7.0.0+] [[#CreateApplicationWithAttributeAndRequestToStartForQuest]] ||  
 
| 15 || [7.0.0+] [[#CreateApplicationWithAttributeAndRequestToStartForQuest]] ||  
 
|-
 
|-
| 20 || EnsureSaveData ||
+
| 20 || [[#EnsureSaveData]] ||
 
|-
 
|-
 
| 21 || [[#GetDesiredLanguage]] ||
 
| 21 || [[#GetDesiredLanguage]] ||
Line 903: Line 930:  
| 130 || [8.0.0+] [[#GetGpuErrorDetectedSystemEvent]] ||  
 
| 130 || [8.0.0+] [[#GetGpuErrorDetectedSystemEvent]] ||  
 
|-
 
|-
| 500 || [5.0.0+] StartContinuousRecordingFlushForDebug ||  
+
| 500 || [5.0.0+] [[#StartContinuousRecordingFlushForDebug]] ||  
 
|-
 
|-
 
| 1000 || [5.0.0+] [[#CreateMovieMaker]] ||  
 
| 1000 || [5.0.0+] [[#CreateMovieMaker]] ||  
Line 947: Line 974:     
Same as [[#CreateApplicationAndRequestToStartForQuest]] except the entire attributes structure is directly specified via the input buffer. This command replaces [[#CreateApplicationAndRequestToStartForQuest]], official user-processes no longer use [[#CreateApplicationAndPushAndRequestToStartForQuest]].
 
Same as [[#CreateApplicationAndRequestToStartForQuest]] except the entire attributes structure is directly specified via the input buffer. This command replaces [[#CreateApplicationAndRequestToStartForQuest]], official user-processes no longer use [[#CreateApplicationAndPushAndRequestToStartForQuest]].
 +
 +
==== EnsureSaveData ====
 +
Takes an input u128 userID, returns an output u64 size.
 +
 +
Calls sdk func <code>nn::fs::EnsureApplicationSaveData</code>. [[qlaunch]] also calls this same sdk func directly.
 +
 +
Creates the various savedata as specified by the application [[NACP_Format|control.nacp]] when the savedata doesn't exist.
 +
 +
Official user-processes launch the dataErase LibraryApplet depending on the Result, the above output size is used with this.
    
==== GetDesiredLanguage ====
 
==== GetDesiredLanguage ====
Line 964: Line 1,000:  
No input, returns an output u8 [[Filesystem_services#StorageId|StorageId]] and u8 [[Filesystem_services#StorageId|StorageId]].
 
No input, returns an output u8 [[Filesystem_services#StorageId|StorageId]] and u8 [[Filesystem_services#StorageId|StorageId]].
   −
Just returns two u8s loaded from state.
+
This returns two u8s loaded from state, these are the same StorageIds from [[#ApplicationLaunchProperty]].
    
==== BeginBlockingHomeButtonShortAndLongPressed ====
 
==== BeginBlockingHomeButtonShortAndLongPressed ====
Line 1,006: Line 1,042:  
==== RequestFlushGamePlayingMovieForDebug ====
 
==== RequestFlushGamePlayingMovieForDebug ====
 
No input/output.
 
No input/output.
 +
 +
Requests to save the video recording, as if the Capture-button was held.
    
==== RequestToShutdown ====
 
==== RequestToShutdown ====
 
No input/output.
 
No input/output.
 +
 +
On success, official sw will enter an infinite loop with sleep-thread value 86400000000000.
    
==== RequestToReboot ====
 
==== RequestToReboot ====
 
No input/output.
 
No input/output.
 +
 +
On success, official sw will enter an infinite loop with sleep-thread value 86400000000000.
    
==== ExitAndRequestToShowThanksMessage ====
 
==== ExitAndRequestToShowThanksMessage ====
 
No input/output.
 
No input/output.
   −
Used to exit the application and return to the kiosk menu. Official sw uses [[#UnlockExit]] immediately before this.
+
Used to exit the application and return to the kiosk menu. Official sw uses [[#UnlockExit]] immediately before this if needed.
 +
 
 +
On success, official sw will enter an infinite loop with sleep-thread value 86400000000000.
    
This throws an error when the cached [[Settings_services#GetQuestFlag]] value is 0.
 
This throws an error when the cached [[Settings_services#GetQuestFlag]] value is 0.
Line 1,077: Line 1,121:  
==== GetPreviousProgramIndex ====
 
==== GetPreviousProgramIndex ====
 
No input, returns an output s32.
 
No input, returns an output s32.
 +
 +
Gets the ProgramIndex of the Application which launched this title. The output ProgramIndex is -1 when there was no previous title.
    
==== EnableApplicationAllThreadDumpOnCrash ====
 
==== EnableApplicationAllThreadDumpOnCrash ====
Line 1,085: Line 1,131:     
This is used by sdknso during applet-application initialization. A seperate thread is setup where event-waiting is handled. When the Event is signaled, official sw will assert.
 
This is used by sdknso during applet-application initialization. A seperate thread is setup where event-waiting is handled. When the Event is signaled, official sw will assert.
 +
 +
==== StartContinuousRecordingFlushForDebug ====
 +
Takes an input s64 nanoseconds-value, returns an output Event handle with autoclear=false.
 +
 +
The cached value loaded from [[System_Settings|system-setting]] <code>am.debug!dev_function</code> must be set to 0x1 with size 0x1, otherwise an error is returned.
    
==== CreateMovieMaker ====
 
==== CreateMovieMaker ====
Takes an input u64 and handle, returns an [[#IMovieMaker]].
+
Takes an input u64 size and a TransferMemory handle, returns an [[#IMovieMaker]].
 +
 
 +
Official sw retries using the cmd in a loop on error 0x8D4 with svcSleepThread(100000000) being used first.
 +
 
 +
Official sw uses permissions=None for the TransferMemory, with an user-specified buffer.
    
==== PrepareForJit ====
 
==== PrepareForJit ====
Line 1,133: Line 1,188:     
Stubbed with an ILibraryAppletCreator from [[#CreateSelfLibraryAppletCreatorForDevelop]], just returns an error.
 
Stubbed with an ILibraryAppletCreator from [[#CreateSelfLibraryAppletCreatorForDevelop]], just returns an error.
 +
 +
Terminates all LibraryApplets which were created by the current applet (or by the Application when used from the [[#IApplicationAccessor]] cmd).
    
=== AreAnyLibraryAppletsLeft ===
 
=== AreAnyLibraryAppletsLeft ===
Line 1,138: Line 1,195:     
Stubbed with an ILibraryAppletCreator from [[#CreateSelfLibraryAppletCreatorForDevelop]], just returns an error.
 
Stubbed with an ILibraryAppletCreator from [[#CreateSelfLibraryAppletCreatorForDevelop]], just returns an error.
 +
 +
Gets whether any LibraryApplets ([[#ILibraryAppletAccessor]]) which were created by the current applet are still open (or by the Application when used from the [[#IApplicationAccessor]] cmd).
    
=== CreateStorage ===
 
=== CreateStorage ===
Line 1,319: Line 1,378:  
|}
 
|}
   −
Officially notification messages are handled by the application itself, not sdk-nso in ExeFS. Official apps call code in sdk-nso which basically uses svcWaitSynchronization with the event from [[#GetEventHandle]] to check whether a message is available, then if so it uses [[#ReceiveMessage]]. The actual handling for message IDs is done in the app itself(see [[#NotificationMessage]]).
+
Officially notification messages are handled by the application itself, not sdk-nso in ExeFS. Official apps call code in sdk-nso which basically uses svcWaitSynchronization with the event from [[#GetEventHandle]] to check whether a message is available, then if so it uses [[#ReceiveMessage]]. The actual handling for message IDs is done in the app itself(see [[#AppletMessage]]).
    
[7.0.0+] User-processes now use BeginVrModeEx/EndVrModeEx instead of [[#SetVrModeEnabled]]. Prior to using using BeginVrModeEx, [[Parental_Control_services|pctl]] IsStereoVisionPermitted is used and error 0xD08E is thrown if not allowed by pctl.
 
[7.0.0+] User-processes now use BeginVrModeEx/EndVrModeEx instead of [[#SetVrModeEnabled]]. Prior to using using BeginVrModeEx, [[Parental_Control_services|pctl]] IsStereoVisionPermitted is used and error 0xD08E is thrown if not allowed by pctl.
Line 1,327: Line 1,386:     
=== ReceiveMessage ===
 
=== ReceiveMessage ===
No input. Returns an output u32. Error 0x680 indicates no message is available.
+
No input. Returns an output [[#AppletMessage]]. Error 0x680 indicates no message is available.
    
=== GetThisAppletKind ===
 
=== GetThisAppletKind ===
Line 1,453: Line 1,512:  
Takes a type-0x5 input buffer containing a string, returns an output u64 titleID.
 
Takes a type-0x5 input buffer containing a string, returns an output u64 titleID.
   −
Gets the application titleID for the specified ContentActionName string. Returns an error when the current [[#AppletId]] isn't 0x04 (starter).
+
Gets the application titleID for the specified ContentActionName string. Returns an error when the current [[#AppletId]] isn't 0x04 (when the current applet isn't a SystemApplication).
    
=== SetCpuBoostMode ===
 
=== SetCpuBoostMode ===
Line 1,460: Line 1,519:  
=== PerformSystemButtonPressingIfInFocus ===
 
=== PerformSystemButtonPressingIfInFocus ===
 
Takes an input [[#SystemButtonType]], no output.
 
Takes an input [[#SystemButtonType]], no output.
 +
 +
Just returns 0 when a state field is not value 1. Verifies that the input button is allowed, then calls the same func as [[#PerformSystemButtonPressing]] internally.
    
=== SetPerformanceConfigurationChangedNotification ===
 
=== SetPerformanceConfigurationChangedNotification ===
Line 1,562: Line 1,623:  
=== Exit ===
 
=== Exit ===
 
No input/output.
 
No input/output.
 +
 +
Exits the current applet. On success, official sw will enter an infinite loop with sleep-thread value 86400000000000.
    
=== LockExit ===
 
=== LockExit ===
Line 1,613: Line 1,676:  
Takes an input u8 bool flag, no output.
 
Takes an input u8 bool flag, no output.
   −
See [[#NotificationMessage]].
+
See [[#AppletMessage]].
    
=== SetScreenShotAppletIdentityInfo ===
 
=== SetScreenShotAppletIdentityInfo ===
Line 1,629: Line 1,692:  
Takes an input u8 bool flag, no output.
 
Takes an input u8 bool flag, no output.
   −
See [[#NotificationMessage]].
+
See [[#AppletMessage]].
    
When enabled with a non-Overlay applet, Overlay applet will not be notified of capture button short-presses for screenshots.
 
When enabled with a non-Overlay applet, Overlay applet will not be notified of capture button short-presses for screenshots.
Line 1,670: Line 1,733:  
Sets an internal state flag. When the input flag is 0, this will in additional run the same code as [[#ApproveToDisplay]].
 
Sets an internal state flag. When the input flag is 0, this will in additional run the same code as [[#ApproveToDisplay]].
   −
See [[#NotificationMessage]].
+
See [[#AppletMessage]].
    
=== ApproveToDisplay ===
 
=== ApproveToDisplay ===
Line 1,749: Line 1,812:  
Takes an input u8 bool, no output.
 
Takes an input u8 bool, no output.
   −
See [[#NotificationMessage]].
+
See [[#AppletMessage]].
    
=== SetApplicationAlbumUserData ===
 
=== SetApplicationAlbumUserData ===
Line 2,137: Line 2,200:  
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 0 || NotifyMessageToHomeMenuForDebug ||
+
| 0 || [[#NotifyMessageToHomeMenuForDebug]] ||
 
|-
 
|-
 
| 1 || [[#OpenMainApplication]] ||  
 
| 1 || [[#OpenMainApplication]] ||  
 
|-
 
|-
| 10 || EmulateButtonEvent ||
+
| 10 || [[#PerformSystemButtonPressing]] ||
 
|-
 
|-
| 20 || InvalidateTransitionLayer ||
+
| 20 || [[#InvalidateTransitionLayer]] ||
 
|-
 
|-
| 30 || [6.0.0+] RequestLaunchApplicationWithUserAndArgumentForDebug ||
+
| 30 || [6.0.0+] [[#RequestLaunchApplicationWithUserAndArgumentForDebug]] ||
 
|-
 
|-
| 40 || [6.0.0+] GetAppletResourceUsageInfo ||
+
| 40 || [6.0.0+] [[#GetAppletResourceUsageInfo]] ||
 
|-
 
|-
 
| 100 || [7.0.0+] [[#SetCpuBoostModeForApplet]] ||
 
| 100 || [7.0.0+] [[#SetCpuBoostModeForApplet]] ||
 
|}
 
|}
 +
 +
=== NotifyMessageToHomeMenuForDebug ===
 +
Takes an input [[#AppletMessage]], no output.
 +
 +
Stubbed, just returns an error.
    
=== OpenMainApplication ===
 
=== OpenMainApplication ===
 
No input, returns an output [[#IApplicationAccessor]].
 
No input, returns an output [[#IApplicationAccessor]].
 +
 +
Should not be used when no Application is running (svcBreak).
 +
 +
=== PerformSystemButtonPressing ===
 +
Takes an input [[#SystemButtonType]], no output.
 +
 +
=== InvalidateTransitionLayer ===
 +
No input/output.
 +
 +
=== RequestLaunchApplicationWithUserAndArgumentForDebug ===
 +
Takes an input u8 bool flag, an u64 Application titleID, a type-0x5 input buffer containing an array of u128 userIDs, and a type-0x5 input buffer, no output.
 +
 +
Requests to launch the specified Application, with the specified users. When the bool flag is true, the content of the second input buffer is used to create a storage which is pushed to the UserChannel for this Application (see [[#LaunchParameterKind]]).
 +
 +
=== GetAppletResourceUsageInfo ===
 +
No input, returns an output [[#AppletResourceUsageInfo]].
    
=== SetCpuBoostModeForApplet ===
 
=== SetCpuBoostModeForApplet ===
 
Takes an input u32 '''CpuBoostMode''' (only modes 0 and 1 are valid) and passes it to [[PPC_services#apm:sys|SetCpuBoostMode]].
 
Takes an input u32 '''CpuBoostMode''' (only modes 0 and 1 are valid) and passes it to [[PPC_services#apm:sys|SetCpuBoostMode]].
 +
 +
The cached value loaded from [[Settings_services#GetDebugModeFlag]] must be 1, otherwise an error is returned.
    
== IStorage ==
 
== IStorage ==
Line 2,445: Line 2,531:  
| 0x04
 
| 0x04
 
| 0100000000001012
 
| 0100000000001012
| "starter"
+
| "starter" SystemApplication.
 
|-
 
|-
 
| 0x0A
 
| 0x0A
Line 2,539: Line 2,625:  
|}
 
|}
   −
=== NotificationMessage ===
+
=== AppletMessage ===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 2,561: Line 2,647:  
| 0x5C || Screenshot was [[#SetAlbumImageTakenNotificationEnabled|taken]].
 
| 0x5C || Screenshot was [[#SetAlbumImageTakenNotificationEnabled|taken]].
 
|}
 
|}
 +
 +
This is "nn::am::AppletMessage".
    
=== OperationMode ===
 
=== OperationMode ===
Line 2,595: Line 2,683:  
|-
 
|-
 
| 2 || PerformHomeButtonLongPressing
 
| 2 || PerformHomeButtonLongPressing
 +
|-
 +
| 3 || Short-pressing with the Power-button. Only available with [[#PerformSystemButtonPressing]].
 +
|-
 +
| 4 || Long-pressing with the Power-button. Only available with [[#PerformSystemButtonPressing]].
 +
|-
 +
| 5 || Shutdown the system. Only available with [[#PerformSystemButtonPressing]].
 
|-
 
|-
 
| 6 || PerformCaptureButtonShortPressing
 
| 6 || PerformCaptureButtonShortPressing
Line 2,601: Line 2,695:  
|}
 
|}
   −
This is "nn::am::service::SystemButtonType". This is used with [[#PerformSystemButtonPressingIfInFocus]].
+
This is "nn::am::service::SystemButtonType". This is used with [[#PerformSystemButtonPressingIfInFocus]]/[[#PerformSystemButtonPressing]].
    
=== LaunchParameterKind ===
 
=== LaunchParameterKind ===
Line 2,609: Line 2,703:  
!  Description
 
!  Description
 
|-
 
|-
| 1 || Application-specific LaunchParameter
+
| 1 || UserChannel. Application-specific LaunchParameter.
 
|-
 
|-
 
| 2 || account PreselectedUser
 
| 2 || account PreselectedUser
Line 2,637: Line 2,731:  
!  Description
 
!  Description
 
|-
 
|-
| 0 || u8 ProgramIndex. "ExecuteProgram". User-process enters an infinite svcSleepThread loop afterwards.
+
| 0 || u8 ProgramIndex. "ExecuteProgram". [[NS_Services|NS]] handles ProgramIndex by launching titleID {application_titleID}+ProgramIndex. After using [[#ExecuteProgram]] with this successfully, official user-processes will enter an infinite loop with sleep-thread value 86400000000000.
 
|-
 
|-
 
| 1 || u64 titleID. "JumpToSubApplicationProgramForDevelopment". Only available when [[Settings_services#GetDebugModeFlag|DebugMode]] is 1.
 
| 1 || u64 titleID. "JumpToSubApplicationProgramForDevelopment". Only available when [[Settings_services#GetDebugModeFlag|DebugMode]] is 1.
Line 2,646: Line 2,740:     
This is "nn::am::service::ProgramSpecifyKind". This controls the type of the u64 passed to [[#ExecuteProgram]].
 
This is "nn::am::service::ProgramSpecifyKind". This controls the type of the u64 passed to [[#ExecuteProgram]].
 +
 +
ProgramIndex values where the title is not installed should not be used: [[qlaunch]] will display an error message and the current title will become "corrupted", however Home Menu will have an option to repair it.
    
= AppletResourceUserId =
 
= AppletResourceUserId =
Line 2,740: Line 2,836:     
Internally AM only uses the first 0xC-bytes from ApplicationAttribute, regardless of the cmd.
 
Internally AM only uses the first 0xC-bytes from ApplicationAttribute, regardless of the cmd.
 +
 +
= ApplicationLaunchProperty =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || Application titleID.
 +
|-
 +
| 0x8 || 0x4 || Application title-version.
 +
|-
 +
| 0xC || 0x1 || [[Filesystem_services#StorageId|StorageId]] for the Application base title.
 +
|-
 +
| 0xD || 0x1 || [[Filesystem_services#StorageId|StorageId]] for the Application update title.
 +
|-
 +
| 0xE || 0x1 || Unknown.
 +
|-
 +
| 0xF || 0x1 || Padding.
 +
|}
 +
 +
This struct is 0x10-bytes.
 +
 +
= ApplicationLaunchRequestInfo =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || Unknown. The default is 0x0 with [[#CreateSystemApplication]], 0x3 with [[#CreateApplication]].
 +
|-
 +
| 0x4 || 0x4 || Unknown. The default is 0x0 with [[#CreateSystemApplication]], 0x3 with [[#CreateApplication]].
 +
|-
 +
| 0x8 || 0x8 || Unknown. The default is 0x0.
 +
|}
 +
 +
This struct is "nn::applet::ApplicationLaunchRequestInfo". This struct is 0x10-bytes.
 +
 +
= AppletResourceUsageInfo =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || Unknown counter.
 +
|-
 +
| 0x4 || 0x4 || Unknown counter.
 +
|-
 +
| 0x8 || 0x4 || Output from [[NS_Services|NS GetRightsEnvironmentCountForDebug]].
 +
|-
 +
| 0xC || 0x14 || Always zero.
 +
|}
 +
 +
This struct is "nn::am::service::AppletResourceUsageInfo". This struct is 0x20-bytes.
    
= Notes =
 
= Notes =

Navigation menu