IPC: Difference between revisions

Dazzozo (talk | contribs)
Dazzozo (talk | contribs)
Line 15: Line 15:
== Services ==
== Services ==


Services are an abstraction of ports that can not be connected to through ConnectToPort, as the underlying port is an anonymous port created by [[Services|service manager]]. Clients are instead expected to open a session using the service manager ("srv:") port command GetServiceHandle. A service is registered with service manager using the command RegisterService.
Services are an abstraction of ports that are managed by service manager. Services cannot be connected to through svcConnectToPort, as the underlying port is a private port. The service name is instead entirely handled by service manager, and the kernel is not aware of it. Clients are instead expected to open a session to a service using the "srv:" port command [[SRV:GetServiceHandle|GetServiceHandle]]. The client process must pass an access permission check for each service (by name) that it attempts to request a session with. These permissions are granted in the "service access control" of the title's [[NCCH/Extended Header#ARM11 Local System Capabilities|extended header]]. A service is registered with service manager using the command [[SRV:RegisterService|RegisterService]].
 
The majority of 3DS inter-process communication is implemented as services.


= Command Structure =
= Command Structure =