Difference between revisions of "Loader services"
Line 1: | Line 1: | ||
+ | = ldr:shel = | ||
+ | This is "nn::ldr::detail::IShellInterface". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 0 || [[#SetProgramArgument]] | ||
+ | |- | ||
+ | | 1 || [[#FlushArguments]] | ||
+ | |} | ||
+ | |||
+ | == AddProcessToLaunchQueue == | ||
+ | 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. | ||
+ | |||
+ | == ClearLaunchQueue == | ||
+ | Clears the loaded processes waiting queue. | ||
+ | |||
+ | |||
= ldr:dmnt = | = ldr:dmnt = | ||
This is "nn::ldr::detail::IDebugMonitorInterface". | This is "nn::ldr::detail::IDebugMonitorInterface". | ||
Line 6: | Line 28: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || [[ | + | | 0 || [[#SetProgramArgument]] |
|- | |- | ||
− | | 1 || [[ | + | | 1 || [[#FlushArguments]] |
|- | |- | ||
− | | 2 || [[ | + | | 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. | |
− | |||
− | |||
− | |||
− | + | ModuleInfo is the same here as for ro:dmnt. | |
− | |||
− | + | ModuleInfo has the following layout: | |
+ | === ModuleInfo === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 32: | Line 51: | ||
| 0x0 | | 0x0 | ||
| 0x20 | | 0x20 | ||
− | | | + | | Build ID |
|- | |- | ||
| 0x20 | | 0x20 | ||
| 0x8 | | 0x8 | ||
− | | Mapped | + | | Mapped Address |
|- | |- | ||
| 0x28 | | 0x28 | ||
| 0x8 | | 0x8 | ||
− | | Mapped | + | | Mapped Size |
|- | |- | ||
|} | |} | ||
Line 56: | Line 75: | ||
| 1 || [[#GetProgramInfo]] | | 1 || [[#GetProgramInfo]] | ||
|- | |- | ||
− | | 2 || [[# | + | | 2 || [[#PinProgram]] |
|- | |- | ||
− | | 3 || [[# | + | | 3 || [[#UnpinProgram]] |
|} | |} | ||
== GetProgramInfo == | == GetProgramInfo == | ||
− | Takes | + | Takes an ncm::ProgramLocation, parses the NPDM, and writes a [[#ProgramInfo]] to a C descriptor buffer as follows: |
+ | === ProgramInfo === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 127: | Line 147: | ||
|} | |} | ||
− | == | + | == PinProgram == |
− | Takes | + | Takes an ncm::ProgramLocation, returns a u64 "PinId". |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == | + | == UnpinProgram == |
− | + | Takes a PinId from [[#PinProgram]]. | |
[[Category:Services]] | [[Category:Services]] |
Revision as of 06:20, 28 October 2019
ldr:shel
This is "nn::ldr::detail::IShellInterface".
Cmd | Name |
---|---|
0 | #SetProgramArgument |
1 | #FlushArguments |
AddProcessToLaunchQueue
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.
ClearLaunchQueue
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.
ModuleInfo is the same here as for ro:dmnt.
ModuleInfo has the following layout:
ModuleInfo
Offset | Size | Description |
---|---|---|
0x0 | 0x20 | Build ID |
0x20 | 0x8 | Mapped Address |
0x28 | 0x8 | Mapped Size |
ldr:pm
This is "nn::ldr::detail::IProcessManagerInterface".
Cmd | Name |
---|---|
0 | CreateProcess |
1 | #GetProgramInfo |
2 | #PinProgram |
3 | #UnpinProgram |
GetProgramInfo
Takes an ncm::ProgramLocation, parses the NPDM, and writes a #ProgramInfo to a C descriptor buffer as follows:
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 |
PinProgram
Takes an ncm::ProgramLocation, returns a u64 "PinId".
UnpinProgram
Takes a PinId from #PinProgram.