forked from Mirror/Ryujinx
139a930407
* Implement `GetTitleId` Fixes #2516 * Null check + Proper result code * Better comment * Implement `GetApplicationProcessId` * Add TODOs * Update Ryujinx.HLE/HOS/Services/Pm/IInformationInterface.cs Co-authored-by: Ac_K <Acoustik666@gmail.com> * Update Ryujinx.HLE/HOS/Services/Pm/IDebugMonitorInterface.cs Co-authored-by: Ac_K <Acoustik666@gmail.com> * Remove new function from KernelStatic Co-authored-by: Ac_K <Acoustik666@gmail.com>
49 lines
No EOL
1.6 KiB
C#
49 lines
No EOL
1.6 KiB
C#
using Ryujinx.HLE.HOS.Ipc;
|
|
using Ryujinx.HLE.HOS.Kernel;
|
|
using Ryujinx.HLE.HOS.Kernel.Process;
|
|
using Ryujinx.Horizon.Common;
|
|
|
|
namespace Ryujinx.HLE.HOS.Services.Pm
|
|
{
|
|
[Service("pm:dmnt")]
|
|
class IDebugMonitorInterface : IpcService
|
|
{
|
|
public IDebugMonitorInterface(ServiceCtx context) { }
|
|
|
|
[CommandHipc(4)]
|
|
// GetProgramId() -> sf::Out<ncm::ProgramId> out_process_id
|
|
public ResultCode GetApplicationProcessId(ServiceCtx context)
|
|
{
|
|
// TODO: Not correct as it shouldn't be directly using kernel objects here
|
|
foreach (KProcess process in context.Device.System.KernelContext.Processes.Values)
|
|
{
|
|
if (process.IsApplication)
|
|
{
|
|
context.ResponseData.Write(process.Pid);
|
|
|
|
return ResultCode.Success;
|
|
}
|
|
}
|
|
|
|
return ResultCode.ProcessNotFound;
|
|
}
|
|
|
|
[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) != Result.Success)
|
|
{
|
|
throw new System.Exception("Out of handles!");
|
|
}
|
|
|
|
context.Response.HandleDesc = IpcHandleDesc.MakeCopy(processHandle);
|
|
|
|
return ResultCode.Success;
|
|
}
|
|
}
|
|
} |