Difference between revisions of "Services"
Line 28: | Line 28: | ||
| This returns the notificationID which was triggered, if any(see GetProcSemaphore). | | This returns the notificationID which was triggered, if any(see GetProcSemaphore). | ||
|} | |} | ||
+ | |||
+ | ==Service Manager Process-Manager Port "srv:pm"== | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Command Header, prior to [[7.0.0-13]] | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x04030082 | ||
+ | | (u32 procid, u32 wordsz, <nowiki>((wordsz<<16) | 2)</nowiki>, serviceaccesscontrol*) Register. | ||
+ | |- | ||
+ | | 0x04040040 | ||
+ | | (u32 procid) Unregister. | ||
+ | |} | ||
+ | |||
+ | The Register command registers a process with the service-manager, which includes registering the serviceaccesscontrol for the process which normally originates from the [[NCCH/Extended_Header|exheader]]. | ||
+ | |||
+ | Prior to to [[7.0.0-13]], the commands listed for "srv:" were also accessible under this port with the same command-headers. Starting with [[7.0.0-13]], the commandIDs for these "srv:pm" commands were changed. "srv:pm" was originally vulnerable, this was fixed with [[7.0.0-13]], see [[3DS_exploits|here]]. Originally any process could use "srv:pm", however starting with [[7.0.0-13]] this was restricted to a maximum of 1 session. The only system title which uses "srv:pm" is the [[Process_Manager_Services|Process Manager]]. | ||
==Notifications== | ==Notifications== |
Revision as of 21:05, 6 July 2014
Handles for services are retrieved from the service manager port, "srv:". Services are an abstraction of ports, they operate the same way except regular ports can have their handles retrieved directly from a SVC(svcConnectToPort).
Service Manager Port "srv:"
Command Header | Description |
---|---|
0x00010002 | Initialize |
0x00020000 | GetProcSemaphore (the handle from this gets signaled when notifications for this process gets triggered) |
0x00030100 | RegisterService (8-byte servicename, u32 strlen, u32 flags?) |
0x000400C0 | UnregisterService (8-byte servicename, u32 strlen) |
0x00050100 | GetServiceHandle (same input as RegisterService) |
0x00090040 | IsRegistered This enables the specified notificationID for the current process. |
0x000B0000 | This returns the notificationID which was triggered, if any(see GetProcSemaphore). |
Service Manager Process-Manager Port "srv:pm"
Command Header, prior to 7.0.0-13 | Description |
---|---|
0x04030082 | (u32 procid, u32 wordsz, ((wordsz<<16) | 2), serviceaccesscontrol*) Register. |
0x04040040 | (u32 procid) Unregister. |
The Register command registers a process with the service-manager, which includes registering the serviceaccesscontrol for the process which normally originates from the exheader.
Prior to to 7.0.0-13, the commands listed for "srv:" were also accessible under this port with the same command-headers. Starting with 7.0.0-13, the commandIDs for these "srv:pm" commands were changed. "srv:pm" was originally vulnerable, this was fixed with 7.0.0-13, see here. Originally any process could use "srv:pm", however starting with 7.0.0-13 this was restricted to a maximum of 1 session. The only system title which uses "srv:pm" is the Process Manager.
Notifications
ID | Description |
---|---|
0x100 | This indicates that all processes must terminate: power-off, reboot, or FIRM-launch. |
0x204 | This indicates that the HOME button was pressed. |