Difference between revisions of "RO services"
Line 1: | Line 1: | ||
− | Prior to 3.0.0, ro was included as part of [[ | + | Prior to 3.0.0, ro was included as part of [[Loader_services]]. Despite the separation, the service name ldr:ro is retained to maintain compatibility with old games. |
= ldr:ro, ro:1 = | = ldr:ro, ro:1 = | ||
Line 6: | Line 6: | ||
[3.0.0+] This is "nn::ro::detail::IRoInterface". | [3.0.0+] This is "nn::ro::detail::IRoInterface". | ||
− | [7.0.0+] ro:1 was added | + | [7.0.0+] ro:1 was added and is also "nn::ro::detail::IRoInterface". |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 12: | Line 12: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || [[# | + | | 0 || [[#LoadModule]] |
|- | |- | ||
− | | 1 || | + | | 1 || [[#UnloadModule]] |
|- | |- | ||
− | | 2 || [[# | + | | 2 || [[#RegisterModuleInfo]] |
|- | |- | ||
− | | 3 || | + | | 3 || [[#UnregisterModuleInfo]] |
|- | |- | ||
| 4 || [[#Initialize]] | | 4 || [[#Initialize]] | ||
|- | |- | ||
− | | 10 || [7.0.0+] [[# | + | | 10 || [7.0.0+] [[#RegisterModuleInfo2]] |
|} | |} | ||
− | == | + | == LoadModule == |
− | + | Takes a PID-descriptor, 5 input u64s ('''client_pid_deprecated''', '''nro_address''', '''nro_size''', '''bss_address''' and '''bss_size'''). Returns an output u64 ('''out_address'''). | |
− | + | ||
− | + | == UnloadModule == | |
− | + | Takes a PID-descriptor and 2 input u64s ('''client_pid_deprecated''' and '''nro_address'''). | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == | + | == RegisterModuleInfo == |
− | + | Takes a PID-descriptor and 3 input u64s ('''client_pid_deprecated''', '''nrr_address''' and '''nrr_size'''). | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
[7.0.0+] [[NRR|NrrKind]] must be 0 (User) for this function to succeed. | [7.0.0+] [[NRR|NrrKind]] must be 0 (User) for this function to succeed. | ||
+ | |||
+ | == UnregisterModuleInfo == | ||
+ | Takes a PID-descriptor and 2 input u64s ('''client_pid_deprecated''' and '''nrr_address'''). | ||
== Initialize == | == Initialize == | ||
+ | Takes PID-descriptor, a process handle and an input u64 ('''client_pid_deprecated'''). | ||
+ | |||
+ | == RegisterModuleInfo2 == | ||
+ | Takes a PID-descriptor, a process handle and 3 input u64s ('''client_pid_deprecated''', '''nrr_address''' and '''nrr_size'''). | ||
+ | |||
+ | First, this validates that the pid descriptor matches the pid for the process handle sent to this->Initialize() earlier. Then, this calls the same function as LoadNrr, except using the passed process handle instead of the one sent to Initialize. | ||
+ | |||
+ | When called from an ro:1 session, [[NRR|NrrKind]] must be 1 (JitPlugin). When called from ldr:ro session, [[NRR|NrrKind]] must be 0 (User). | ||
+ | |||
+ | = ro:dmnt = | ||
+ | This is "nn::ro::detail::IDebugMonitorInterface". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
− | ! | + | ! Cmd || Name |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | 0 || [[#GetProcessModuleInfo]] |
|} | |} | ||
− | == | + | == GetProcessModuleInfo == |
− | + | Same as [[#Loader_services|GetProcessModuleInfo]] from [[Loader_services#ldr:dmnt|ldr:dmnt]]. | |
− | |||
− | |||
− | |||
− | |||
[[Category:Services]] | [[Category:Services]] |
Revision as of 20:07, 22 February 2020
Prior to 3.0.0, ro was included as part of Loader_services. Despite the separation, the service name ldr:ro is retained to maintain compatibility with old games.
ldr:ro, ro:1
[1.0.0-2.3.0] This is "nn::ldr::detail::IRoInterface"
[3.0.0+] This is "nn::ro::detail::IRoInterface".
[7.0.0+] ro:1 was added and is also "nn::ro::detail::IRoInterface".
Cmd | Name |
---|---|
0 | #LoadModule |
1 | #UnloadModule |
2 | #RegisterModuleInfo |
3 | #UnregisterModuleInfo |
4 | #Initialize |
10 | [7.0.0+] #RegisterModuleInfo2 |
LoadModule
Takes a PID-descriptor, 5 input u64s (client_pid_deprecated, nro_address, nro_size, bss_address and bss_size). Returns an output u64 (out_address).
UnloadModule
Takes a PID-descriptor and 2 input u64s (client_pid_deprecated and nro_address).
RegisterModuleInfo
Takes a PID-descriptor and 3 input u64s (client_pid_deprecated, nrr_address and nrr_size).
[7.0.0+] NrrKind must be 0 (User) for this function to succeed.
UnregisterModuleInfo
Takes a PID-descriptor and 2 input u64s (client_pid_deprecated and nrr_address).
Initialize
Takes PID-descriptor, a process handle and an input u64 (client_pid_deprecated).
RegisterModuleInfo2
Takes a PID-descriptor, a process handle and 3 input u64s (client_pid_deprecated, nrr_address and nrr_size).
First, this validates that the pid descriptor matches the pid for the process handle sent to this->Initialize() earlier. Then, this calls the same function as LoadNrr, except using the passed process handle instead of the one sent to Initialize.
When called from an ro:1 session, NrrKind must be 1 (JitPlugin). When called from ldr:ro session, NrrKind must be 0 (User).
ro:dmnt
This is "nn::ro::detail::IDebugMonitorInterface".
Cmd | Name |
---|---|
0 | #GetProcessModuleInfo |
GetProcessModuleInfo
Same as GetProcessModuleInfo from ldr:dmnt.