Difference between revisions of "SceProcessmgr"

From Vita Development Wiki
Jump to navigation Jump to search
(18 intermediate revisions by 3 users not shown)
Line 51: Line 51:
 
int unk08;
 
int unk08;
 
int unk0C;
 
int unk0C;
int unk10;
+
int unk10;             // maybe process state. susspend:0x11.
 
SceUID ppid;            //!< parent process ID
 
SceUID ppid;            //!< parent process ID
 
SceUID unk18;
 
SceUID unk18;
Line 109: Line 109:
  
 
typedef struct SceKernelProcessOpt_360 { // size is 0x40
 
typedef struct SceKernelProcessOpt_360 { // size is 0x40
  SceSize size; // Size of this structure
+
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;
  
  // offset:0x28
+
SceSize dir_open_max_level;
  const void *klicense;
+
int unk_0x34;
 +
int unk_0x38;
 +
int unk_0x3C; // some count
 
} SceKernelProcessOpt_360;
 
} SceKernelProcessOpt_360;
  
Line 142: Line 157:
 
} SceLibkernelAddresses;
 
} SceLibkernelAddresses;
  
typedef struct SceProcessmgrInfoInternal {
+
typedef unsigned long long SceKernelSysClock;
uint32_t sce_rsv[2];
 
uint32_t data_08[2];
 
uint32_t data_10;
 
SceUID data_14;
 
SceUID data_18;
 
SceUID data_1C;
 
uint32_t data_20[4];
 
void *data_30;
 
void *data_34;
 
uint32_t data_38;
 
uint32_t data_3C; // ex:1
 
uint32_t data_40; // ex:1
 
uint32_t data_44; // ex:0x1D0000
 
void *data_48;
 
SceUID data_4C;
 
uint32_t data_50; // ex:0xFFFFFFFF
 
uint32_t data_54; // ex:7
 
uint32_t data_58; // ex:1
 
SceUID data_5C;
 
void *data_60;
 
SceUID this_obj_uid;
 
SceUID data_68;
 
SceUID data_6C;
 
uint32_t data_70; // ex:0xFFFFFFFF
 
void *data_74;
 
SceUID data_78;
 
uint32_t data_7C;
 
SceUID data_80;
 
SceUID data_84; // heap uid for RemoteKPLS?
 
SceUID data_88;
 
SceUID data_8C;
 
SceUID data_90;
 
uint32_t data_94;
 
uint32_t data_98; // ex:0x7F
 
SceKernelModuleProcInfo_t *proc_module_info;
 
uint32_t data_A0; // ex:0x40
 
uint8_t data_A4[0x10]; // rnd data?
 
uint32_t data_B4;
 
SceSelfAuthInfo self_auth_info;
 
 
 
// offset:0x148
 
// {
 
int sys_version;
 
char thread_name[0x20];
 
int thread_priority;
 
SceSize stack_size;
 
uint8_t data_174[0x8];
 
uint8_t data_17C[0x1C];
 
uint8_t data_198[0x4];
 
char process_name[0x20]; // not titleid
 
uint32_t preload_inhibit;
 
void *module_proc_param;
 
// } SceLoadProcessParam; // maybe size is 0x1C4 - 0x148(0x7C)
 
 
 
SceUID data_1C4;
 
SceUID data_1C8;
 
SceUID data_1CC;
 
SceUID data_1D0; // ex:-1
 
SceUID data_1D4; // for user
 
SceUID data_1D8; // for user
 
SceUID data_1DC; // for user
 
  
// offset:0x2B0
+
typedef struct _SceKernelCallbackListEntry {
int cpu_intr;
+
  struct _SceKernelCallbackListEntry* next;
 +
  SceUID callback_uid;
 +
} SceKernelCallbackListEntry;
  
// offset:0x410
+
// Temporary name was SceProcessmgrInfoInternal, SceProcessObj
uint32_t magic1; // 0x962E8D55
+
typedef struct _SceUIDProcessObject { //Size is 0x4E0
 +
  //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 some_atomic_global_var_related_54;
 +
  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 (same NID on 3.60 and 3.65) called on it
 +
  unsigned 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
  
// more
+
  void *ptr2D0;
} SceProcessmgrInfoInternal; // size is 0x4E0
+
  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;
 
</source>
 
</source>
  
Line 314: Line 434:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x0278DFB7
+
| 0.931-0.990 || 0x0278DFB7
 
|-
 
|-
 
| 3.60 || not present
 
| 3.60 || not present
 
|}
 
|}
  
<source lang="C">int _sceKernelRegisterExitAddress(int a1, int a2, int a3);</source>
+
Used in [[SceLibKernel]] module_start.
 +
 
 +
<source lang="C">int _sceKernelRegisterExitAddress(SceUIntUAddr psceKernelExitThread, SceUIntUAddr psceKernelExitDeleteThread, SceUIntUAddr psceKernelExitCallback);</source>
  
 
=== _sceKernelRegisterLibkernelAddresses ===
 
=== _sceKernelRegisterLibkernelAddresses ===
Line 845: Line 967:
 
|-
 
|-
 
| 0.931-3.60 || 0x71CF71FD
 
| 0.931-3.60 || 0x71CF71FD
 +
|-
 +
| 3.65 || 0x68068618
 
|}
 
|}
  
Line 890: Line 1,014:
  
 
Temp name was sceKernelStartProcess2ForKernel.
 
Temp name was sceKernelStartProcess2ForKernel.
 +
 +
Used by [[SceAppMgr]]
  
 
<source lang="C">
 
<source lang="C">
Line 898: Line 1,024:
 
  * @param[in]  argSize Size of the arguments block.
 
  * @param[in]  argSize Size of the arguments block.
 
  * @param[in]  pArgBlock Arguments block.
 
  * @param[in]  pArgBlock Arguments block.
  * @param[in]  flags Unknown flags.
+
  * @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.
 
  * @return      Return value of the started process on success, < 0 on error.
 
  */
 
  */
Line 1,156: Line 1,282:
 
|-
 
|-
 
| 0.931-3.60 || 0xA1071106
 
| 0.931-3.60 || 0xA1071106
 +
|-
 +
| 3.65 || 0xF388F05C
 
|}
 
|}
  
Line 1,441: Line 1,569:
 
|}
 
|}
  
Requires DIP switch 210.
+
Requires DIP switch 210. Used to free memory allocated with [[SceProcessmgr#sceKernelProcessAllocKernelBudgetHeapMemoryForKernel|sceKernelProcessAllocKernelBudgetHeapMemoryForKernel]].
  
 
<source lang="C">int sceKernelFreeRemoteProcessKernelHeapForKernel(SceUID pid, void *ptr);</source>
 
<source lang="C">int sceKernelFreeRemoteProcessKernelHeapForKernel(SceUID pid, void *ptr);</source>
Line 1,467: Line 1,595:
 
|}
 
|}
  
Requires DIP switch 210.
+
Requires DIP switch 210. Free memory with [[SceProcessmgr#sceKernelFreeRemoteProcessKernelHeapForKernel|sceKernelFreeRemoteProcessKernelHeapForKernel]].
 +
 
 +
<source lang="C">void* sceKernelProcessAllocKernelBudgetHeapMemoryForKernel(SceUID pid, SceSize size);</source>
 +
 
 +
=== SceProcessmgrForKernel_C77C2085 ===
 +
{| class="wikitable"
 +
|-
 +
! Version !! NID
 +
|-
 +
| 0.990_3.60 || 0xC77C2085
 +
|}
 +
 
 +
Gets something from object class of the specified process or current process if pid = 0.
 +
 
 +
<source lang="C">int SceProcessmgrForKernel_C77C2085(SceUID pid);</source>
  
<source lang="C">int sceKernelProcessAllocKernelBudgetHeapMemoryForKernel(SceUID pid, SceSize size);</source>
 
  
 
[[Category:Modules]]
 
[[Category:Modules]]
 
[[Category:Kernel]]
 
[[Category:Kernel]]

Revision as of 11:41, 28 October 2021

Process Manager

Module

Version World Privilege
1.69-3.60 Non-secure Kernel

Libraries

Known NIDs

Version Name World Visibility NID
1.69-3.73 SceProcessmgr Non-secure User 0x2DD91812
1.69-3.73 SceProcessmgrForDriver Non-secure Kernel 0x746EC971
1.69-3.61 SceProcessmgrForKernel Non-secure Kernel 0x7A69DE86
3.63-3.73 SceProcessmgrForKernel Non-secure Kernel 0xEB1F8EF7

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 struct, make sure it's 0xE8
	SceUID pid;             //!< our process ID
	int unk08;
	int unk0C;
	int unk10;              // maybe process state. susspend:0x11.
	SceUID ppid;            //!< parent process ID
	SceUID unk18;
	int unk1C;              // ex:7
	int unk20;              // ex:7F
	SceUID modid;
	void *unk28;            // entry point?
	int unk2C;              // ex:1
	char name[0x1C];
	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_C; // return value of SceLibKernel_9F793F84 and used by SceShell for PSN auth
} SceKernelBootParam;

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
  //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 some_atomic_global_var_related_54;
  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 (same NID on 3.60 and 3.65) called on it
  unsigned 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.60 0x5EC77870
int sceKernelRegisterProcessTerminationCallback(SceUID pid, void *cb);

sceKernelUnregisterProcessTerminationCallback

Version NID
0.990-3.60 0x973A4527
int sceKernelUnregisterProcessTerminationCallback(SceUID pid, void *cb);

sceKernelPowerLock

Version NID
0.990-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

sceKernelGetExtraTty

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.990-3.60 0x5468892A
void *sceKernelAllocCurrentProcessHeapForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelAllocRemoteProcessHeapForDriver

Version NID
0.990-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.990-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.940-3.68 0xAF80F39C

Temp name was sceKernelGetProcessLocalStorageAddrForPidForDriver.

This functions gets Remote Kernel Process Local Storage.

int sceKernelGetRemoteKPLSForDriver(SceUID pid, int key, void **kpls_addr, int 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

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
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.990_3.60 0xC77C2085

Gets something from object class of the specified process or current process if pid = 0.

int SceProcessmgrForKernel_C77C2085(SceUID pid);