Difference between revisions of "Loader services"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 26: Line 26:
  
 
== GetProgramInfo ==
 
== GetProgramInfo ==
Takes a TitleId + StorageId, writes output to a C descriptor buffer.
+
Takes a TitleId + StorageId and writes output to a C descriptor buffer as follows:
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0
 +
| 0x4
 +
|
 +
|-
 +
| 0x4
 +
| 0x8
 +
|
 +
|-
 +
| 0x8
 +
| 0x8
 +
| Title id
 +
|-
 +
| 0x10
 +
| 0x4
 +
| ACID [[NPDM#Service Access Control|Service Access Control]] list size
 +
|-
 +
| 0x14
 +
| 0x4
 +
| ACI0 [[NPDM#Service Access Control|Service Access Control]] list size
 +
|-
 +
| 0x18
 +
| 0x4
 +
| ACID [[NPDM#FS Access Control|FS Access Control]] buffer size
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| ACI0 [[NPDM#FS Access Control|FS Access Control]] buffer size
 +
|-
 +
| 0x20
 +
| <Varies>
 +
| ACID [[NPDM#Service Access Control|Service Access Control]] list
 +
|-
 +
| <Varies>
 +
| <Varies>
 +
| ACI0 [[NPDM#Service Access Control|Service Access Control]] list
 +
|-
 +
| <Varies>
 +
| <Varies>
 +
| ACID [[NPDM#FS Access Control|FS Access Control]] buffer
 +
|-
 +
| <Varies>
 +
| <Varies>
 +
| ACI0 [[NPDM#FS Access Control|FS Access Control]]
 +
|}
  
 
== RegisterTitle ==
 
== RegisterTitle ==

Revision as of 18:12, 16 July 2017

ldr:dmnt

Cmd Name
0
1
2

ldr:pm

Cmd Name
0 CreateProcess
1 #GetProgramInfo
2 #RegisterTitle
3 #UnregisterTitle

GetProgramInfo

Takes a TitleId + StorageId and writes output to a C descriptor buffer as follows:

Offset Size Description
0 0x4
0x4 0x8
0x8 0x8 Title id
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

RegisterTitle

Takes a TitleId + StorageId, returns an index.

UnregisterTitle

Takes the index from #RegisterTitle.

ldr:shel

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

Cmd Name
0 #LoadNro
1 UnloadNro
2 #LoadNrr
3 UnloadNrr
4 #Initialize

LoadNro

Word Value
0 0x00000004
1 0x80000012
2 0x00000001
0-1 Pid
0 "SCFI"
1 0x00000000
2 Always 0.
3 Nro heap address
4 Nro size
5 Bss backing heap address
6 Bss size

LoadNrr

Word Value
0 0x00000004
1 0x8000000E
2 0x00000001
0-1 Pid
0 "SFCI"
1 0x00000002
2 Always 0.
3 Nrr address
4 Nrr size

Initialize

Word Value
0 0x00000004
1 0x8000000A
2 0x00000003
0-1 Pid
2 Process handle (0xFFFF8001)
0 "SFCI"
1 0x00000004
2 Always 0.