Loader services: Difference between revisions

No edit summary
No edit summary
(32 intermediate revisions by 8 users not shown)
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]]