aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Pm/IDebugMonitorInterface.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Pm/IDebugMonitorInterface.cs')
-rw-r--r--Ryujinx.HLE/HOS/Services/Pm/IDebugMonitorInterface.cs25
1 files changed, 24 insertions, 1 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Pm/IDebugMonitorInterface.cs b/Ryujinx.HLE/HOS/Services/Pm/IDebugMonitorInterface.cs
index 06c11943..4b0df9b7 100644
--- a/Ryujinx.HLE/HOS/Services/Pm/IDebugMonitorInterface.cs
+++ b/Ryujinx.HLE/HOS/Services/Pm/IDebugMonitorInterface.cs
@@ -1,8 +1,31 @@
-namespace Ryujinx.HLE.HOS.Services.Pm
+using Ryujinx.HLE.HOS.Ipc;
+using Ryujinx.HLE.HOS.Kernel;
+using Ryujinx.HLE.HOS.Kernel.Common;
+using Ryujinx.HLE.HOS.Kernel.Process;
+
+namespace Ryujinx.HLE.HOS.Services.Pm
{
[Service("pm:dmnt")]
class IDebugMonitorInterface : IpcService
{
public IDebugMonitorInterface(ServiceCtx context) { }
+
+ [CommandHipc(65000)]
+ // AtmosphereGetProcessInfo(os::ProcessId process_id) -> sf::OutCopyHandle out_process_handle, sf::Out<ncm::ProgramLocation> out_loc, sf::Out<cfg::OverrideStatus> out_status
+ public ResultCode GetProcessInfo(ServiceCtx context)
+ {
+ ulong pid = context.RequestData.ReadUInt64();
+
+ KProcess process = KernelStatic.GetProcessByPid(pid);
+
+ if (context.Process.HandleTable.GenerateHandle(process, out int processHandle) != KernelResult.Success)
+ {
+ throw new System.Exception("Out of handles!");
+ }
+
+ context.Response.HandleDesc = IpcHandleDesc.MakeCopy(processHandle);
+
+ return ResultCode.Success;
+ }
}
} \ No newline at end of file