Line 1: |
Line 1: |
| + | = ldr:shel = |
| + | This is "nn::ldr::detail::IShellInterface". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! 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. |
| + | |
| + | 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 = | | = ldr:dmnt = |
| + | This is "nn::ldr::detail::IDebugMonitorInterface". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || AddProcessToDebugLaunchQueue | + | | 0 || [[#SetProgramArgument]] |
| |- | | |- |
− | | 1 || ClearDebugLaunchQueue | + | | 1 || [[#FlushArguments]] |
| |- | | |- |
− | | 2 || | + | | 2 || [[#GetProcessModuleInfo]] |
| |} | | |} |
| | | |
− | == AddProcessToDebugLaunchQueue == | + | == GetProcessModuleInfo == |
− | Same as [[Loader_services#AddProcessToLaunchQueue|AddProcessToLaunchQueue]] but for processes marked as debug.
| + | Takes in a u64 Process ID, and a C descriptor out array of [[#ModuleInfo]]s. Returns the number of ModuleInfos copied to output. |
| | | |
− | == ClearDebugLaunchQueue == | + | = ldr:pm = |
− | Same as [[Loader_services#ClearLaunchQueue|ClearLaunchQueue]] but for processes marked as debug.
| + | This is "nn::ldr::detail::IProcessManagerInterface". |
| | | |
− | = ldr:pm =
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 26: |
Line 48: |
| | 1 || [[#GetProgramInfo]] | | | 1 || [[#GetProgramInfo]] |
| |- | | |- |
− | | 2 || [[#RegisterTitle]] | + | | 2 || [[#PinProgram]] |
| |- | | |- |
− | | 3 || [[#UnregisterTitle]] | + | | 3 || [[#UnpinProgram]] |
| |} | | |} |
| | | |
| == GetProgramInfo == | | == GetProgramInfo == |
− | Takes a TitleId + StorageId and writes output to a C descriptor buffer as follows: | + | 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]]. |
| + | |
| + | = ModuleInfo = |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x20 |
| + | | ModuleId |
| + | |- |
| + | | 0x20 |
| + | | 0x8 |
| + | | ImageAddress |
| + | |- |
| + | | 0x28 |
| + | | 0x8 |
| + | | ImageSize |
| + | |} |
| | | |
| + | = ProgramInfo = |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 42: |
Line 91: |
| | 0x0 | | | 0x0 |
| | 0x1 | | | 0x1 |
− | | Arg1 to svcStartProcess | + | | MainThreadPrio. Arg1 to svcStartProcess |
| |- | | |- |
| | 0x1 | | | 0x1 |
| + | | 0x1 |
| + | | DefaultCpuId. Arg2 to svcStartProcess |
| + | |- |
| | 0x2 | | | 0x2 |
− | | Arg2 to svcStartProcess | + | | 0x1 |
| + | | ApplicationType, see [[Process Manager services|here]]. |
| |- | | |- |
| | 0x3 | | | 0x3 |
| | 0x1 | | | 0x1 |
− | | | + | | Padding |
| |- | | |- |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | Arg3 to svcStartProcess | + | | MainThreadStackSize. Arg3 to svcStartProcess |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x8 | | | 0x8 |
− | | Title id | + | | TitleIdRange_Min |
| |- | | |- |
| | 0x10 | | | 0x10 |
Line 91: |
Line 144: |
| | <Varies> | | | <Varies> |
| | ACI0 [[NPDM#FS Access Control|FS Access Control]] | | | ACI0 [[NPDM#FS Access Control|FS Access Control]] |
− | |}
| |
− |
| |
− | == RegisterTitle ==
| |
− | Takes a TitleId + StorageId, returns an index.
| |
− |
| |
− | == UnregisterTitle ==
| |
− | Takes the index from [[#RegisterTitle]].
| |
− |
| |
− | = ldr:shel =
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Cmd || Name
| |
− | |-
| |
− | | 0 || [[#AddProcessToLaunchQueue]]
| |
− | |-
| |
− | | 1 || [[#ClearLaunchQueue]]
| |
− | |}
| |
− |
| |
− | == AddProcessToLaunchQueue ==
| |
− | Takes a type-0x19 input buffer with launch arguments (as string), an u32 (size of arguments string), and an input title-id.
| |
− |
| |
− | 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.
| |
− |
| |
− | == ClearLaunchQueue ==
| |
− | Clears the loaded processes waiting queue.
| |
− |
| |
− | = ldr:ro =
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Cmd || Name
| |
− | |-
| |
− | | 0 || [[#LoadNro]]
| |
− | |-
| |
− | | 1 || UnloadNro
| |
− | |-
| |
− | | 2 || [[#LoadNrr]]
| |
− | |-
| |
− | | 3 || UnloadNrr
| |
− | |-
| |
− | | 4 || [[#Initialize]]
| |
− | |}
| |
− |
| |
− | == LoadNro ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Word || Value
| |
− | |-
| |
− | | 0 || 0x00000004
| |
− | |-
| |
− | | 1 || 0x80000012
| |
− | |-
| |
− | | 2 || 0x00000001
| |
− | |- style="border-top: double"
| |
− | | 0-1 || Pid
| |
− | |- style="border-top: double"
| |
− | | 0 || "SCFI"
| |
− | |-
| |
− | | 1 || 0x00000000
| |
− | |-
| |
− | | 2 || Always 0.
| |
− | |-
| |
− | | 3 || Nro heap address
| |
− | |-
| |
− | | 4 || Nro size
| |
− | |-
| |
− | | 5 || Bss backing heap address
| |
− | |-
| |
− | | 6 || Bss size
| |
− | |}
| |
− |
| |
− | == LoadNrr ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Word || Value
| |
− | |-
| |
− | | 0 || 0x00000004
| |
− | |-
| |
− | | 1 || 0x8000000E
| |
− | |-
| |
− | | 2 || 0x00000001
| |
− | |-
| |
− | |- style="border-top: double"
| |
− | | 0-1 || Pid
| |
− | |- style="border-top: double"
| |
− | | 0 || "SFCI"
| |
− | |-
| |
− | | 1 || 0x00000002
| |
− | |-
| |
− | | 2 || Always 0.
| |
− | |-
| |
− | | 3 || Nrr address
| |
− | |-
| |
− | | 4 || Nrr size
| |
− | |}
| |
− |
| |
− | == Initialize ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Word || Value
| |
− | |-
| |
− | | 0 || 0x00000004
| |
− | |-
| |
− | | 1 || 0x8000000A
| |
− | |-
| |
− | | 2 || 0x00000003
| |
− | |- style="border-top: double"
| |
− | | 0-1 || Pid
| |
− | |-
| |
− | | 2 || Process handle (0xFFFF8001)
| |
− | |- style="border-top: double"
| |
− | | 0 || "SFCI"
| |
− | |-
| |
− | | 1 || 0x00000004
| |
− | |-
| |
− | | 2 || Always 0.
| |
| |} | | |} |
| | | |
| [[Category:Services]] | | [[Category:Services]] |