Line 1: |
Line 1: |
| = ldr:shel = | | = ldr:shel = |
| + | This is "nn::ldr::detail::IShellInterface". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || | + | | 0 || [[#SetProgramArgument]] |
| |- | | |- |
− | | 1 || | + | | 1 || [[#FlushArguments]] |
| |} | | |} |
| | | |
− | = ldr:ro = | + | == 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 = |
| + | This is "nn::ldr::detail::IDebugMonitorInterface". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#LoadNro]] | + | | 0 || [[#SetProgramArgument]] |
| |- | | |- |
− | | 1 || [[#LoadNrr]] | + | | 1 || [[#FlushArguments]] |
| |- | | |- |
− | | 2 || | + | | 2 || [[#GetProcessModuleInfo]] |
− | |-
| |
− | | 3 ||
| |
− | |-
| |
− | | 4 || [[#Initialize]]
| |
| |} | | |} |
| | | |
− | == LoadNro == | + | == GetProcessModuleInfo == |
| + | Takes in a u64 Process ID, and a C descriptor out array of [[#ModuleInfo]]s. Returns the number of ModuleInfos copied to output. |
| + | |
| + | = ldr:pm = |
| + | This is "nn::ldr::detail::IProcessManagerInterface". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Word || Value | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || 0x00000004 | + | | 0 || CreateProcess |
| |- | | |- |
− | | 1 || 0x80000012 | + | | 1 || [[#GetProgramInfo]] |
| |- | | |- |
− | | 2 || 0x00000001 | + | | 2 || [[#PinProgram]] |
− | |- style="border-top: double"
| |
− | | 0-1 || Pid
| |
− | |- style="border-top: double"
| |
− | | 0 || "SCFI"
| |
| |- | | |- |
− | | 1 || 0x00000000 | + | | 3 || [[#UnpinProgram]] |
| |- | | |- |
− | | 2 || Always 0. | + | | 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_Format|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 = |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 3 || Nro address
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 4 || Nro size | + | | 0x0 |
| + | | 0x20 |
| + | | ModuleId |
| |- | | |- |
− | | 5 || | + | | 0x20 |
| + | | 0x8 |
| + | | ImageAddress |
| |- | | |- |
− | | 6 || Bss size | + | | 0x28 |
| + | | 0x8 |
| + | | ImageSize |
| |} | | |} |
| | | |
− | == LoadNrr == | + | = ProgramInfo = |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Word || Value | + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 0 || 0x00000004 | + | | 0x0 |
| + | | 0x1 |
| + | | MainThreadPrio. Arg1 to svcStartProcess |
| |- | | |- |
− | | 1 || 0x8000000C | + | | 0x1 |
| + | | 0x1 |
| + | | DefaultCpuId. Arg2 to svcStartProcess |
| |- | | |- |
− | | 2 || 0x00000001 | + | | 0x2 |
| + | | 0x1 |
| + | | ApplicationType, see [[Process Manager services|here]]. |
| |- | | |- |
− | |- style="border-top: double" | + | | 0x3 |
− | | 0-1 || Pid | + | | 0x1 |
− | |- style="border-top: double"
| + | | Padding |
− | | 0 || "SFCI" | |
| |- | | |- |
− | | 1 || 0x00000001 | + | | 0x4 |
| + | | 0x4 |
| + | | MainThreadStackSize. Arg3 to svcStartProcess |
| |- | | |- |
− | | 2 || Nrr address | + | | 0x8 |
| + | | 0x8 |
| + | | TitleIdRange_Min |
| |- | | |- |
− | | 3 || Nrr size | + | | 0x10 |
− | |} | + | | 0x4 |
− | | + | | ACID [[NPDM#Service Access Control|Service Access Control]] list size |
− | == Initialize ==
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Word || Value
| + | | 0x14 |
| + | | 0x4 |
| + | | ACI0 [[NPDM#Service Access Control|Service Access Control]] list size |
| |- | | |- |
− | | 0 || 0x00000004 | + | | 0x18 |
| + | | 0x4 |
| + | | ACID [[NPDM#FS Access Control|FS Access Control]] buffer size |
| |- | | |- |
− | | 1 || 0x8000000A | + | | 0x1C |
| + | | 0x4 |
| + | | ACI0 [[NPDM#FS Access Control|FS Access Control]] buffer size |
| |- | | |- |
− | | 2 || 0x00000003 | + | | 0x20 |
− | |- style="border-top: double" | + | | <Varies> |
− | | 0-1 || Pid | + | | ACID [[NPDM#Service Access Control|Service Access Control]] list |
| |- | | |- |
− | | 2 || Process handle (0xFFFF8001) | + | | <Varies> |
− | |- style="border-top: double" | + | | <Varies> |
− | | 0 || "SFCI" | + | | ACI0 [[NPDM#Service Access Control|Service Access Control]] list |
| |- | | |- |
− | | 1 || 0x00000004 | + | | <Varies> |
| + | | <Varies> |
| + | | ACID [[NPDM#FS Access Control|FS Access Control]] buffer |
| |- | | |- |
− | | 2 || Always 0. | + | | <Varies> |
| + | | <Varies> |
| + | | ACI0 [[NPDM#FS Access Control|FS Access Control]] |
| |} | | |} |
| + | |
| + | [[Category:Services]] |