libnx/nx/include/switch/services/pm.h

99 lines
2.9 KiB
C

/**
* @file pm.h
* @brief Process management (pm*) service IPC wrapper.
* @author plutoo
* @author yellows8
* @author mdbell
* @copyright libnx Authors
*/
#pragma once
#include "../types.h"
#include "../kernel/event.h"
#include "../services/sm.h"
typedef enum {
PmLaunchFlag_None = 0,
///< PmLaunchFlag_* should be used on 5.0.0+.
PmLaunchFlag_SignalOnExit = (1 << 0),
PmLaunchFlag_SignalOnStart = (1 << 1),
PmLaunchFlag_SignalOnCrash = (1 << 2),
PmLaunchFlag_SignalOnDebug = (1 << 3),
PmLaunchFlag_StartSuspended = (1 << 4),
PmLaunchFlag_DisableAslr = (1 << 5),
///< PmLaunchFlagOld_* should be used on 1.0.0-4.1.0.
PmLaunchFlagOld_SignalOnExit = (1 << 0),
PmLaunchFlagOld_StartSuspended = (1 << 1),
PmLaunchFlagOld_SignalOnCrash = (1 << 2),
PmLaunchFlagOld_DisableAslr = (1 << 3),
PmLaunchFlagOld_SignalOnDebug = (1 << 4),
///< PmLaunchFlagOld_SignalOnStart was added in 2.0.0.
PmLaunchFlagOld_SignalOnStart = (1 << 5),
} PmLaunchFlag;
typedef enum {
PmProcessEvent_None = 0,
PmProcessEvent_Exit = 1,
PmProcessEvent_Start = 2,
PmProcessEvent_Crash = 3,
PmProcessEvent_DebugStart = 4,
PmProcessEvent_DebugBreak = 5,
} PmProcessEvent;
typedef struct {
PmProcessEvent event;
u64 process_id;
} PmProcessEventInfo;
typedef enum {
PmBootMode_Normal = 0,
PmBootMode_Maintenance = 1,
PmBootMode_SafeMode = 2,
} PmBootMode;
Result pmdmntInitialize(void);
void pmdmntExit(void);
Service* pmdmntGetServiceSession(void);
Result pminfoInitialize(void);
void pminfoExit(void);
Service* pminfoGetServiceSession(void);
Result pmshellInitialize(void);
void pmshellExit(void);
Service* pmshellGetServiceSession(void);
Result pmbmInitialize();
void pmbmExit();
Service* pmbmGetServiceSession(void);
Result pmdmntGetDebugProcesses(u32* out_count, u64* out_pids, size_t max_pids);
Result pmdmntStartProcess(u64 pid);
Result pmdmntGetTitlePid(u64* pid_out, u64 title_id);
Result pmdmntEnableDebugForTitleId(Handle* handle_out, u64 title_id);
Result pmdmntGetApplicationPid(u64* pid_out);
Result pmdmntEnableDebugForApplication(Handle* handle_out);
Result pmdmntDisableDebug(void);
Result pminfoGetTitleId(u64* title_id_out, u64 pid);
Result pmshellLaunchProcess(u32 launch_flags, u64 titleID, u64 storageID, u64 *pid);
Result pmshellTerminateProcessByProcessId(u64 processID);
Result pmshellTerminateProcessByTitleId(u64 titleID);
Result pmshellGetProcessEvent(Event* out); // Autoclear for pmshellProcessEvent is always true.
Result pmshellGetProcessEventInfo(PmProcessEventInfo* out);
Result pmshellFinalizeDeadProcess(u64 pid);
Result pmshellClearProcessExceptionOccurred(u64 pid);
Result pmshellNotifyBootFinished(void);
Result pmshellGetApplicationPid(u64* pid_out);
Result pmshellBoostSystemMemoryResourceLimit(u64 boost_size);
Result pmshellBoostSystemThreadResourceLimit(void);
Result pmbmGetBootMode(PmBootMode *out);
Result pmbmSetMaintenanceBoot(void);