Loader services
ldr:shel
This is "nn::ldr::detail::IShellInterface".
This service has IPC max_sessions 3.
| 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 ProgramId. No output.
[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
No input/output.
Clears the loaded processes waiting queue.
ldr:dmnt
This is "nn::ldr::detail::IDebugMonitorInterface".
This service has IPC max_sessions 2.
| Cmd | Name |
|---|---|
| 0 | #SetProgramArgument2 |
| 1 | #FlushArguments2 |
| 2 | #GetProcessModuleInfo |
SetProgramArgument2
Same as #SetProgramArgument.
FlushArguments2
Same as #FlushArguments.
GetProcessModuleInfo
Takes a type-0xA output buffer of #ModuleInfo and an input u64 ProcessId. Returns an output s32.
ldr:pm
This is "nn::ldr::detail::IProcessManagerInterface".
This service has IPC max_sessions 1.
| Cmd | Name |
|---|---|
| 0 | #CreateProcess |
| 1 | #GetProgramInfo |
| 2 | #PinProgram |
| 3 | #UnpinProgram |
| 4 | [10.0.0+] #SetEnabledProgramVerification |
CreateProcess
Takes an input #PinId, an input #CreateProcessFlag and an input ResourceLimit handle. Returns an output Process handle.
GetProgramInfo
Takes a type-0x1A output buffer containing a #ProgramInfo and a ProgramLocation. No output.
[20.0.0+] Now takes an additional input u16.
PinProgram
Takes a ProgramLocation. Returns an output #PinId.
UnpinProgram
Takes an input #PinId. No output.
SetEnabledProgramVerification
Takes an input bool. No output.
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.
CreateProcessFlag
| Value | Description |
|---|---|
| 0 | EnableDebug |
| 1 | DisableAslr |
PinId
This is an u64.
ModuleInfo
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x20 | ModuleId |
| 0x20 | 0x8 | Address |
| 0x28 | 0x8 | Size |
ProgramInfo
| Offset | Size | Description |
|---|---|---|
| 0x0 | 0x1 | MainThreadPriority |
| 0x1 | 0x1 | DefaultCpuId |
| 0x2 | 0x2 | Flags |
| 0x4 | 0x4 | MainThreadStackSize |
| 0x8 | 0x8 | ProgramId |
| 0x10 | 0x4 | AcidSacSize |
| 0x14 | 0x4 | AciSacSize |
| 0x18 | 0x4 | AcidFacSize |
| 0x1C | 0x4 | AciFacSize |
| 0x20 | 0x10 | [19.0.0+] Reserved |
| [19.0.0+] 0x30 ([1.0.0-18.1.0] 0x20) | Variable | AcidSac |
| Variable | Variable | AciSac |
| Variable | Variable | AcidFac |
| Variable | Variable | AciFac |