Changes

Jump to navigation Jump to search
2,062 bytes added ,  18:07, 14 April 2020
no edit summary
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]]

Navigation menu