Process Manager
Module
Version |
World |
Privilege
|
1.69-3.60 |
Non-secure |
Kernel
|
Libraries
Known NIDs
Types
typedef SceUInt32 SceKernelProcessType;
#define SCE_KERNEL_PROCESS_TYPE_FULL_GAME 0x01010001
#define SCE_KERNEL_PROCESS_TYPE_MINI_APPLICATION 0x02010001
#define SCE_KERNEL_PROCESS_TYPE_SHELL 0x04020102
#define SCE_KERNEL_PROCESS_TYPE_KERNEL 0x10030103
#define SCE_KERNEL_PROCESS_CURRENT_PROCESS_BUDGET 0
typedef SceUInt32 SceKernelBudgetType;
#define SCE_KERNEL_BUDGET_TYPE_FULL_GAME 0x1000000
#define SCE_KERNEL_BUDGET_TYPE_SHELL 0x4000000
#define SCE_KERNEL_BUDGET_TYPE_KERNEL 0x5000000
#define SCE_KERNEL_CPU_AFFINITY_FLAG_SYSTEM_CORE 0
#define SCE_KERNEL_CPU_AFFINITY_FLAG_ALL_USER 8
typedef struct SceKernelProcessInfo { // size is 0x24 or 0x4C on FW 0.931, 0xE8 on FW 3.60
SceSize size; // Size of this structure
SceUID pid; // Process ID
int unk_08;
int unk_0C;
int status; // ex: suspend = 0x11.
SceUID ppid; // Parent process ID
SceUID unk_18;
int unk_1C; // ex: 7
int unk_20; // ex: 7F
SceUID modid;
void *unk28; // entry point?
char name[0x1C]; // Process name
int unk4C;
void *unk50;
void *unk54;
SceUID unk58;
int unk5C; // ex: -1
int unk60;
int unk64; // ex: 0x32
int unk68;
int unk6C;
int unk70;
void *unk74[4 * 5 + 1];
int unk78[8];
} SceKernelProcessInfo;
typedef struct SceKernelProcessModuleInfo { // size is 0x24
SceUID pid;
SceModuleLibraryExportInfo_t *lib_export_info;
SceUID data_0x08; // uid?
SceKernelModuleImportNonlinkedInfo_t *import_nonlinked_list; // allocated by sceKernelAlloc
SceKernelModuleInfoObjBase_t *module_list;
SceUID proc_main_module_id;
uint16_t proc_module_count;
uint16_t inhibit_state;
void *data_0x1C;
int cpu_addr;
} SceKernelProcessModuleInfo;
typedef struct SceKernelBudgetInfo { // size is 0x480 on FW 3.60
SceSize size; // Size of this structure
SceUID pid;
char name[0x20];
SceUInt32 num; // 0x28
char name2[0x20]; // 0x2C
char some_struct_B0[0xB0]; // 0x4C
char unk[0x35C];
} SceKernelBudgetInfo;
typedef struct SceKernelProcessOpt { // size is 0x14 or 0x1C on FW 0.931, 0x20 on FW 0.990, 0x40 on FW 3.60
SceSize size; // Size of this structure
SceUInt32 unk_4;
SceUInt32 cpuAffinityMask;
SceUInt32 initPriority;
SceSize stackSize;
SceUInt32 unk_14;
SceUInt32 budgetId;
SceUInt32 unk_1C;
} SceKernelProcessOpt;
typedef struct SceKernelProcessOpt_360 { // size is 0x40
SceSize size; // Size of this structure
uint32_t some_size;
int unk_0x08;
int unk_0x0C;
int unk_0x10;
int unk_0x14;
SceUID unk_0x18;
SceUID ppid;
int unk_0x20;
int unk_0x24;
const void *klicense;
SceSize file_open_max_num;
SceSize dir_open_max_level;
int unk_0x34;
int unk_0x38;
int unk_0x3C; // some count
} SceKernelProcessOpt_360;
typedef struct SceKernelBootParam { // size is up to 0x100
SceUInt32 unk_0; // ex: 0, 1
SceUInt32 cpuAffinityMask; // ex: 0, 2, 8
SceUInt32 initPriority; // ex: 0
SceSize stackSize; // ex: 0x4000, 0x8000
SceUInt32 unk_10; // ex: 0, 0x12
SceUInt32 budgetId; // ex: 0, 2, 3, 0xC
SceUInt32 unk_1C;
} SceKernelBootParam;
typedef struct SceKernelProcessParam {
char[4] magic; // "PSP2"
SceUInt32 unk_4;
SceUInt32 unk_8;
SceUInt32 unk_SceLibKernel_9F793F84; // return value of SceLibKernel_9F793F84 and used by SceShell for PSN auth
} SceKernelProcessParam;
typedef struct SceLibkernelAddresses { // size is 0x1C on FW 3.60
SceSize size; // Size of this structure
int (* sceKernelExitThread)(int a1);
int (* sceKernelExitDeleteThread)(int a1);
int (* _sceKernelExitCallback)();
void *unk_cb_0x10;
int *pStackGuard1;
int *pStackGuard2;
} SceLibkernelAddresses;
typedef unsigned long long SceKernelSysClock;
typedef struct _SceKernelCallbackListEntry {
struct _SceKernelCallbackListEntry* next;
SceUID callback_uid;
} SceKernelCallbackListEntry;
// Temporary name was SceProcessmgrInfoInternal, SceProcessObj
typedef struct _SceUIDProcessObject { // size is 0x4E0 on FW 3.60
//This is SceObjectBase
SceKernelObject* process_kobj; // Comes from scePUIDKernelCreateWithAttrForKernel
uint32_t unk4;
uint32_t unk8;
void* breakpoints_ctx; // pointer to 0x60 bytes structure - only present if dipsw 0xE4 is set
int unk10;
SceUID process_lock_sema; // "SceKernelProcessmgrProcLock", semaphore created with attribute 0x8000, max count = init count = 1
SceUID process_event_flag; // "SceKernelProcessmgrProc", event flag with attribute ATTR_MULTI | 0x8000, initial pattern = 0x10000 - LSB is set near the end of CreateProcess
SceUID event_lock_sema; // "SceKernelProcessEventLock", semaphore created with attribute 0x8000, max count = init count = 4
SceKernelSysClock some_time_20;
int32_t unk28; // maybe unsigned
int32_t unk2C; // maybe unsigned
int unk30;
int unk34;
int unk38;
unsigned unk3C; // Set to 0x20001 if 0x80000000 is set in SceKernelCreateProcessOpt.flags, else ANDed with 0xFFFFFF00 then ORed with 1 - if (unk3C & 0xFF), added process object added to a "to be destroyed" linked list to be cleaned up by a resident thread on process deletion, else process object destructor is called
uint32_t process_type; // Value of the process_type argument passed to sceKernelCreateProcess
uint32_t process_creation_flags; // Value of the opt->flags value passed to sceKernelCreateProcess (0 if NULL)
SceKernelObject* entry_heap_obj; // Result of sceUIDtoObject(entry_heap_uid);
SceUID entry_heap_uid; // Result of sceUIDCreateEntryHeapForKernel
SceUID unk50;
uint32_t affinity_mask; // Seems to be bit X -> core X
uint32_t unk58; // some atomic global variable related to affinity_mask
SceUID address_space_uid; // Result of sceKernelCreateAddressSpaceForKernel
SceKernelObject* address_space_obj; // Result of sceGUIDGetObjectForDriver(address_space_uid)
ScePID process_id; // Result of scePUIDKernelCreateWithAttrForKernel(SceUIDProcessClass, ...)
ScePID parent_process_id; // PID of caller to sceKernelCreateProcess, can be overridden in SceKernelCreateProcessOpt
SceUID main_thread_uid; // UID of the first thread created in process
SceUID unk70;
void* partition_budget_thing; // Pointer to 0x74 structure related to budgets and partitions - depends on process type
SceUID partition_budget_thing_uid; // Comes from a field in struct above
int32_t unk7C; // maybe unsigned
SceUID unique_heap_uid; // "unique: %s", variable size, type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_10C0D006
SceUID kpls_heap_uid; // "kpls: %s", 0x40000 size, allocated in kpls memblock
SceUID CDialog_heap_uid; // "CDialog: %s", 0x1000 size, type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_CDIALOG
SceUID tool_heap_uid; // "tool: %s", 0xF000/0x7F000 size, type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_TOOL_RW, only created if dipsw 0xD2 is enabled
SceUID kpls_memblock_uid; // "kpls: %s", 0x40000 size, type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW
int32_t unk94; // maybe unsigned
int32_t unk98; // maybe unsigned - set to 0x7F
SceKernelModuleProcInfo_t* proc_module_info;
int32_t unkA0; // maybe unsigned
int8_t[0x10] random_data; // Filled using sceMt19937GlobalUIntInRangeForDriver, then SceKernelUtilsForDriver_B55C69B7 called on it
uint32_t unkA4;
SceSelfAuthInfo self_auth_info; // klicensee is set to 0 unless specified in SceKernelCreateProcessOpt (in which case .Secret.SharedSecret3_0 is set to 0x10) - passed to sceKernelLoadProcessImageForKernel
SceLoadProcessParam load_process_param;
int32_t unk1E4; // maybe unsigned
int32_t unk1E8; // maybe unsigned
int32_t unk1EC; // maybe unsigned
int32_t unk1F0; // maybe unsigned
int32_t unk1F4; // maybe unsigned
int32_t unk1F8; // maybe unsigned
int32_t unk1FC; // maybe unsigned
int unk200;
int32_t unk204; // maybe unsigned
void* unk208[0x20]; // [3] (unk214) is "display_info" (size maybe 0x1D0-0x1D8), [4] (unk218) size may be 0x50-0x58, [23] (unk264) size may be 0x24-0x28
void* bkpt_ctx_field58; // Pointer to breakpoints_ctx->unk58
int unk28C;
int unk290;
int32_t unk294; // maybe unsigned
int32_t unk298; // maybe unsigned
int32_t unk29C; // maybe unsigned
int32_t unk2A0; // maybe unsigned
int32_t unk2A4; // maybe unsigned
void* destruction_ll_next; // pointer to next entry in "to be destroyed" process list?
void* destruction_ll_prev; // pointer to previous entry in "to be destroyed" process list?
int32_t unk2AC; // maybe unsigned
int cpu_intr; // Mutex for sceKernelCpuSuspendIntr - should be at 0x2AC instead of 0x2B0?
int32_t unk2B4; // maybe unsigned
int32_t unk2BC; // maybe unsigned
uint32_t __stack_chk_guard; // Filled using sceMt19937GlobalUIntInRangeForDriver
SceKernelCallbackListEntry* process_delete_cb; // On object deletion, all callbacks in list are called - may be called at other moments
int unk2CC; // 4-byte sized
void *ptr2D0;
void *ptr2D4; // pointer to SceKernelThreadObject->offset_0xb8
SceUInt32 unk2D8; // maybe thread number (not have thread attr 0x4000)
SceUInt32 unk2DC; // maybe thread number (not have thread attr 0x4000)
SceUInt32 unk2E0; // maybe thread number (have thread attr 0x4000)
SceUInt32 unk2E4; // maybe thread number (have thread attr 0x4000)
int8_t unk2E8; // maybe unsigned
int8_t unk2E9; // maybe unsigned
int8_t unk2EA; // maybe unsigned
int8_t unk2EB; // maybe unsigned
int8_t unk2EC; // maybe unsigned
int8_t unk2ED; // maybe unsigned
int8_t unk2EE; // maybe unsigned
int8_t unk2EF; // maybe unsigned
int8_t unk2F0[0x40]; // memset to 0
SceUID unk330;
SceUID unk334;
SceUID unk338;
int32_t unk33C; // maybe unsigned or SceUID
int32_t unk340; // maybe unsigned or SceUID
int32_t unk344; // maybe unsigned or SceUID
int32_t unk348; // maybe unsigned or SceUID
int32_t unk34C; // maybe unsigned or SceUID
SceUID unk350;
int32_t unk354; // maybe unsigned
int32_t unk358; // maybe unsigned
int32_t unk35C; // maybe unsigned
int32_t unk360; // maybe unsigned
int32_t unk364; // maybe unsigned
int32_t unk368; // maybe unsigned
int32_t unk36C; // maybe unsigned
int32_t unk370; // maybe unsigned
int32_t unk374; // maybe unsigned
int32_t unk378; // maybe unsigned
int32_t unk37C; // maybe unsigned
int32_t unk380; // maybe unsigned
int32_t unk384; // maybe unsigned
int32_t unk388; // maybe unsigned
int32_t unk38C; // maybe unsigned
int32_t unk390; // maybe unsigned
int32_t unk394; // maybe unsigned
int32_t unk398; // maybe unsigned
int32_t unk39C; // maybe unsigned
int32_t unk3A0; // maybe unsigned
int32_t unk3A4; // maybe unsigned
int32_t unk3A8; // maybe unsigned
int32_t unk3AC; // maybe unsigned
int32_t unk3B0; // maybe unsigned
int32_t unk3B4; // maybe unsigned
int32_t unk3B8; // maybe unsigned
int32_t unk3BC; // maybe unsigned
int32_t unk3C0; // maybe unsigned
int32_t unk3C4; // maybe unsigned
int32_t unk3C8; // maybe unsigned
int32_t unk3CC; // maybe unsigned
int32_t unk3D0; // maybe unsigned
int32_t unk3D4; // maybe unsigned
int32_t unk3D8; // maybe unsigned
int32_t unk3DC; // maybe unsigned
int32_t unk3E0; // maybe unsigned
int32_t unk3E4; // maybe unsigned
int32_t unk3E8; // maybe unsigned
int32_t unk3EC; // maybe unsigned
int32_t unk3F0; // maybe unsigned
int32_t unk3F4; // maybe unsigned
int32_t unk3F8; // maybe unsigned
SceUID unk3FC;
int32_t unk400; // maybe unsigned
uint32_t unk404; // From SceKernelCreateProcessOpt, ((uint16_t)opt.unk3C << 16) | ((uint16_t)opt.unk38)
int unk408;
int16_t unk40C; // maybe unsigned
int16_t unk40E; // maybe unsigned
uint32_t main_thread_fallback_affinity_mask; // Used if LoadProcessParam affinity mask is 0 - if this is also 0 then mask is taken from budget thing - init to 0x962E8D55 in constructor
void* pPPM0_area;
void* pPPM0_or_PPM1_area;
uint32_t unk41C; // ?related to dipsw 0xD2?
uint32_t unk420;
uint32_t unk424;
uint32_t max_fh_count; // maximum number of file handles the process can have open
uint32_t max_dir_open_level; // maximum depth a file can be opened at?
int32_t unk430; // maybe unsigned
int32_t unk434; // maybe unsigned
struct _SceUIDProcessObjectListEntry {
struct _SceUIDProcessObjectListEntry* next;
struct _SceUIDProcessObjectListEntry* prev;
struct _SceUIDProcessObjectListEntryStruct {
int32_t unk0;
SceUID unk4;
int32_t unk8;
int32_t unkC;
} list_entry_struct[8];
char process_name[0x20];
} list_entry;
} SceUIDProcessObject;
SceProcessmgr
sceKernelLibcTime
Version |
NID
|
0.990-3.60 |
0x0039BE45
|
int sceKernelLibcTime(SceUInt32 *pTime);
sceKernelGetProcessTitleId
Version |
NID
|
0.990 |
not present
|
1.69-3.60 |
0x03A48771
|
sceKernelGetProcessName
Version |
NID
|
0.990 |
not present
|
1.69-3.60 |
0x10C52C95
|
sceKernelIsCDialogAvailable
Version |
NID
|
0.990 |
not present
|
1.69-3.60 |
0x143BC4D6
|
int sceKernelIsCDialogAvailable(void)
sceKernelPowerTick
Version |
NID
|
0.990-3.60 |
0x2252890C
|
int sceKernelPowerTick(SceKernelPowerTickType type);
sceKernelGetProcessParam
Version |
NID
|
0.990-3.60 |
0x2BE3E066
|
SceKernelProcessParam *sceKernelGetProcessParam(void);
_sceKernelGetTimer5Reg
Version |
NID
|
0.990 |
not present
|
1.69-3.60 |
0x2F73D72F
|
sceKernelPowerUnlock
Version |
NID
|
0.990-3.60 |
0x466C0CBD
|
int sceKernelPowerUnlock(SceKernelPowerTickType type);
sceKernelLibcGettimeofday
Version |
NID
|
0.990-3.60 |
0x4B879059
|
int sceKernelLibcGettimeofday(SceUInt64 *a1, SceUInt64 *a2);
_sceKernelRegisterExitAddress
Version |
NID
|
0.931-0.990 |
0x0278DFB7
|
3.60 |
not present
|
Used in SceLibKernel module_start.
int _sceKernelRegisterExitAddress(SceUIntUAddr psceKernelExitThread, SceUIntUAddr psceKernelExitDeleteThread, SceUIntUAddr psceKernelExitCallback);
_sceKernelRegisterLibkernelAddresses
Version |
NID
|
0.990 |
not present
|
1.69-3.60 |
0x56C2E8FF
|
int _sceKernelRegisterLibkernelAddresses(SceLibkernelAddresses *pAddresses);
sceKernelRegisterProcessTerminationCallback
Version |
NID
|
0.990-3.65 |
0x5EC77870
|
// cbId can be obtained using sceKernelCreateCallback
SceInt32 sceKernelRegisterProcessTerminationCallback(SceUID pid, SceUID cbId);
sceKernelUnregisterProcessTerminationCallback
Version |
NID
|
0.990-3.65 |
0x973A4527
|
// Pass same cbId as previously provided to sceKernelRegisterProcessTerminationCallback
SceInt32 sceKernelUnregisterProcessTerminationCallback(SceUID pid, SceUID cbId);
sceKernelPowerLock
Version |
NID
|
0.931-3.60 |
0x7AA73378
|
int sceKernelPowerLock(SceKernelPowerTickType type);
sceKernelGetProcessTimeWideCore
Version |
NID
|
0.990-3.60 |
0x89DA0967
|
SceUInt64 sceKernelGetProcessTimeWideCore(void);
sceKernelLibcClock
Version |
NID
|
0.990-3.60 |
0x9E45DA09
|
SceUInt64 sceKernelLibcClock(void);
_sceKernelExitProcessForUser
Version |
NID
|
0.990-3.60 |
0xC053DC6B
|
int _sceKernelExitProcessForUser(int status);
sceKernelGetStdin
Version |
NID
|
0.931-3.60 |
0xC1727F59
|
Returns the fd of the current process stdin.
SceUID sceKernelGetStdin(void);
sceKernelGetCurrentProcess
Version |
NID
|
1.69-3.60 |
0xCD248267
|
Wrapper to sceKernelGetProcessIdForDriver.
Returns the process ID.
SceUID sceKernelGetCurrentProcess(void);
sceKernelIsGameBudget
Version |
NID
|
0.990-3.60 |
0xCE0F02F0
|
SceBool sceKernelIsGameBudget(void);
sceKernelGetProcessTimeCore
Version |
NID
|
0.990-3.60 |
0xD37A8437
|
int sceKernelGetProcessTimeCore(SceUInt64 *pTime);
sceKernelGetStdout
Version |
NID
|
0.931-3.60 |
0xE5AA625C
|
Returns the fd of the current process stdout.
SceUID sceKernelGetStdout(void);
sceKernelGetRemoteProcessTime
Version |
NID
|
0.990-3.60 |
0xE6E9FCA3
|
int sceKernelGetRemoteProcessTime(SceUID pid, SceUInt64 *pTime);
sceKernelCallAbortHandler
Version |
NID
|
0.990 |
not present
|
1.69-3.60 |
0xEB6E50BB
|
sceKernelGetProcessTimeLowCore
Version |
NID
|
0.990-3.60 |
0xF5D0D4C6
|
int sceKernelGetProcessTimeLowCore(void);
sceKernelGetStderr
Version |
NID
|
0.931-3.60 |
0xFA5E3ADA
|
Returns the fd of the current process stderr.
SceUID sceKernelGetStderr(void);
sceKernelCDialogSessionClose
Version |
NID
|
0.990 |
not present
|
3.60 |
0xDB4CC1D0
|
sceKernelCDialogSetLeaseLimit
Version |
NID
|
0.990 |
not present
|
3.60 |
0xEC8DDAAD
|
Version |
NID
|
0.990 |
not present
|
3.60 |
0x2D635A00
|
sceKernelLibcGmtime_r
Version |
NID
|
0.990 |
not present
|
3.60 |
0xBCA437CD
|
sceKernelLibcLocaltime_r
Version |
NID
|
0.990 |
not present
|
3.60 |
0x94F041ED
|
sceKernelLibcMktime
Version |
NID
|
0.990 |
not present
|
3.60 |
0x890BDC39
|
SceProcessmgrForDriver
sceKernelGetCurrentProcessIdForDriver
Version |
NID
|
0.931 |
0x3D4C250E
|
3.60 |
not present
|
Returns the current process ID.
Wrapper for SceKernelThreadMgr sceKernelGetProcessIdForKernel.
SceUID sceKernelGetCurrentProcessIdForDriver(void);
sceKernelAllocCurrentProcessHeapForDriver
Version |
NID
|
0.931-3.60 |
0x5468892A
|
void *sceKernelAllocCurrentProcessHeapForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);
sceKernelAllocRemoteProcessHeapForDriver
Version |
NID
|
0.931-3.60 |
0x00B1CA0F
|
void *sceKernelAllocRemoteProcessHeapForDriver(SceUID pid, SceSize size, SceKernelHeapMemoryOpt *pOpt);
sceKernelFreeCurrentProcessHeapForDriver
Version |
NID
|
0.990-3.60 |
0xFC2A424E
|
int sceKernelFreeCurrentProcessHeapForDriver(void *ptr);
sceKernelFreeRemoteProcessHeapForDriver
Version |
NID
|
0.931-3.60 |
0x9C28EA9A
|
int sceKernelFreeRemoteProcessHeapForDriver(SceUID pid, void *ptr);
sceKernelGetProcessInfoForDriver
Version |
NID
|
0.931-3.68 |
0x0AFF3EAE
|
Retrieves process information.
int sceKernelGetProcessInfoForDriver(SceUID pid, SceKernelProcessInfo *pInfo);
sceKernelGetProcessStatusForDriver
Version |
NID
|
0.931-3.60 |
0x65B120B8
|
This function queries the status of a given process. Davee is unsure what exactly the bits represent. It seems 0x10 is related to suspension status, but he's not confident in that assumption.
/**
* @brief Get the status of a given process.
* @param[in] pid The process ID to query.
* @param[out] status The bit field status of the process.
* @return Zero on success, < 0 on error.
*/
int sceKernelGetProcessStatusForDriver(SceUID pid, int *status);
sceKernelSetProcessStatusForDriver
Version |
NID
|
0.931-3.60 |
0x1D0F3185
|
int sceKernelSetProcessStatusForDriver(SceUID pid, SceUInt32 status);
sceKernelIsProcessSuspendingForDriver
Version |
NID
|
0.931-3.60 |
0x0CC5B30C
|
Return whether the process is suspending or not.
int sceKernelIsProcessSuspendingForDriver(SceUID pid);
sceKernelGetProcessTimeLowCoreForDriver
Version |
NID
|
3.60 |
0x02179E12
|
unsigned int sceKernelGetProcessTimeLowCoreForDriver(void);
sceKernelGetProcessTimeWideCoreForDriver
Version |
NID
|
3.60 |
0x82D94BE9
|
uint64_t sceKernelGetProcessTimeWideCoreForDriver(void);
sceKernelGetProcessTimeCoreForDriver
Version |
NID
|
3.60 |
0xEC283166
|
int sceKernelGetProcessTimeCoreForDriver(uint64_t *pTime);
sceKernelRegisterKPLSForDriver
Version |
NID
|
0.940-3.60 |
0x3801D7D6
|
Temp name was sceKernelCreateProcessLocalStorageForDriver.
Return key.
KPLS cannot create more than 32
int sceKernelRegisterKPLSForDriver(const char *name, SceSize size);
sceKernelGetCurrentKPLSForDriver
Version |
NID
|
0.990-3.60 |
0xEE694840
|
Temp name was sceKernelGetProcessLocalStorageAddrForDriver.
void *sceKernelGetCurrentKPLSForDriver(int key);
sceKernelGetRemoteKPLSForDriver
Version |
NID
|
0.931-3.68 |
0xAF80F39C
|
Temp name was sceKernelGetProcessLocalStorageAddrForPidForDriver.
This functions gets Remote Kernel Process Local Storage.
// key: index between 0 and 0x1F
// kpls_addr: pointer to area to store address of remote KPLS
// force_create: if set to true and if KPLS does not exist, it is created
int sceKernelGetRemoteKPLSForDriver(SceUID pid, SceUInt32 key, void **kpls_addr, SceBool force_create);
sceKernelGetRemoteProcessTimeForDriver
Version |
NID
|
3.60 |
0xC074EB31
|
int sceKernelGetRemoteProcessTimeForDriver(SceUID pid, uint64_t *pTime);
sceKernelIsCDialogAvailableForDriver
Version |
NID
|
3.60 |
0x2F6020B7
|
int sceKernelIsCDialogAvailableForDriver(void)
sceKernelIsGameBudgetForDriver
Version |
NID
|
3.60 |
0xF7A8BB25
|
int sceKernelIsGameBudgetForDriver(void);
SceProcessmgrForDriver_C715591F
Version |
NID
|
3.60 |
0xC715591F
|
Called by "sceProcessMgrLaunchAppFor" ?to check?.
int SceProcessmgrForDriver_C715591F(void);
sceKernelGetCompiledSdkVersionByPidForDriver
Version |
NID
|
3.60 |
0xD141C076
|
int sceKernelGetCompiledSdkVersionByPidForDriver(SceUID pid, SceUInt32 *puiSdkVer);
sceKernelRegisterCoredumpHandlerForDriver
Version |
NID
|
3.60 |
0x21A6F0EC
|
int sceKernelRegisterCoredumpHandlerForDriver(void *handler, SceSize size, void *memblock_addr);
sceKernelUnregisterCoredumpHandlerForDriver
Version |
NID
|
3.60 |
0x33B3D026
|
int sceKernelUnregisterCoredumpHandlerForDriver(void);
SceProcessmgrForDriver_5E882B60
Version |
NID
|
0.990 |
0x5E882B60
|
3.60 |
not present
|
Registers some callback.
int SceProcessmgrForDriver_5E882B60(void *cb);
SceProcessmgrForDriver_2CEB1C7A
Version |
NID
|
0.990 |
not present
|
3.60 |
0x2CEB1C7A
|
Cleans process memory in range with pseudo random values. Both addres and length must be aligned on 4 bytes. Uses SceSysmem#sceXorshift128ForDriver to update each dword in range.
int SceProcessmgrForDriver_2CEB1C7A(SceUID pid, void *pBase, SceSize length);
SceProcessmgrForKernel
sceKernelCreateProcessForKernel
Version |
NID
|
0.931-3.60 |
0x71CF71FD
|
3.65 |
0x68068618
|
Temp name was sceKernelLaunchAppForKernel.
/**
* @brief Create a process
* @param[in] name Usually TitleId of the application.
* @param[in] type Type of the process.
* @param[in] path Path of the SELF.
* @param[in] pOpt Options of the process.
* @return Process ID of the created process on success, < 0 on error.
*/
SceUID sceKernelCreateProcessForKernel(const char* name, SceKernelProcessType type, const char *path, SceKernelProcessOpt *pOpt);
sceKernelStartProcessForKernel
Version |
NID
|
0.931-3.60 |
0x38FB7BCA
|
/**
* @brief Start a process
* @param[in] pid Process ID.
* @param[in] type Type of the process.
* @param[in] argSize Size of the arguments block.
* @param[in] pArgBlock Arguments block.
* @return Return value of the started process on success, < 0 on error.
*/
int sceKernelStartProcessForKernel(SceUID pid, SceKernelProcessType type, SceSize argSize, const void *pArgBlock);
sceKernelStartProcessExtForKernel
Version |
NID
|
0.990-3.60 |
0x36728B16
|
Temp name was sceKernelStartProcess2ForKernel.
Used by SceAppMgr
/**
* @brief Start a process with extended parameters
* @param[in] pid Process ID.
* @param[in] type Type of the process.
* @param[in] argSize Size of the arguments block.
* @param[in] pArgBlock Arguments block.
* @param[in] process module flags. 1:inhibit shared and load libgxm_dbg_es4.suprx Instead of libgxm_es4.suprx
* @return Return value of the started process on success, < 0 on error.
*/
int sceKernelStartProcessExtForKernel(SceUID pid, SceKernelProcessType type, SceSize argSize, const void *pArgBlock, uint32_t flags);
sceKernelSpawnProcessForKernel
Version |
NID
|
0.931-3.60 |
0x31834C49
|
Calls sceKernelCreateProcessForKernel then sceKernelStartProcessForKernel.
/**
* @brief Spawn a process
* @param[in] name Usually TitleId of the application.
* @param[in] type Type of the process.
* @param[in] path Path of the SELF.
* @param[in] argSize Size of the arguments block.
* @param[in] pArgBlock Arguments block.
* @param[in] pOpt Options of the process.
* @return Process ID of the spawned process on success, < 0 on error.
*/
SceUID sceKernelSpawnProcessForKernel(const char *name, SceKernelProcessType type, const char *path, SceSize argSize, const void *pArgBlock, SceKernelProcessOpt *pOpt);
sceKernelSpawnProcessExtForKernel
Version |
NID
|
0.990-3.60 |
0x8F320D2B
|
Calls sceKernelCreateProcessForKernel then sceKernelStartProcessExtForKernel.
/**
* @brief Spawn a process with extended parameters
* @param[in] name Usually TitleId of the application.
* @param[in] type Type of the process.
* @param[in] path Path of the SELF.
* @param[in] argSize Size of the arguments block.
* @param[in] pArgBlock Arguments block.
* @param[in] pOpt Options of the process.
* @param[in] flags Unknown flags.
* @return Process ID of the spawned process on success, < 0 on error.
*/
SceUID sceKernelSpawnProcessExtForKernel(const char *name, SceKernelProcessType type, const char *path, SceSize argSize, const void *pArgBlock, SceKernelProcessOpt *pOpt, SceUInt32 flags);
sceKernelUIDtoProcessForKernel
Version |
NID
|
0.931-3.60 |
0xB9E68092
|
Temp name was sceKernelGetProcessKernelBufForKernel.
Gets the process privileged only buffer.
void *sceKernelUIDtoProcessForKernel(SceUID pid);
sceKernelGetProcessMainThreadForDebuggerForKernel
Version |
NID
|
0.931-3.60 |
0x95F9ED94
|
/**
* @brief Get the main thread for a given process.
* @param[in] pid The process id to query for.
* @return The thread UID on success, else < 0 on error.
*/
SceUID sceKernelGetProcessMainThreadForDebuggerForKernel(SceUID pid);
sceKernelProcessSuspendForLoadpForKernel
Version |
NID
|
0.931 |
0x3EC5FDF4
|
3.60 |
not present
|
/**
* @brief Resume a suspended process.
* @param[in] pid The process to resume.
* @return Zero on success, < 0 on error.
*/
int sceKernelProcessSuspendForLoadpForKernel(SceUID pid);
sceKernelProcessDebugSuspendForKernel
Version |
NID
|
0.990-3.60 |
0x6AECE4CD
|
Temp name was sceKernelSuspendProcessForKernel.
/**
* @brief Suspend a running process.
* @param[in] pid The process to suspend.
* @param[in] status The status to set to the process.
* @return Zero on success, < 0 on error.
*/
int sceKernelProcessDebugSuspendForKernel(SceUID pid, int status);
sceKernelProcessDebugResumeForKernel
Version |
NID
|
0.990-3.60 |
0x080CDC59
|
Temp name was sceKernelResumeProcessForKernel.
/**
* @brief Resume a suspended process.
* @param[in] pid The process to resume.
* @return Zero on success, < 0 on error.
*/
int sceKernelProcessDebugResumeForKernel(SceUID pid);
sceKernelResumeProcessForDebuggerForKernel
Version |
NID
|
0.931-3.60 |
0xB13E3C7B
|
/**
* @brief Resume a suspended process.
* @param[in] pid The process to resume.
* @return Zero on success, < 0 on error.
*/
int sceKernelResumeProcessForDebuggerForKernel(SceUID pid);
sceKernelResumeProcessForKernel
Version |
NID
|
0.931-3.60 |
0xE0A9C9C4
|
/**
* @brief Resume a suspended process.
* @param[in] pid The process to resume.
* @return Zero on success, < 0 on error.
*/
int sceKernelResumeProcessForKernel(SceUID pid);
sceKernelExitProcessForKernel
Version |
NID
|
0.990-3.60 |
0x4CA7DC42
|
int sceKernelExitProcessForKernel(int status);
sceKernelSetProcessSelfAuthInfoForKernel
Version |
NID
|
0.931-0.990 |
0x5ABA2772
|
3.60 |
not present
|
int sceKernelSetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *self_auth_info);
sceKernelGetProcessSelfAuthInfoForKernel
Version |
NID
|
0.931-3.60 |
0xE4C83B0D
|
Temp name was sceKernelGetProcessAuthidForKernel.
SceSelfAuthInfo
type is described in sceKernelSysrootGetProcessSelfAuthInfoForKernel.
int sceKernelGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *self_auth_info);
sceKernelLibcTimeForKernel
Version |
NID
|
3.60 |
0x9E38C556
|
sceKernelLibcGettimeofdayForKernel
Version |
NID
|
3.60 |
0xDE8B8B5E
|
sceKernelGetUIDProcessClassForKernel
Version |
NID
|
3.60 |
0xC6820972
|
3.65 |
0x98AE4BC8
|
Temp name was sceKernelGetClassForUid2ForKernel, sceKernelGetProcessClassForKernel.
SceClass *sceKernelGetUIDProcessClassForKernel(void);
sceKernelKillProcessForDebuggerForKernel
Version |
NID
|
0.931-3.60 |
0x90C27779
|
int sceKernelKillProcessForDebuggerForKernel(SceUID pid);
sceKernelKillProcessForKernel
Version |
NID
|
0.931-3.60 |
0xA1071106
|
3.65 |
0xF388F05C
|
int sceKernelKillProcessForKernel(SceUID pid, int status);
sceKernelGetMMUL1InfoForKernel
Version |
NID
|
0.931-0.990 |
0xC526C6F2
|
3.60 |
not present
|
int sceKernelGetMMUL1InfoForKernel(SceUID pid, const void *addr, void *pInfo);
sceKernelGetMMUL2InfoForKernel
Version |
NID
|
0.931 |
0xE2681221
|
3.60 |
not present
|
int sceKernelGetMMUL2InfoForKernel(SceUID pid, const void *addr, void *pInfo);
sceKernelWaitProcessEndForKernel
Version |
NID
|
0.931-3.60 |
0x0EE2658E
|
int sceKernelWaitProcessEndForKernel(SceUID pid, int *res, SceUInt32 *pTimeout);
sceKernelGetPHWPForKernel
Version |
NID
|
0.931-3.60 |
0xC55BF6C3
|
int sceKernelGetPHWPForKernel(SceUID pid, SceUInt32 a2, int *a3, int *a4);
sceKernelSetPHWPForKernel
Version |
NID
|
0.931-3.60 |
0x54D7B16A
|
int sceKernelSetPHWPForKernel(SceUID pid, int a2, int a3, int a4);
sceKernelGetPHBPForKernel
Version |
NID
|
0.931-3.60 |
0xA9C20202
|
int sceKernelGetPHBPForKernel(SceUID pid, SceUInt32 a2, int *a3, int *a4);
sceKernelSetPHBPForKernel
Version |
NID
|
0.931-3.60 |
0x59FA3216
|
int sceKernelSetPHBPForKernel(SceUID pid, int a2, int a3, int a4);
sceKernelGetProcessAppForKernel
Version |
NID
|
0.931-3.60 |
0x34FA9645
|
int sceKernelGetProcessAppForKernel(SceUID pid);
sceKernelGetProcessParentIdForKernel
Version |
NID
|
0.931-3.60 |
0x3C4D2889
|
// returns the parent process PID
int sceKernelGetProcessParentIdForKernel(SceUID pid);
sceKernelSuspendProcessForDebuggerForKernel
Version |
NID
|
0.931-3.60 |
0x234A80B6
|
/**
* @brief Suspend a running process.
* @param[in] pid The process to suspend.
* @return Zero on success, < 0 on error.
*/
int sceKernelSuspendProcessForDebuggerForKernel(SceUID pid);
sceKernelSuspendProcessForKernel
Version |
NID
|
0.990-3.60 |
0xCF83C23B
|
/**
* @brief Suspend a running process.
* @param[in] pid The process to suspend.
* @param[in] status The status to set to the process.
* @return Zero on success, < 0 on error.
*/
int sceKernelSuspendProcessForKernel(SceUID pid, int status);
sceKernelGetProcessImageForDebuggerForKernel
Version |
NID
|
0.931-0.990 |
0xCF71D9DD
|
Return Process Image on success.
void *sceKernelGetProcessImageForDebuggerForKernel(SceUID pid);
sceKernelProcessAppendForKernel
Version |
NID
|
0.931-0.990 |
0xC4E349D5
|
// if pid2 is not set, current pid is used instead
int sceKernelProcessAppendForKernel(SceUID pid1, SceUID pid2);
sceKernelProcessAssocAppForKernel
Version |
NID
|
0.931-3.60 |
0x76C89783
|
int sceKernelProcessAssocAppForKernel(SceUID pid, int unk_in);
sceKernelCreateBudgetForKernel
Version |
NID
|
0.931-3.60 |
0x05F74BAF
|
typedef struct SceKernelBudgetOpt { // size is 0x18 on FW 0.931-3.60
SceSize size; // Size of this structure
SceBool unk_4; // cdram related
SceSize ddrmain_size;
SceSize main_size;
SceSize cdialog_size; // ddrpcnt
SceSize cdram_size; // or maybe budgetId
} SceKernelBudgetOpt;
int sceKernelCreateBudgetForKernel(const char *appName, SceUInt32 process_type, SceKernelBudgetOpt *pOpt);
sceKernelDeleteBudgetForKernel
Version |
NID
|
0.931-3.60 |
0xE5A60577
|
Delete budget for the current process.
// budget: maybe 0, 1, 2 or 3
int sceKernelDeleteBudgetForKernel(SceUInt32 budget);
sceKernelGetBudgetInfoForDebuggerForKernel
Version |
NID
|
0.990-3.60 |
0xF3C4A83B
|
Uses SceSysmem#SceSysmemForKernel_54E85275 to get a 0xB0 bytes buffer.
int sceKernelGetBudgetInfoForDebuggerForKernel(SceUID pid, SceUInt32 attr, SceKernelBudgetInfo *pInfo);
sceKernelGetProcessModuleInfoForKernel
Version |
NID
|
1.03 |
not present
|
3.60 |
0xC1C91BB2
|
3.65 |
0x3AF6B088
|
SceKernelProcessModuleInfo *sceKernelGetProcessModuleInfoForKernel(SceUID pid);
sceKernelSetProcessModuleInfoForKernel
Version |
NID
|
3.60 |
0x7D8D7885
|
int sceKernelSetProcessModuleInfoForKernel(SceUID pid, SceKernelProcessModuleInfo *pInfo);
SceProcessmgrForKernel_B75FB970
Version |
NID
|
0.990 |
not present
|
3.60 |
0xB75FB970
|
Increments Process UID Reference List counter.
// unk_bool depends of the process type
int SceProcessmgrForKernel_B75FB970(SceUID pid, SceBool unk_bool);
SceProcessmgrForKernel_0A5A2CF1
Version |
NID
|
0.990 |
not present
|
3.60 |
0xB75FB970
|
Decrements Process UID Reference List counter.
// unk_bool depends of the process type
int SceProcessmgrForKernel_0A5A2CF1(SceUID pid, SceBool unk_bool);
sceKernelFreeRemoteProcessKernelHeapForKernel
Version |
NID
|
0.990 |
not present
|
3.60 |
0x41815DF2
|
Requires DIP switch 210. Used to free memory allocated with sceKernelProcessAllocKernelBudgetHeapMemoryForKernel.
int sceKernelFreeRemoteProcessKernelHeapForKernel(SceUID pid, void *ptr);
sceKernelGetProcessBudgetTypeForKernel
Version |
NID
|
0.990 |
not present
|
3.60 |
0x2ABFB6C1
|
SceKernelBudgetType sceKernelGetProcessBudgetTypeForKernel(SceUID pid);
sceKernelProcessAllocKernelBudgetHeapMemoryForKernel
Version |
NID
|
0.990 |
not present
|
3.60 |
0x3C5E2F08
|
Requires DIP switch 210. Free memory with sceKernelFreeRemoteProcessKernelHeapForKernel.
void* sceKernelProcessAllocKernelBudgetHeapMemoryForKernel(SceUID pid, SceSize size);
SceProcessmgrForKernel_C77C2085
Version |
NID
|
0.931-3.60 |
0xC77C2085
|
Gets process_info.AS_uid_maybe from the specified process or from current process if pid = 0.
int SceProcessmgrForKernel_C77C2085(SceUID pid);