3DSにおけるPortとServiceの違い マイナーすぎる3DS備忘録

3DSにはsvcSendSyncRequestというプロセス間通信に使用する関数があります。この関数ではセッションハンドルを用いて他プロセスに処理を頼んだり、情報を取得したりすることができます。このセッションハンドルは、svcConnectToPortまたはsrvGetSessionHandleを用いて取得することが出来ます。svcConnectToPortはSVC(システムコール)で、srvGetSessionHandleはServiceManagerによって提供される関数です。
では、PortとServiceの違いとは何なのでしょうか。

とても簡単に説明すると、ServiceManagerによって管理されているPortをServiceと呼ぶのです。
ServiceManagerはPortを管理するプログラムであり、ServiceManagerに登録されたPortはServiceManagerを介してのみアクセスできます。
ServiceManagerに登録されていないPortの例としては、"srv:"(ServiceManagerそのもの)や"plg:ldr"(Luma3DSのみ)などです。よく使われる"fs:USER"や"hid:USER"などは全てサービスになります。

いかがでしたでしょうか。自分的にはこの違いがずっとわからずモヤモヤしてましたがわかるとなるほどってなりました。

以上