Loader services: Difference between revisions
| No edit summary | |||
| Line 13: | Line 13: | ||
| == SetProgramArgument == | == SetProgramArgument == | ||
| Takes a type-0x9 input buffer with launch arguments (as string), an u32 (size of arguments string), and an input title-id. | Takes a type-0x9 input buffer with launch arguments (as string), an u32 (size of arguments string), and an input title-id. | ||
| [11.0.0+] Now takes a type-0x5 buffer instead of type-0x9. Now takes a total of 8-bytes of input, instead of 0x10-bytes total. | |||
| Loads a process for the specified title-id and passes along the supplied arguments. | Loads a process for the specified title-id and passes along the supplied arguments. | ||
Revision as of 18:21, 1 December 2020
ldr:shel
This is "nn::ldr::detail::IShellInterface".
| Cmd | Name | 
|---|---|
| 0 | #SetProgramArgument | 
| 1 | #FlushArguments | 
SetProgramArgument
Takes a type-0x9 input buffer with launch arguments (as string), an u32 (size of arguments string), and an input title-id.
[11.0.0+] Now takes a type-0x5 buffer instead of type-0x9. Now takes a total of 8-bytes of input, instead of 0x10-bytes total.
Loads a process for the specified title-id and passes along the supplied arguments. Loaded processes are kept in a queue waiting for PM to launch them. The maximum number of waiting processes in this list is 10.
FlushArguments
Clears the loaded processes waiting queue.
ldr:dmnt
This is "nn::ldr::detail::IDebugMonitorInterface".
| Cmd | Name | 
|---|---|
| 0 | #SetProgramArgument | 
| 1 | #FlushArguments | 
| 2 | #GetProcessModuleInfo | 
GetProcessModuleInfo
Takes in a u64 Process ID, and a C descriptor out array of #ModuleInfos. Returns the number of ModuleInfos copied to output.
ldr:pm
This is "nn::ldr::detail::IProcessManagerInterface".
| Cmd | Name | 
|---|---|
| 0 | CreateProcess | 
| 1 | #GetProgramInfo | 
| 2 | #PinProgram | 
| 3 | #UnpinProgram | 
| 4 | [10.0.0+] #SetEnabledProgramVerification | 
GetProgramInfo
Takes an ncm::ProgramLocation, parses the NPDM, and writes a #ProgramInfo to a C descriptor buffer.
PinProgram
Takes an ncm::ProgramLocation, returns a u64 "PinId".
UnpinProgram
Takes a PinId from #PinProgram.
SetEnabledProgramVerification
Seems to sets a global flag to inputval & 1.
When the flag is zero, it will set ret=0 instead of ret={error} when verifying the fixed-key NPDM ACID signature fails. This also skips verifying the NCA Header signature using the ACID key. Note that if verifying the fixed-key ACID signature is successful, and verifying the ACID-key NCA header signature fails, it will throw an error and abort.
ModuleInfo
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x20 | ModuleId | 
| 0x20 | 0x8 | ImageAddress | 
| 0x28 | 0x8 | ImageSize | 
ProgramInfo
| Offset | Size | Description | 
|---|---|---|
| 0x0 | 0x1 | MainThreadPrio. Arg1 to svcStartProcess | 
| 0x1 | 0x1 | DefaultCpuId. Arg2 to svcStartProcess | 
| 0x2 | 0x1 | ApplicationType, see here. | 
| 0x3 | 0x1 | Padding | 
| 0x4 | 0x4 | MainThreadStackSize. Arg3 to svcStartProcess | 
| 0x8 | 0x8 | TitleIdRange_Min | 
| 0x10 | 0x4 | ACID Service Access Control list size | 
| 0x14 | 0x4 | ACI0 Service Access Control list size | 
| 0x18 | 0x4 | ACID FS Access Control buffer size | 
| 0x1C | 0x4 | ACI0 FS Access Control buffer size | 
| 0x20 | <Varies> | ACID Service Access Control list | 
| <Varies> | <Varies> | ACI0 Service Access Control list | 
| <Varies> | <Varies> | ACID FS Access Control buffer | 
| <Varies> | <Varies> | ACI0 FS Access Control |