SceProcessmgr: Difference between revisions

From Vita Development Wiki
Jump to navigation Jump to search
 
(460 intermediate revisions by 3 users not shown)
Line 1: Line 1:
Process Manager
== Module ==
== Module ==


=== Known NIDs ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! Name !! World !! Privilege !! NID
! Version !! World !! Privilege
|-
| 1.69 || SceProcessmgr || Non-secure || Kernel || 0xF019E1DA
|-
|-
| 3.60 || SceProcessmgr || ? || Kernel || 0x8B8A6263
| 0.931.010-3.740.011 || Non-secure || Kernel
|}
|}


Line 19: Line 18:
! Version !! Name !! World !! Visibility !! NID
! Version !! Name !! World !! Visibility !! NID
|-
|-
| 1.69 || [[SceProcessmgr#SceProcessmgr|SceProcessmgr]] || Non-secure || User || 0x2DD91812
| 0.931.010-3.740.011 || [[SceProcessmgr#SceProcessmgr|SceProcessmgr]] || Non-secure || User || 0x2DD91812
|-
| 3.60 || [[SceProcessmgr#SceProcessmgr|SceProcessmgr]] || ? || User || 0x2DD91812
|-
| 1.69 || [[SceProcessmgr#SceProcessmgrForDriver|SceProcessmgrForDriver]] || Non-secure || Kernel || 0x746EC971
|-
|-
| 3.60 || [[SceProcessmgr#SceProcessmgrForDriver|SceProcessmgrForDriver]] || ? || Kernel || 0x746EC971
| 0.931.010-3.740.011 || [[SceProcessmgr#SceProcessmgrForDriver|SceProcessmgrForDriver]] || Non-secure || Kernel || 0x746EC971
|-
|-
| 1.69 || [[SceProcessmgr#SceProcessmgrForKernel|SceProcessmgrForKernel]] || Non-secure || Kernel || 0x7A69DE86
| 0.931.010-3.610.011 || [[SceProcessmgr#SceProcessmgrForKernel|SceProcessmgrForKernel]] || Non-secure || Kernel || 0x7A69DE86
|-
|-
| 3.60 || [[SceProcessmgr#SceProcessmgrForKernel|SceProcessmgrForKernel]] || ? || Kernel || 0x7A69DE86
| 3.630.000-3.740.011 || [[SceProcessmgr#SceProcessmgrForKernel|SceProcessmgrForKernel]] || Non-secure || Kernel || 0xEB1F8EF7
|}
|}
== Types ==
<source lang="C">
//Pseudo-UIDs for Budget object
#define SCE_KERNEL_PROCESS_CURRENT_PROCESS_BUDGET 0
#define SCE_KERNEL_PROCESS_FULL_GAME_PROCESS_BUDGET 2
#define SCE_KERNEL_PROCESS_SYSTEM_APPLICATION_PROCESS_BUDGET 3
typedef SceUInt32 SceProcessType;
#define SCE_PROCESS_TYPE_GAME 0x01000000 // Value on old System Software version is 0x01010001
#define SCE_PROCESS_TYPE_MINI_APPLICATION 0x02000000 // Value on old System Software version is 0x02010001
#define SCE_PROCESS_TYPE_SYSTEM_APPLICATION 0x04000000 // Value on old System Software version is 0x04020102
#define SCE_PROCESS_TYPE_KERNEL 0x05000000 // Value on old System Software version is 0x10030103
#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
SceUID addressSpaceId;
int unk_C;              // processCreationFlags
int status;            // Process status. ex: suspended = 0x11/0x10011, started = |2.
SceUID ppid;            // Parent process ID
SceUID budgetId;
int cpuAffinity;        // CPU affinity. ex: 7
int unk_20;            // might be initial priority. ex: 0x7F (127)
SceUID modid;          // Module ID
void *entrypoint;      // Process entry point
SceUInt32 process_type;
char name[0x20];        // Process name. ProcessObject->loadprocessparam.module_name if non-empty, else copy from sceGUIDGetName2ForDriver if not NULL, else \0
void *unk_50;          // ?maxFHCount?
void *unk_54;          // ?EntryHeap_uid?
SceUID entryHeapId;    // GUID/PUID EntryHeap GUID
int unk_5C;            // ex: -1
int unk_60;            // ?module_inhibit_state?
int unk_64;            // ex: 0x32
void *KPLS_slots[0x20];
} SceKernelProcessInfo;
// Temp name was SceKernelProcessModuleInfo
typedef struct SceKernelProcessLibdb { // 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;
} SceKernelProcessLibdb;
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-bytes or 0x1C-bytes on FW 0.931, 0x20-bytes on FW 0.990
  SceSize size; // Size of this structure
  SceUInt32 unk_4;
  SceUInt32 cpuAffinityMask;
  SceUInt32 initPriority;
  SceSize stackSize;
  SceUInt32 unk_14;
  SceUInt32 budgetId;
  SceUInt32 unk_1C;
} SceKernelProcessOpt;
// This is a temporary name to distinguish from SceKernelProcessOpt of FW 0.990 and earlier
typedef struct SceKernelProcessOpt_2 { // size is 0x3C-bytes on FW 3.50, 0x40_bytes on FW 3.60
SceSize size; // Size of this structure
int attr;
int initPriority;
int unk_0x0C;
int unk_0x10;
int unk_0x14;
int budgetId;
SceUID ppid;
int unk_0x20;
SceAppMgrLaunchParam *unk_0x24;
const void *klicensee;
SceSize file_open_max_num;
SceSize dir_open_max_level;
int unk_0x34;
int unk_0x38;
int unk_0x3C; // some count
} SceKernelProcessOpt_2;
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 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
  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;
  int cpu_intr;
  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
  SceProcessType 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 random_data[0x10]; // 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;
  SceUID stdin_guid; // result of IoOpen("tty0:")
  SceUID stdout_guid; // result of IoOpen("tty0:")
  SceUID stderr_guid; // result of IoOpen("tty1:")
  SceUID tty7_guid; // result of IoOpen("tty7:") - needs dipsw 0xB8 set
  SceUID stdin_puid; // result of scePUIDOpenByGUIDForDriver(pid, stdin_guid)
  SceUID stdout_puid; // result of scePUIDOpenByGUIDForDriver(pid, stdout_guid)
  SceUID stderr_puid; // result of scePUIDOpenByGUIDForDriver(pid, stderr_guid)
  SceUID tty7_puid; // result of scePUIDOpenByGUIDForDriver(pid, tty7_guid)
  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* KPLS_slots[0x20]; // Pointer to memory allocated for KPLS slots of this process - [3] is "display_info" (size maybe 0x1D0-0x1D8), [4] size may be 0x50-0x58, [23] 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
  int32_t unk2B0; // unk
  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 _ProcessResourceInfo {
      SceUInt32 interrupt_mtx; //Mutex for SuspendInterrupt
      SceSize max_count; //Maximum number of resources of this type allowed
      SceSize cur_count; //Current number of resources of this type
      SceSize highwater; //Not sure - highest number of resources of this type process had
    } process_resources[8];
    char process_name[0x20];
  } list_entry;
} SceUIDProcessObject;
typedef struct SceKernelTimeval {
SceInt32 sec;
SceInt32 usec;
} SceKernelTimeval;
typedef struct SceKernelTimezone {
SceUInt64 value;
} SceKernelTimezone;
</source>


== SceProcessmgr ==
== SceProcessmgr ==
Line 39: Line 344:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x0039BE45
| 0.931.010-3.740.011 || 0x0039BE45
|-
| 3.60 || 0x0039BE45
|}
|}
<source lang="C">int sceKernelLibcTime(SceUInt32 *pTime);</source>


=== sceKernelGetProcessTitleId ===
=== sceKernelGetProcessTitleId ===
Line 49: Line 354:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x03A48771
| 0.931.010-1.50 || not present
|-
|-
| 3.60 || 0x03A48771
| 1.600.061-3.740.011 || 0x03A48771
|}
|}


Line 59: Line 364:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x10C52C95
| 0.931.010-1.50 || not present
|-
|-
| 3.60 || 0x10C52C95
| 1.600.061-3.740.011 || 0x10C52C95
|}
|}


Line 69: Line 374:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x143BC4D6
| 0.931.010-1.06 || not present
|-
|-
| 3.60 || 0x143BC4D6
| 1.500.151-3.740.011 || 0x143BC4D6
|}
|}
<source lang="C">int sceKernelIsCDialogAvailable(void)</source>


=== sceKernelPowerTick ===
=== sceKernelPowerTick ===
Line 79: Line 386:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x2252890C
| 0.931.010 || not present
|-
|-
| 3.60 || 0x2252890C
| 0.940-3.740.011 || 0x2252890C
|}
|}
<source lang="C">int sceKernelPowerTick(SceKernelPowerTickType type);</source>


=== sceKernelGetProcessParam ===
=== sceKernelGetProcessParam ===
Line 89: Line 398:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x2BE3E066
| 0.931.010 || not present
|-
|-
| 3.60 || 0x2BE3E066
| 0.940-3.740.011 || 0x2BE3E066
|}
|}
Gets the process' [[PRX#NONAME_exports|SceProcessParam]].
<source lang="C">SceProcessParam *sceKernelGetProcessParam(void);</source>


=== _sceKernelGetTimer5Reg ===
=== _sceKernelGetTimer5Reg ===
Line 99: Line 412:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x2F73D72F
| 0.931.010-0.990 || not present
|-
|-
| 3.60 || 0x2F73D72F
| 1.000.071-3.65 || 0x2F73D72F
|}
|}


Line 109: Line 422:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x466C0CBD
| 0.931.010-3.740.011 || 0x466C0CBD
|}
 
<source lang="C">int sceKernelPowerUnlock(SceKernelPowerTickType type);</source>
 
=== sceKernelLibcGettimeofday ===
{| class="wikitable"
|-
! Version !! NID
|-
|-
| 3.60 || 0x466C0CBD
| 0.931.010-3.740.011 || 0x4B879059
|}
|}


=== sceKernelLibcGettimeofday ===
<source lang="C">int sceKernelLibcGettimeofday(SceKernelTimeval *tv, SceKernelTimezone *tz);</source>
 
=== _sceKernelRegisterExitAddress ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x4B879059
| 0.931.010-0.990 || 0x0278DFB7
|-
|-
| 3.60 || 0x4B879059
| 1.000.071-3.740.011 || not present
|}
|}
Used in [[SceLibKernel]] module_start.
<source lang="C">int _sceKernelRegisterExitAddress(SceUIntUAddr psceKernelExitThread, SceUIntUAddr psceKernelExitDeleteThread, SceUIntUAddr psceKernelExitCallback);</source>


=== _sceKernelRegisterLibkernelAddresses ===
=== _sceKernelRegisterLibkernelAddresses ===
Line 129: Line 456:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x56C2E8FF
| 0.931.010-0.990 || not present
|-
|-
| 3.60 || 0x56C2E8FF
| 1.000.071-3.740.011 || 0x56C2E8FF
|}
|}
<source lang="C">int _sceKernelRegisterLibkernelAddresses(SceLibkernelAddresses *pAddresses);</source>


=== sceKernelRegisterProcessTerminationCallback ===
=== sceKernelRegisterProcessTerminationCallback ===
Line 139: Line 468:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x5EC77870
| 0.931.010-0.940 || not present
|-
|-
| 3.60 || 0x5EC77870
| 0.990-3.740.011 || 0x5EC77870
|}
|}


=== sceKernelPowerLock ===
<source lang="C">
// cbId can be obtained using sceKernelCreateCallback
SceInt32 sceKernelRegisterProcessTerminationCallback(SceUID pid, SceUID cbId);
</source>
 
=== sceKernelUnregisterProcessTerminationCallback ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x7AA73378
| 0.931.010-0.940 || not present
|-
|-
| 3.60 || 0x7AA73378
| 0.990-3.740.011 || 0x973A4527
|}
|}


=== sceKernelGetProcessTimeWideCore ===
<source lang="C">
// Pass same cbId as previously provided to sceKernelRegisterProcessTerminationCallback
SceInt32 sceKernelUnregisterProcessTerminationCallback(SceUID pid, SceUID cbId);
</source>
 
=== sceKernelPowerLock ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x89DA0967
| 0.931.010-3.740.011 || 0x7AA73378
|-
| 3.60 || 0x89DA0967
|}
|}


=== sceKernelUnregisterProcessTerminationCallback ===
Lock the process something.
 
<source lang="C">int sceKernelPowerLock(SceKernelPowerTickType type);</source>
 
=== sceKernelGetProcessTimeWideCore ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x973A4527
| 0.931.010 || not present
|-
|-
| 3.60 || 0x973A4527
| 0.940-3.740.011 || 0x89DA0967
|}
|}
<source lang="C">SceUInt64 sceKernelGetProcessTimeWideCore(void);</source>


=== sceKernelLibcClock ===
=== sceKernelLibcClock ===
Line 179: Line 522:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0x9E45DA09
| 0.931.010 || not present
|-
|-
| 3.60 || 0x9E45DA09
| 0.940-3.740.011 || 0x9E45DA09
|}
|}
<source lang="C">SceUInt64 sceKernelLibcClock(void);</source>


=== _sceKernelExitProcessForUser ===
=== _sceKernelExitProcessForUser ===
Line 189: Line 534:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xC053DC6B
| 0.931.010-3.740.011 || 0xC053DC6B
|-
| 3.60 || 0xC053DC6B
|}
|}
<source lang="C">int _sceKernelExitProcessForUser(int status);</source>


=== sceKernelGetStdin ===
=== sceKernelGetStdin ===
Line 199: Line 544:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xC1727F59
| 0.931.010-3.740.011 || 0xC1727F59
|-
| 3.60 || 0xC1727F59
|}
|}
Returns the file descriptor of the current process stdin.
<source lang="C">SceUID sceKernelGetStdin(void);</source>


=== sceKernelGetCurrentProcess ===
=== sceKernelGetCurrentProcess ===
Line 209: Line 556:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xCD248267
| 0.931.010-3.740.011 || 0xCD248267
|-
| 3.60 || 0xCD248267
|}
|}


Line 225: Line 570:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xCE0F02F0
| 0.931.010-0.940 || not present
|-
|-
| 3.60 || 0xCE0F02F0
| 0.990-3.740.011 || 0xCE0F02F0
|}
|}
<source lang="C">SceBool sceKernelIsGameBudget(void);</source>


=== sceKernelGetProcessTimeCore ===
=== sceKernelGetProcessTimeCore ===
Line 235: Line 582:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xD37A8437
| 0.931.010 || not present
|-
|-
| 3.60 || 0xD37A8437
| 0.940-3.740.011 || 0xD37A8437
|}
|}
<source lang="C">int sceKernelGetProcessTimeCore(SceUInt64 *pTime);</source>


=== sceKernelGetStdout ===
=== sceKernelGetStdout ===
Line 245: Line 594:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xE5AA625C
| 0.931.010-3.740.011 || 0xE5AA625C
|-
| 3.60 || 0xE5AA625C
|}
|}
Returns the file descriptor of the current process stdout.
<source lang="C">SceUID sceKernelGetStdout(void);</source>


=== sceKernelGetRemoteProcessTime ===
=== sceKernelGetRemoteProcessTime ===
Line 255: Line 606:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xE6E9FCA3
| 0.931.010|| not present
|-
|-
| 3.60 || 0xE6E9FCA3
| 0.940-3.740.011 || 0xE6E9FCA3
|}
|}
<source lang="C">int sceKernelGetRemoteProcessTime(SceUID pid, SceUInt64 *pTime);</source>


=== sceKernelCallAbortHandler ===
=== sceKernelCallAbortHandler ===
Line 265: Line 618:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xEB6E50BB
| 0.931.010-0.990 || not present
|-
|-
| 3.60 || 0xEB6E50BB
| 1.000.071-3.740.011 || 0xEB6E50BB
|}
|}


Line 275: Line 628:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xF5D0D4C6
| 0.931.010 || not present
|-
|-
| 3.60 || 0xF5D0D4C6
| 0.940-3.740.011 || 0xF5D0D4C6
|}
|}
<source lang="C">int sceKernelGetProcessTimeLowCore(void);</source>


=== sceKernelGetStderr ===
=== sceKernelGetStderr ===
Line 285: Line 640:
! Version !! NID
! Version !! NID
|-
|-
| 1.69 || 0xFA5E3ADA
| 0.931.010-3.740.011 || 0xFA5E3ADA
|-
| 3.60 || 0xFA5E3ADA
|}
|}
Returns the file descriptor of the current process stderr.
<source lang="C">SceUID sceKernelGetStderr(void);</source>


=== sceKernelCDialogSessionClose ===
=== sceKernelCDialogSessionClose ===
Line 295: Line 652:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xDB4CC1D0
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.740.011 || 0xDB4CC1D0
|}
|}


=== sceKernelCDialogSetLeaseLimit===
=== sceKernelCDialogSetLeaseLimit ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xEC8DDAAD
| 0.931.010-2.06 || not present
|-
| 2.100.081-3.740.011 || 0xEC8DDAAD
|}
|}


Line 311: Line 672:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x2D635A00
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.740.011 || 0x2D635A00
|}
|}


Line 319: Line 682:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xBCA437CD
| 0.931.010-1.81 || not present
|-
| 2.000.081-3.740.011 || 0xBCA437CD
|}
|}


Line 327: Line 692:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x94F041ED
| 0.931.010-1.81 || not present
|-
| 2.000.081-3.740.011 || 0x94F041ED
|}
|}


Line 335: Line 702:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x890BDC39
| 0.931.010-1.81 || not present
|-
| 2.000.081-3.740.011 || 0x890BDC39
|}
 
=== SceProcessmgr_AAE09BC5 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931.010 || not present
|-
| 0.940 || 0xAAE09BC5
|-
| 1.000.071-3.740.011 || not present
|}
 
Calls [[SceSysmem#sceKernelPowerLockForDriver]].
 
<source lang="C">int SceProcessmgr_AAE09BC5(SceKernelPowerTickType type);</source>
 
=== SceProcessmgr_B2BA89FD ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931.010 || not present
|-
| 0.940 || 0xB2BA89FD
|-
| 1.000.071-3.740.011 || not present
|}
|}
Calls [[SceSysmem#sceKernelPowerUnlockForDriver]].
<source lang="C">int SceProcessmgr_B2BA89FD(SceKernelPowerTickType type);</source>


== SceProcessmgrForDriver ==
== SceProcessmgrForDriver ==


=== sceKernelGetProcessTimeLowCoreForDriver ===
=== SceProcessmgrForDriver_C5CF15ED ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xC5CF15ED
|}
 
Gets some info.
 
<source lang="C">int SceProcessmgrForDriver_C5CF15ED(SceUInt32 index, void *info);</source>
 
=== sceKernelGetSyscallTraceFlagForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x54D469E2
|}
 
This is a guessed name.
 
Get current process syscallTraceFlag.
 
<source lang="C">int sceKernelGetSyscallTraceFlagForDriver(SceUInt32 *value);</source>
 
=== sceKernelAllocOwnProcessCDialogHeapForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x3B33FFBA
|}
 
This is a guessed name.
 
<source lang="C">void *sceKernelAllocOwnProcessCDialogHeapForDriver(SceSize length, void *opt);</source>
 
=== SceProcessmgrForDriver_1C70501E ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x1C70501E
|}
 
=== sceKernelFreeOwnProcessCDialogHeapForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x11BEFBBE
|}
 
This is a guessed name.
 
<source lang="C">int sceKernelFreeOwnProcessCDialogHeapForDriver(ScePVoid ptr);</source>
 
=== sceKernelGetProcessInfoListForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xE8005AFC
|}
 
This is a guessed name.
 
Except if pid == KERNEL_PID.
 
Wrapper to <code>internal_subroutine(visibilityLevel, pVec, vecSize, puiNum, 0);</code>.
 
<source lang="C">int sceKernelGetProcessInfoListForDriver(SceUInt32 visibilityLevel, SceKernelProcessInfo* pVec, SceSize vecSize, SceUInt32* puiNum);</source>
 
=== sceKernelGetProcessInfoList2ForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xBA0A06A4
|}
 
This is a guessed name.
 
Even if pid == KERNEL_PID.
 
Wrapper to <code>internal_subroutine(visibilityLevel, pVec, vecSize, puiNum, 1);</code>.
 
<source lang="C">int sceKernelGetProcessInfoList2ForDriver(SceUInt32 visibilityLevel, SceKernelProcessInfo* pVec, SceSize vecSize, SceUInt32* puiNum);</source>
 
=== sceKernelGetBudgetInfoForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x46221964
|}
 
Information size is 0x88 bytes.
 
<source lang="C">int sceKernelGetBudgetInfoForDriver(SceUID pid, void *pInfo);</source>
 
=== sceKernelRegisterGetProcessTimeFuncForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x4140D633
|}
 
This is a guessed name.
 
<source lang="C">
typedef struct SceProcessTimeFuncTable { // size is 0x24 on FW 3.60
    SceSize size; // Size of this structure
    void* _sceRtcGetCurrentTick;
    void* sceKernelLibcTime;
    void* sceKernelLibcGettimeofday;
    void* sceKernelLibcGmtime_r;
    void* sceKernelLibcLocaltime_r;
    void* sceKernelLibcMktime;
    void* sceRtcGetCurrentTick;
    void* sceRtcGetCurrentSecureTick;
} SceProcessTimeFuncTable;
 
int sceKernelRegisterGetProcessTimeFuncForDriver(const SceProcessTimeFuncTable *pTable);
</source>
 
=== sceKernelProcessRngForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990 || not present
|-
| 3.60-3.65 || 0x2CEB1C7A
|}
 
This is a guessed name.
 
Cleans process memory in range with pseudo random values. Both address and length must be aligned on 4 bytes (DWORD size). Uses [[SceSysmem#sceXorshift128ForDriver]] to update each DWORD in range.
 
<source lang="C">int sceKernelProcessRngForDriver(SceUID pid, void *dst, SceSize length);</source>
 
=== sceKernelIsProcessCoredumpHandlerRegisteredForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xA1CF74FA
|}
 
This is a guessed name.
 
<source lang="C">int sceKernelIsProcessCoredumpHandlerRegisteredForDriver(SceUID pid);</source>
 
=== sceKernelCallCoredumpHandlerForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xB559410A
|}
 
Temp name was sceKernelInvokeProcessCoredumpHandlerForDriver.
 
<source lang="C">int sceKernelCallCoredumpHandlerForDriver(SceUID pid);</source>
 
=== SceProcessmgrForDriver_879153D9 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x879153D9
|}
 
Maybe get model bool param.
 
<source lang="C">int SceProcessmgrForDriver_879153D9(SceUID pid, SceUInt32 a2);</source>
 
=== SceProcessmgrForDriver_E1A67C86 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xE1A67C86
|}
 
Maybe get some count.
 
Related to display?
 
<source lang="C">int SceProcessmgrForDriver_E1A67C86(SceUID pid, SceUInt32 *a2);</source>
 
=== sceKernelGetProcessActiveTimeForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x5BDA978F
|}
 
This is a guessed name.
 
<source lang="C">int sceKernelGetProcessActiveTimeForDriver(SceUID pid, SceUInt64 *pTime);</source>
 
=== SceProcessmgrForDriver_8CB01675 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x8CB01675
|}
 
<source lang="C">int SceProcessmgrForDriver_8CB01675(SceUID pid, SceUInt64 *time, SceUInt64 src_time);</source>
 
=== sceKernelSetProcessTerminatedHandlerForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.65 || 0x5E882B60
|}
 
This is a guessed name.
 
Set Process Terminated callback. Used by [[SceAppMgr]].
 
<source lang="C">int sceKernelSetProcessTerminatedHandlerForDriver(void (* cb)(int a1, int a2));</source>
 
=== sceKernelGetCurrentProcessIdForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x3D4C250E
|-
| 3.60-3.65 || not present
|}
 
Returns the current process ID.
 
Wrapper for SceKernelThreadMgr sceKernelGetProcessIdForKernel.
 
<source lang="C">SceUID sceKernelGetCurrentProcessIdForDriver(void);</source>
 
=== sceKernelAllocOwnProcessHeapForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.65 || 0x5468892A
|}
 
<source lang="C">void *sceKernelAllocOwnProcessHeapForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
 
=== sceKernelAllocRemoteProcessHeapForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.65 || 0x00B1CA0F
|}
 
<source lang="C">void *sceKernelAllocRemoteProcessHeapForDriver(SceUID pid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
 
=== sceKernelFreeCurrentProcessHeapForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.65 || 0xFC2A424E
|}
 
<source lang="C">int sceKernelFreeCurrentProcessHeapForDriver(void *ptr);</source>
 
=== sceKernelFreeRemoteProcessHeapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x02179E12
| 0.931-3.65 || 0x9C28EA9A
|}
|}
<source lang="C">int sceKernelFreeRemoteProcessHeapForDriver(SceUID pid, void *ptr);</source>


=== sceKernelGetProcessInfoForDriver ===
=== sceKernelGetProcessInfoForDriver ===
Line 353: Line 1,032:
! Version !! NID
! Version !! NID
|-
|-
| 3.35 || 0x0AFF3EAE
| 0.931-3.68 || 0x0AFF3EAE
|}
 
Retrieves process information.
 
<source lang="C">int sceKernelGetProcessInfoForDriver(SceUID pid, SceKernelProcessInfo *pInfo);</source>
 
=== sceKernelGetProcessStatusForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
|-
| 3.60 || 0x0AFF3EAE
| 0.931-3.65 || 0x65B120B8
|}
|}
This function queries the status of a given process. It seems that 0x10 is related to suspension status.


<source lang="C">
<source lang="C">
int sceKernelGetProcessInfoForDriver(int pid, void *out);
/**
* @brief      Get the status of a given process.
* @param[in]  pid The process ID to query.
* @param[out]  pStatus The status of the process (?bit field?).
* @return      Zero on success, < 0 on error.
*/
int sceKernelGetProcessStatusForDriver(SceUID pid, SceUInt32 *pStatus);
</source>
</source>


Retrieves process info.
=== sceKernelSetProcessStatusForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.65 || 0x1D0F3185
|}
 
<source lang="C">int sceKernelSetProcessStatusForDriver(SceUID pid, SceUInt32 status);</source>
 
=== sceKernelIsProcessSuspendingForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.65 || 0x0CC5B30C
|}
 
Return whether the process is suspending or not.
 
<source lang="C">int sceKernelIsProcessSuspendingForDriver(SceUID pid);</source>
 
=== sceKernelGetProcessTimeLowCoreForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x02179E12
|}
 
<source lang="C">SceUInt32 sceKernelGetProcessTimeLowCoreForDriver(void);</source>
 
=== sceKernelGetProcessTimeWideCoreForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x82D94BE9
|}
 
<source lnag="C">SceUInt64 sceKernelGetProcessTimeWideCoreForDriver(void);</source>
 
=== sceKernelGetProcessTimeCoreForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xEC283166
|}
 
<source lang="C">int sceKernelGetProcessTimeCoreForDriver(SceUInt64 *pTime);</source>
 
=== sceKernelRegisterKPLSForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-3.65 || 0x3801D7D6
|}
 
Temp name was sceKernelCreateProcessLocalStorageForDriver.
 
Returns allocated KPLS' key on success. Up to 32 KPLS keys can be created.
 
<source lang="C">int sceKernelRegisterKPLSForDriver(const char *name, SceSize size);</source>
 
=== sceKernelGetCurrentKPLSForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.65 || 0xEE694840
|}
 
Temp name was sceKernelGetProcessLocalStorageAddrForDriver.
 
<source lang="C">void *sceKernelGetCurrentKPLSForDriver(int key);</source>
 
=== sceKernelGetRemoteKPLSForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.68 || 0xAF80F39C
|}
 
Temp name was sceKernelGetProcessLocalStorageAddrForPidForDriver.
 
This functions gets Remote Kernel Process Local Storage.


<source lang="C">
<source lang="C">
struct process_info {
// key: index between 0 and 0x1F
int size; // size of this struct, make sure it's 0xE8
// kpls_addr: pointer to area to store address of remote KPLS
int pid; // our process ID
// force_create: if set to true and if KPLS does not exist, it is created
int unk1;
int sceKernelGetRemoteKPLSForDriver(SceUID pid, SceUInt32 key, void **kpls_addr, SceBool force_create);
int unk2;
int unk3;
int ppid; // parent process ID
// the rest is unknown
}
</source>
</source>
=== sceKernelGetRemoteProcessTimeForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xC074EB31
|}
<source lang="C">int sceKernelGetRemoteProcessTimeForDriver(SceUID pid, SceUInt64 *pTime);</source>


=== sceKernelIsCDialogAvailableForDriver ===
=== sceKernelIsCDialogAvailableForDriver ===
Line 384: Line 1,174:
|}
|}


=== sceKernelCreateProcessLocalStorageForDriver ===
<source lang="C">int sceKernelIsCDialogAvailableForDriver(void)</source>
 
=== sceKernelIsGameBudgetForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xF7A8BB25
|}
 
<source lang"C">int sceKernelIsGameBudgetForDriver(void);</source>
 
=== sceKernelHasBusyProcessForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931.010-1.06 || not present
|-
| 1.500.151-3.740.011 || 0xC715591F
|}
 
This is a guessed name.
 
Returns SCE_TRUE if there exists at least one usermode process that is busy, else returns SCE_FALSE.
 
Called by "sceProcessMgrLaunchAppFor" ?to check?. Called before system suspend.
 
<source lang="C">SceBool sceKernelHasBusyProcessForDriver(void);</source>
 
=== sceKernelGetCompiledSdkVersionByPidForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xD141C076
|}
 
<source lang="C">int sceKernelGetCompiledSdkVersionByPidForDriver(SceUID pid, SceUInt32 *puiSdkVer);</source>
 
=== sceKernelRegisterCoredumpHandlerForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x21A6F0EC
|}
 
<source lang="C">int sceKernelRegisterCoredumpHandlerForDriver(void *handler, SceSize size, void *memblock_addr);</source>
 
=== sceKernelUnregisterCoredumpHandlerForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x33B3D026
|}
 
<source lang="C">int sceKernelUnregisterCoredumpHandlerForDriver(void);</source>
 
=== sceKernelSetSyscallTraceFlagForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x24FA97A5
|}
 
<source lang="C">int sceKernelSetSyscallTraceFlagForDriver(SceUID pid, int flag);</source>
 
=== sceKernelAllocRemoteCDialogHeapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x3801D7D6
| 3.60-3.65 || 0x8A85FA28
|}
|}


<source lang="C">int sceKernelCreateProcessLocalStorageForDriver(const char *name, int size);</source>
<source lang="C">void *sceKernelAllocRemoteCDialogHeapForDriver(SceUID pid, SceSize length, void *opt);</source>


=== sceKernelGetProcessTimeWideCoreForDriver ===
=== sceKernelFreeRemoteCDialogHeapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x82D94BE9
| 3.60-3.65 || 0xDD0A58D1
|}
|}


=== sceKernelGetPidProcessLocalStorageAddrForDriver ===
<source lang="C">int sceKernelFreeRemoteCDialogHeapForDriver(SceUID pid, void *ptr);</source>
 
=== sceKernelGetProcessResourceLimitForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xAF80F39C
| 3.60-3.65 || 0xB80DBD53
|}
|}


<source lang="C">int sceKernelGetPidProcessLocalStorageAddrForDriver(SceUID pid, int key, unsigned int *out_addr, int create_if_doesnt_exist);</source>
<source lang="C">int sceKernelGetProcessResourceLimitForDriver(SceUID pid, void *result);</source>


=== sceKernelGetRemoteProcessTimeForDriver ===
=== sceKernelSetInitialPMCRForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xC074EB31
| 3.60-3.65 || 0x61B9B6FA
|}
|}


=== sceKernelGetProcessTimeCoreForDriver ===
Temp name was sceKernelSetProcessPMCRForDriver.
 
<source lang="C">int sceKernelSetInitialPMCRForDriver(SceUID pid, SceUInt32 value);</source>
 
=== sceKernelGetPMCRForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xEC283166
| 3.60 || 0x594319C7
|}
|}


=== sceKernelGetProcessLocalStorageAddrForDriver ===
This is a guessed name. Temp name was sceKernelGetProcessPMCRForDriver.
 
<source lang="C">int sceKernelGetPMCRForDriver(SceUID pid);</source>
 
=== sceKernelSetInitialPMUSERENRForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xEE694840
| 3.60-3.65 || 0xB1C3EFCA
|}
|}


<source lang="C">void *sceKernelGetProcessLocalStorageAddrForDriver(int key);</source>
<source lang="C">int sceKernelSetInitialPMUSERENRForDriver(SceUID pid, SceUInt32 value);</source>


=== sceKernelIsGameBudgetForDriver ===
=== sceKernelSetPMUSERENRForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF7A8BB25
| 3.60-3.65 || 0x6599E5D9
|}
|}
<source lang="C">int sceKernelSetPMUSERENRForDriver(SceUID pid, SceUInt32 value);</source>


== SceProcessmgrForKernel ==
== SceProcessmgrForKernel ==


=== sceKernelLaunchAppForKernel ===
=== sceKernelChangeProcessCpuAffinityForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x0A60B40A
|-
| 3.65 || 0xF013B7F1
|}
 
=== sceKernelEnablePHWPForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x20174234
|-
| 3.65 || 0x9DF739C7
|}
 
=== sceKernelDisablePHWPForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x62D048D2
|-
| 3.65 || 0xA2EE1B7F
|}
 
=== sceKernelGrowBudgetForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-3.60 || 0x029378AC
|-
| 3.65 || 0x48DD3348
|}
 
<source lang="C">SceInt32 sceKernelGrowBudgetForKernel(SceInt32 budgetId, SceInt32 idx, SceSize size);</source>
 
=== sceKernelGetPhyMemPartForKernel ===
 
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xCCB4289B
|-
| 3.65 || 0x923AF3CC
|}
 
<source lang="C">
// 1: Kernel
// 2: Tool
// 3: Game
// 4: PhyCont
// 5: Shared
// 6: Game CDialog
// 7: Shell
 
void *sceKernelGetPhyMemPartForKernel(SceUInt32 type);
</source>
 
=== sceKernelCreateProcessForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x71CF71FD
|-
| 3.65 || 0x68068618
|}
 
Temp name was sceKernelLaunchAppForKernel.
 
Loads the ProcessImage after preparing the process's stuff (ProcCB, Budget, AddressSpace) then opens the tty console.
 
<source lang="C">
/**
* @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);
</source>
 
=== sceKernelStartProcessForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x38FB7BCA
|-
| 3.65 || 0x5137B783
|}
 
<source lang="C">
/**
* @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);
</source>
 
=== sceKernelStartProcessExtForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x36728B16
|-
| 3.65 || 0x026F3E87
|}
 
Temp name was sceKernelStartProcess2ForKernel.
 
Used by [[SceAppMgr]]
 
<source lang="C">
/**
* @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);
</source>
 
=== sceKernelSpawnProcessForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x31834C49
|-
| 3.65 || 0x1E5B38E5
|}
 
Calls sceKernelCreateProcessForKernel then sceKernelStartProcessForKernel.
 
<source lang="C">
/**
* @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);
</source>
 
=== sceKernelSpawnProcessExtForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x8F320D2B
|-
| 3.65 || 0x5A57766C
|}
 
Calls sceKernelCreateProcessForKernel then sceKernelStartProcessExtForKernel.
 
<source lang="C">
/**
* @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);
</source>
 
=== sceKernelUIDtoProcessForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0xB9E68092
|-
| 3.65 || 0xD991C85E
|}
 
Temp name was sceKernelGetProcessKernelBufForKernel.
 
Gets the process object associated to a PID.
 
<source lang="C">SceUIDProcessObject* sceKernelUIDtoProcessForKernel(ScePID pid);</source>
 
=== sceKernelGetProcessMainThreadForDebuggerForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x95F9ED94
|-
| 3.65 || 0xD20553C6
|}
 
Temp name was sceKernelGetProcessMainThreadForKernel.
 
<source lang="C">
/**
* @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);
</source>
 
=== sceKernelProcessSuspendForLoadpForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0x3EC5FDF4
|-
| 3.60-3.74 || not present
|}
 
<source lang="C">
/**
* @brief      Resume a suspended process.
* @param[in]  pid The process to resume.
* @return      Zero on success, < 0 on error.
*/
int sceKernelProcessSuspendForLoadpForKernel(SceUID pid);
</source>
 
=== sceKernelProcessDebugSuspendForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x6AECE4CD
|-
| 3.65 || 0x93B8E785
|}
 
Temp name was sceKernelSuspendProcessForKernel.
 
<source lang ="C">
/**
* @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);
</source>
 
=== sceKernelProcessDebugResumeForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x71CF71FD
| 0.990-3.60 || 0x080CDC59
|-
| 3.65 || 0x6894499C
|}
|}


<source lang="C">int sceKernelLaunchAppForKernel(char* tid, uint32_t flags, char *path, int unk);</source>
Temp name was sceKernelResumeProcessForKernel.
 
<source lang ="C">
/**
* @brief      Resume a suspended process.
* @param[in]  pid The process to resume.
* @return      Zero on success, < 0 on error.
*/
int sceKernelProcessDebugResumeForKernel(SceUID pid);
</source>


=== sceKernelGetProcessKernelBufForKernel ===
=== sceKernelResumeProcessForDebuggerForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.35 || 0x0AFF3EAE
| 0.931-3.60 || 0xB13E3C7B
|-
|-
| 3.60 || 0x0AFF3EAE
| 3.65 || 0x8FB7FD50
|}
|}


<source lang="C">void* sceKernelGetProcessKernelBufForKernel(int pid);</source>
<source lang ="C">
/**
* @brief      Resume a suspended process.
* @param[in]  pid The process to resume.
* @return      Zero on success, < 0 on error.
*/
int sceKernelResumeProcessForDebuggerForKernel(SceUID pid);
</source>


Gets the process privileged only buffer.
=== sceKernelResumeProcessForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0xE0A9C9C4
|-
| 3.65 || 0xEFBCF15B
|}
 
<source lang ="C">
/**
* @brief      Resume a suspended process.
* @param[in]  pid The process to resume.
* @return      Zero on success, < 0 on error.
*/
int sceKernelResumeProcessForKernel(SceUID pid);
</source>


=== sceKernelExitProcessForKernel ===
=== sceKernelExitProcessForKernel ===
Line 477: Line 1,655:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x4CA7DC42
| 0.990-3.60 || 0x4CA7DC42
|-
| 3.65 || 0x905621F9
|}
 
<source lang ="C">int sceKernelExitProcessForKernel(int status);</source>
 
=== sceKernelSetProcessSelfAuthInfoForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931.010-2.120.011 || 0x5ABA2772
|-
| 2.500.071-3.740.011 || not present
|}
|}


=== sceKernelGetSelfInfoForKernel ===
<source lang="C">int sceKernelSetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *self_auth_info);</source>
 
=== sceKernelGetProcessSelfAuthInfoForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xE4C83B0D
| 0.931-3.60 || 0xE4C83B0D
|-
| 3.65 || 0x324F2B20
|}
|}


<code>SceSelfInfo</code> type is defined in [[SceSysmem#sceSysrootGetSelfInfoForKernel|SceSysmem]].
Temp name was sceKernelGetProcessAuthidForKernel.


Calling this function is one way to obtain <code>klicensee</code> and <code>program-authority-id</code>.
<code>SceSelfAuthInfo</code> type is described in [[SceSblSsSmComm#Types]].


<source lang="C">int sceKernelGetSelfInfoForKernel(SceUID pid, SceSelfInfo *self_info);</source>
<source lang="C">int sceKernelGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *self_auth_info);</source>


=== sceKernelLibcTimeForKernel ===
=== sceKernelLibcTimeForKernel ===
Line 500: Line 1,696:
|-
|-
| 3.60 || 0x9E38C556
| 3.60 || 0x9E38C556
|-
| 3.65 || 0xB0E076D6
|}
|}


Line 508: Line 1,706:
|-
|-
| 3.60 || 0xDE8B8B5E
| 3.60 || 0xDE8B8B5E
|-
| 3.65 || 0x014F5113
|}
=== sceKernelGetCurrentTickForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xD17D6110
|-
| 3.65 || 0xD231AE5B
|}
|}


=== sceKernelGetClassForUidForKernel ===
This is a guessed name.
 
=== _sceKernelGetCurrentTickForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xACBAAB10
|-
| 3.65 || 0x3EBC93BB
|}
 
This is a guessed name.
 
=== sceKernelGetUIDProcessClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 516: Line 1,740:
|-
|-
| 3.60 || 0xC6820972
| 3.60 || 0xC6820972
|-
| 3.65 || 0x98AE4BC8
|}
Temp name was sceKernelGetClassForUid2ForKernel, sceKernelGetProcessClassForKernel.
<source lang="C">SceClass *sceKernelGetUIDProcessClassForKernel(void);</source>
=== sceKernelKillProcessForDebuggerForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x90C27779
|-
| 3.65 || 0x148E23E3
|}
<source lang="C">int sceKernelKillProcessForDebuggerForKernel(SceUID pid);</source>
=== sceKernelKillProcessForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0xA1071106
|-
| 3.65 || 0xF388F05C
|}
<source lang="C">
// option: 0: flag 0x2, 1: flag 0x20, 2: flag 0x40
int sceKernelKillProcessForKernel(SceUID pid, SceInt32 option);
</source>
=== sceKernelGetMMUL1InfoForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-0.990 || 0xC526C6F2
|-
| 3.60-3.74 || not present
|}
<source lang="C">int sceKernelGetMMUL1InfoForKernel(SceUID pid, const void *addr, void *pInfo);</source>
=== sceKernelGetMMUL2InfoForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931 || 0xE2681221
|-
| 3.60-3.74 || not present
|}
<source lang="C">int sceKernelGetMMUL2InfoForKernel(SceUID pid, const void *addr, void *pInfo);</source>
=== sceKernelWaitProcessEndForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x0EE2658E
|-
| 3.65 || 0x0B9BE51B
|}
<source lang="C">int sceKernelWaitProcessEndForKernel(SceUID pid, int *pResult, SceUInt32 *pTimeout);</source>
=== sceKernelWaitProcessEventCompletionForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x6A7FF80A
|-
| 3.65 || 0x0F23A5ED
|}
=== sceKernelGetPHWPForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0xC55BF6C3
|-
| 3.65 || 0x6898F7A7
|}
<source lang="C">int sceKernelGetPHWPForKernel(SceUID pid, SceUInt32 a2, int *a3, int *a4);</source>
=== sceKernelSetPHWPForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x54D7B16A
|-
| 3.65 || 0xB2421F93
|}
<source lang="C">int sceKernelSetPHWPForKernel(SceUID pid, int a2, int a3, int a4);</source>
=== sceKernelGetPHBPForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0xA9C20202
|-
| 3.65 || 0x060DA466
|}
<source lang="C">int sceKernelGetPHBPForKernel(SceUID pid, SceUInt32 a2, int *a3, int *a4);</source>
=== sceKernelSetPHBPForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x59FA3216
|-
| 3.65 || 0x597E6D2C
|}
<source lang="C">int sceKernelSetPHBPForKernel(SceUID pid, int a2, int a3, int a4);</source>
=== sceKernelGetProcessAppForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x34FA9645
|-
| 3.65 || 0xE5097B4F
|}
<source lang="C">int sceKernelGetProcessAppForKernel(SceUID pid);</source>
=== sceKernelGetProcessParentIdForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x3C4D2889
|-
| 3.65 || 0xA5E55217
|}
Returns the parent process's PID.
<source lang="C">ScePID sceKernelGetProcessParentIdForKernel(SceUID pid);</source>
=== sceKernelSuspendProcessForDebuggerForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x234A80B6
|-
| 3.65 || 0x4232517A
|}
<source lang ="C">
/**
* @brief      Suspend a running process.
* @param[in]  pid The process to suspend.
* @return      Zero on success, < 0 on error.
*/
int sceKernelSuspendProcessForDebuggerForKernel(SceUID pid);
</source>
=== sceKernelSuspendProcessForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0xCF83C23B
|-
| 3.65 || 0x1400A1F8
|}
<source lang ="C">
// FW 0.931 define
/**
* @brief      Suspend a running process.
* @param[in]  pid The process to suspend.
* @return      Zero on success, < 0 on error.
*/
int sceKernelSuspendProcessForKernel(SceUID pid);
// FW 3.60 define
/**
* @brief      Suspend a running process.
* @param[in]  pid The process to suspend.
* @param[in]  status The status to set to the process.
* @param[out]  pTimeout Maybe the time spent to suspend the process.
* @return      Zero on success, < 0 on error.
*/
int sceKernelSuspendProcessForKernel(SceUID pid, int status, int *pTimeout);
</source>
=== sceKernelGetProcessImageForDebuggerForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-0.990 || 0xCF71D9DD
|-
| 3.60-3.74 || not present
|}
Returns Process Image on success.
<source lang="C">void *sceKernelGetProcessImageForDebuggerForKernel(SceUID pid);</source>
=== sceKernelProcessAppendForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-0.990 || 0xC4E349D5
|-
| 3.60-3.74 || not present
|}
<source lang="C">
// if pid2 is not set, current pid is used instead
int sceKernelProcessAppendForKernel(SceUID pid1, SceUID pid2);
</source>
=== sceKernelProcessAssocAppForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x76C89783
|-
| 3.65 || 0x00DBA872
|}
<source lang="C">int sceKernelProcessAssocAppForKernel(SceUID pid, int unk_in);</source>
=== sceKernelCreateBudgetForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0x05F74BAF
|-
| 3.65 || 0xDC18FCEF
|}
<source lang="C">
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);
</source>
=== sceKernelDeleteBudgetForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0xE5A60577
|-
| 3.65 || 0x459A223B
|}
Delete budget for the current process.
<source lang="C">
// budget: maybe 0, 1, 2 or 3
int sceKernelDeleteBudgetForKernel(SceUInt32 budget);
</source>
=== sceKernelGetBudgetInfoForDebuggerForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0xF3C4A83B
|-
| 3.65 || 0xCF9EC344
|}
Uses [[SceSysmem#SceSysmemForKernel_54E85275]] to get a 0xB0 bytes buffer.
<source lang="C">int sceKernelGetBudgetInfoForDebuggerForKernel(SceUID budgetId, SceUInt32 level, SceKernelBudgetInfo *pInfo);</source>
=== sceKernelGetProcessLibdbForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 1.03-2.06 || not present
|-
| 2.10-3.61 || 0xC1C91BB2
|-
| 3.65 || 0x3AF6B088
|}
Temp name was sceKernelGetProcessModuleInfoForKernel.
<source lang="C">SceKernelProcessLibdb* sceKernelGetProcessLibdbForKernel(SceUID pid);</source>
=== sceKernelSetProcessLibdbForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 2.10-3.60 || 0x7D8D7885
|-
| 3.65 || 0x72F25C14
|}
Temp name was sceKernelSetProcessModuleInfoForKernel.
<source lang="C">int sceKernelSetProcessLibdbForKernel(SceUID pid, SceKernelProcessLibdb *pLibdb);</source>
=== SceProcessmgrForKernel_B75FB970 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931.010-2.120.011 || not present
|-
| 2.500.071-3.610.011 || 0xB75FB970
|-
| 3.630.000-3.740.011 || 0x8B4086AF
|}
Increments Process UID Reference List counter.
Theoretically, it seems that up to 159 or 160 modules can be loaded.
<source lang="C">
// unk_bool depends of the process type
int SceProcessmgrForKernel_B75FB970(SceUID pid, SceBool unk_bool);
</source>
=== SceProcessmgrForKernel_0A5A2CF1 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931.010-2.120.011 || not present
|-
| 2.500.071-3.610.011 || 0x0A5A2CF1
|-
| 3.630.000-3.740.011 || 0xF160B4D8
|}
Decrements Process UID Reference List counter.
<source lang="C">
// unk_bool depends of the process type
int SceProcessmgrForKernel_0A5A2CF1(SceUID pid, SceBool unk_bool);
</source>
=== sceKernelGetProcessTypeForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990 || not present
|-
| 3.60 || 0x2ABFB6C1
|-
| 3.65 || 0xB631C93B
|}
Temp name was sceKernelGetProcessBudgetTypeForKernel.
<source lang="C">SceProcessType sceKernelGetProcessTypeForKernel(SceUID pid);</source>
=== sceKernelAllocRemoteToolHeapForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.940-1.50 || not present
|-
| 3.60 || 0x3C5E2F08
|-
| 3.65 || 0x51AF6FE6
|}
Temp name was sceKernelAllocRemoteToolHeapMemoryForKernel, sceKernelProcessAllocKernelBudgetHeapMemoryForKernel.
Requires DIP switch 210. Allocates memory in target process' "tool" heap. Free memory with [[SceProcessmgr#sceKernelFreeRemoteProcessKernelHeapForKernel|sceKernelFreeRemoteToolHeapForKernel]].
<source lang="C">void* sceKernelAllocRemoteToolHeapForKernel(SceUID pid, SceSize size);</source>
=== sceKernelFreeRemoteToolHeapForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990 || not present
|-
| 3.60 || 0x41815DF2
|-
| 3.65 || 0x2755CEDD
|}
Temp name was sceKernelFreeRemoteToolHeapMemoryForKernel, sceKernelFreeRemoteProcessKernelHeapForKernel.
Requires DIP switch 210. Frees memory allocated with [[SceProcessmgr#sceKernelProcessAllocKernelBudgetHeapMemoryForKernel|sceKernelAllocRemoteToolHeapMemoryForKernel]].
<source lang="C">SceInt32 sceKernelFreeRemoteToolHeapForKernel(SceUID pid, void* addr);</source>
=== sceKernelGetProcessAddressSpaceForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.60 || 0xC77C2085
|-
| 3.65 || 0x9BC44974
|}
This is a guessed name.
Returns specified process' Address Space object UID.
<source lang="C">SceUID sceKernelGetProcessAddressSpaceForKernel(SceUID pid);</source>
=== sceKernelResetGameBudgetForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x15A93CD2
|-
| 3.65 || 0x56657302
|}
=== SceProcessmgrForKernel_E7174A8D ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xE7174A8D
|-
| 3.65 || 0x23EF9D8E
|}
=== SceProcessmgrForKernel_381818A1 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x381818A1
|-
| 3.65 || 0xBC110987
|}
=== SceProcessmgrForKernel_9321D0E5 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x9321D0E5
|-
| 3.65 || 0x9FA66773
|}
=== SceProcessmgrForKernel_B7C91F6C ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xB7C91F6C
|-
| 3.65 || 0xDDE282CF
|}
=== SceProcessmgrForKernel_1423FA86 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x1423FA86
|-
| 3.65 || 0xE025F5A9
|}
Gets the value set by [[#SceProcessmgrForKernel_915AB8D6]].
=== SceProcessmgrForKernel_915AB8D6 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x915AB8D6
|-
| 3.65 || 0xFC80A606
|}
Sets a value to ProcessCB->data_0x288.
=== SceProcessmgrForKernel_89A0A910 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x89A0A910
|-
| 3.65 || 0x6DEC45C3
|}
Gets the value set by [[#SceProcessmgrForKernel_F7FFECF3]].
=== SceProcessmgrForKernel_F7FFECF3 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xF7FFECF3
|-
| 3.65 || 0x1197DB8A
|}
=== SceProcessmgrForKernel_8729DE79 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x8729DE79
|-
| 3.65 || 0x344DDE0B
|}
Calls [[SceSysmem#SceSysrootForDriver_51F9C118]] and [[SceSysmem#SceSysrootForDriver_582616EC]].
=== sceKernelGetProcessIdListForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xC031BFE0
|-
| 3.65 || 0xEFFF2975
|}
This is a guessed name.
Wrapper to <code>internal_subroutine(visibilityLevel, pVec, vecSize, puiNum, 2);</code>.
<source lang="C">int sceKernelGetProcessIdListForKernel(SceUInt32 visibilityLevel, SceUID* pVec, SceSize vecSize, SceUInt32* puiNum);</source>
=== SceProcessmgrForKernel_5AC72C5A ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x5AC72C5A
|-
| 3.65 || 0xD5DF895D
|}
|}


<source lang="C">SceClass* sceKernelGetClassForUidForKernel(SceUID pid);</source>
Same as [[#SceProcessmgrForKernel_C7E75A8C]] but signals sema instead of waiting sema.


=== SceProcessmgrForKernel_C7E75A8C ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xC7E75A8C
|-
| 3.65 || 0x8321B827
|}


Same as [[#SceProcessmgrForKernel_5AC72C5A]] but waits sema instead of signaling sema.
[[Category:ARM]]
[[Category:Kernel]]
[[Category:Modules]]
[[Category:Modules]]
[[Category:Kernel]]
[[Category:Library]]

Latest revision as of 05:12, 13 February 2024

Process Manager

Module

Version World Privilege
0.931.010-3.740.011 Non-secure Kernel

Libraries

Known NIDs

Version Name World Visibility NID
0.931.010-3.740.011 SceProcessmgr Non-secure User 0x2DD91812
0.931.010-3.740.011 SceProcessmgrForDriver Non-secure Kernel 0x746EC971
0.931.010-3.610.011 SceProcessmgrForKernel Non-secure Kernel 0x7A69DE86
3.630.000-3.740.011 SceProcessmgrForKernel Non-secure Kernel 0xEB1F8EF7

Types

//Pseudo-UIDs for Budget object
#define SCE_KERNEL_PROCESS_CURRENT_PROCESS_BUDGET 0
#define SCE_KERNEL_PROCESS_FULL_GAME_PROCESS_BUDGET 2
#define SCE_KERNEL_PROCESS_SYSTEM_APPLICATION_PROCESS_BUDGET 3

typedef SceUInt32 SceProcessType;
#define SCE_PROCESS_TYPE_GAME 0x01000000 // Value on old System Software version is 0x01010001
#define SCE_PROCESS_TYPE_MINI_APPLICATION 0x02000000 // Value on old System Software version is 0x02010001
#define SCE_PROCESS_TYPE_SYSTEM_APPLICATION 0x04000000 // Value on old System Software version is 0x04020102
#define SCE_PROCESS_TYPE_KERNEL 0x05000000 // Value on old System Software version is 0x10030103

#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
	SceUID addressSpaceId;
	int unk_C;              // processCreationFlags
	int status;             // Process status. ex: suspended = 0x11/0x10011, started = |2.
	SceUID ppid;            // Parent process ID
	SceUID budgetId;
	int cpuAffinity;        // CPU affinity. ex: 7
	int unk_20;             // might be initial priority. ex: 0x7F (127)
	SceUID modid;           // Module ID
	void *entrypoint;       // Process entry point
	SceUInt32 process_type;
	char name[0x20];        // Process name. ProcessObject->loadprocessparam.module_name if non-empty, else copy from sceGUIDGetName2ForDriver if not NULL, else \0
	void *unk_50;           // ?maxFHCount?
	void *unk_54;           // ?EntryHeap_uid?
	SceUID entryHeapId;     // GUID/PUID EntryHeap GUID
	int unk_5C;             // ex: -1
	int unk_60;             // ?module_inhibit_state?
	int unk_64;             // ex: 0x32
	void *KPLS_slots[0x20];
} SceKernelProcessInfo;

// Temp name was SceKernelProcessModuleInfo
typedef struct SceKernelProcessLibdb { // 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;
} SceKernelProcessLibdb;

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-bytes or 0x1C-bytes on FW 0.931, 0x20-bytes on FW 0.990
  SceSize size; // Size of this structure
  SceUInt32 unk_4;
  SceUInt32 cpuAffinityMask;
  SceUInt32 initPriority;
  SceSize stackSize;
  SceUInt32 unk_14;
  SceUInt32 budgetId;
  SceUInt32 unk_1C;
} SceKernelProcessOpt;

// This is a temporary name to distinguish from SceKernelProcessOpt of FW 0.990 and earlier
typedef struct SceKernelProcessOpt_2 { // size is 0x3C-bytes on FW 3.50, 0x40_bytes on FW 3.60
	SceSize size; // Size of this structure
	int attr;
	int initPriority;
	int unk_0x0C;
	int unk_0x10;
	int unk_0x14;
	int budgetId;
	SceUID ppid;
	int unk_0x20;
	SceAppMgrLaunchParam *unk_0x24;
	const void *klicensee;
	SceSize file_open_max_num;
	SceSize dir_open_max_level;
	int unk_0x34;
	int unk_0x38;
	int unk_0x3C; // some count
} SceKernelProcessOpt_2;

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 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
  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;
  int cpu_intr;
  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
  SceProcessType 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 random_data[0x10]; // 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;
  SceUID stdin_guid; // result of IoOpen("tty0:")
  SceUID stdout_guid; // result of IoOpen("tty0:")
  SceUID stderr_guid; // result of IoOpen("tty1:")
  SceUID tty7_guid; // result of IoOpen("tty7:") - needs dipsw 0xB8 set
  SceUID stdin_puid; // result of scePUIDOpenByGUIDForDriver(pid, stdin_guid)
  SceUID stdout_puid; // result of scePUIDOpenByGUIDForDriver(pid, stdout_guid)
  SceUID stderr_puid; // result of scePUIDOpenByGUIDForDriver(pid, stderr_guid)
  SceUID tty7_puid; // result of scePUIDOpenByGUIDForDriver(pid, tty7_guid)
  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* KPLS_slots[0x20]; // Pointer to memory allocated for KPLS slots of this process - [3] is "display_info" (size maybe 0x1D0-0x1D8), [4] size may be 0x50-0x58, [23] 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
  int32_t unk2B0; // unk
  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 _ProcessResourceInfo {
      SceUInt32 interrupt_mtx; //Mutex for SuspendInterrupt
      SceSize max_count; //Maximum number of resources of this type allowed
      SceSize cur_count; //Current number of resources of this type
      SceSize highwater; //Not sure - highest number of resources of this type process had
    } process_resources[8];
    char process_name[0x20];
  } list_entry;
} SceUIDProcessObject;

typedef struct SceKernelTimeval {
	SceInt32 sec;
	SceInt32 usec;
} SceKernelTimeval;

typedef struct SceKernelTimezone {
	SceUInt64 value;
} SceKernelTimezone;

SceProcessmgr

sceKernelLibcTime

Version NID
0.931.010-3.740.011 0x0039BE45
int sceKernelLibcTime(SceUInt32 *pTime);

sceKernelGetProcessTitleId

Version NID
0.931.010-1.50 not present
1.600.061-3.740.011 0x03A48771

sceKernelGetProcessName

Version NID
0.931.010-1.50 not present
1.600.061-3.740.011 0x10C52C95

sceKernelIsCDialogAvailable

Version NID
0.931.010-1.06 not present
1.500.151-3.740.011 0x143BC4D6
int sceKernelIsCDialogAvailable(void)

sceKernelPowerTick

Version NID
0.931.010 not present
0.940-3.740.011 0x2252890C
int sceKernelPowerTick(SceKernelPowerTickType type);

sceKernelGetProcessParam

Version NID
0.931.010 not present
0.940-3.740.011 0x2BE3E066

Gets the process' SceProcessParam.

SceProcessParam *sceKernelGetProcessParam(void);

_sceKernelGetTimer5Reg

Version NID
0.931.010-0.990 not present
1.000.071-3.65 0x2F73D72F

sceKernelPowerUnlock

Version NID
0.931.010-3.740.011 0x466C0CBD
int sceKernelPowerUnlock(SceKernelPowerTickType type);

sceKernelLibcGettimeofday

Version NID
0.931.010-3.740.011 0x4B879059
int sceKernelLibcGettimeofday(SceKernelTimeval *tv, SceKernelTimezone *tz);

_sceKernelRegisterExitAddress

Version NID
0.931.010-0.990 0x0278DFB7
1.000.071-3.740.011 not present

Used in SceLibKernel module_start.

int _sceKernelRegisterExitAddress(SceUIntUAddr psceKernelExitThread, SceUIntUAddr psceKernelExitDeleteThread, SceUIntUAddr psceKernelExitCallback);

_sceKernelRegisterLibkernelAddresses

Version NID
0.931.010-0.990 not present
1.000.071-3.740.011 0x56C2E8FF
int _sceKernelRegisterLibkernelAddresses(SceLibkernelAddresses *pAddresses);

sceKernelRegisterProcessTerminationCallback

Version NID
0.931.010-0.940 not present
0.990-3.740.011 0x5EC77870
// cbId can be obtained using sceKernelCreateCallback
SceInt32 sceKernelRegisterProcessTerminationCallback(SceUID pid, SceUID cbId);

sceKernelUnregisterProcessTerminationCallback

Version NID
0.931.010-0.940 not present
0.990-3.740.011 0x973A4527
// Pass same cbId as previously provided to sceKernelRegisterProcessTerminationCallback
SceInt32 sceKernelUnregisterProcessTerminationCallback(SceUID pid, SceUID cbId);

sceKernelPowerLock

Version NID
0.931.010-3.740.011 0x7AA73378

Lock the process something.

int sceKernelPowerLock(SceKernelPowerTickType type);

sceKernelGetProcessTimeWideCore

Version NID
0.931.010 not present
0.940-3.740.011 0x89DA0967
SceUInt64 sceKernelGetProcessTimeWideCore(void);

sceKernelLibcClock

Version NID
0.931.010 not present
0.940-3.740.011 0x9E45DA09
SceUInt64 sceKernelLibcClock(void);

_sceKernelExitProcessForUser

Version NID
0.931.010-3.740.011 0xC053DC6B
int _sceKernelExitProcessForUser(int status);

sceKernelGetStdin

Version NID
0.931.010-3.740.011 0xC1727F59

Returns the file descriptor of the current process stdin.

SceUID sceKernelGetStdin(void);

sceKernelGetCurrentProcess

Version NID
0.931.010-3.740.011 0xCD248267

Wrapper to sceKernelGetProcessIdForDriver.

Returns the process ID.

SceUID sceKernelGetCurrentProcess(void);

sceKernelIsGameBudget

Version NID
0.931.010-0.940 not present
0.990-3.740.011 0xCE0F02F0
SceBool sceKernelIsGameBudget(void);

sceKernelGetProcessTimeCore

Version NID
0.931.010 not present
0.940-3.740.011 0xD37A8437
int sceKernelGetProcessTimeCore(SceUInt64 *pTime);

sceKernelGetStdout

Version NID
0.931.010-3.740.011 0xE5AA625C

Returns the file descriptor of the current process stdout.

SceUID sceKernelGetStdout(void);

sceKernelGetRemoteProcessTime

Version NID
0.931.010 not present
0.940-3.740.011 0xE6E9FCA3
int sceKernelGetRemoteProcessTime(SceUID pid, SceUInt64 *pTime);

sceKernelCallAbortHandler

Version NID
0.931.010-0.990 not present
1.000.071-3.740.011 0xEB6E50BB

sceKernelGetProcessTimeLowCore

Version NID
0.931.010 not present
0.940-3.740.011 0xF5D0D4C6
int sceKernelGetProcessTimeLowCore(void);

sceKernelGetStderr

Version NID
0.931.010-3.740.011 0xFA5E3ADA

Returns the file descriptor of the current process stderr.

SceUID sceKernelGetStderr(void);

sceKernelCDialogSessionClose

Version NID
0.931.010-1.692.000 not present
1.800.071-3.740.011 0xDB4CC1D0

sceKernelCDialogSetLeaseLimit

Version NID
0.931.010-2.06 not present
2.100.081-3.740.011 0xEC8DDAAD

sceKernelGetExtraTty

Version NID
0.931.010-1.692.000 not present
1.800.071-3.740.011 0x2D635A00

sceKernelLibcGmtime_r

Version NID
0.931.010-1.81 not present
2.000.081-3.740.011 0xBCA437CD

sceKernelLibcLocaltime_r

Version NID
0.931.010-1.81 not present
2.000.081-3.740.011 0x94F041ED

sceKernelLibcMktime

Version NID
0.931.010-1.81 not present
2.000.081-3.740.011 0x890BDC39

SceProcessmgr_AAE09BC5

Version NID
0.931.010 not present
0.940 0xAAE09BC5
1.000.071-3.740.011 not present

Calls SceSysmem#sceKernelPowerLockForDriver.

int SceProcessmgr_AAE09BC5(SceKernelPowerTickType type);

SceProcessmgr_B2BA89FD

Version NID
0.931.010 not present
0.940 0xB2BA89FD
1.000.071-3.740.011 not present

Calls SceSysmem#sceKernelPowerUnlockForDriver.

int SceProcessmgr_B2BA89FD(SceKernelPowerTickType type);

SceProcessmgrForDriver

SceProcessmgrForDriver_C5CF15ED

Version NID
3.60 0xC5CF15ED

Gets some info.

int SceProcessmgrForDriver_C5CF15ED(SceUInt32 index, void *info);

sceKernelGetSyscallTraceFlagForDriver

Version NID
3.60 0x54D469E2

This is a guessed name.

Get current process syscallTraceFlag.

int sceKernelGetSyscallTraceFlagForDriver(SceUInt32 *value);

sceKernelAllocOwnProcessCDialogHeapForDriver

Version NID
3.60 0x3B33FFBA

This is a guessed name.

void *sceKernelAllocOwnProcessCDialogHeapForDriver(SceSize length, void *opt);

SceProcessmgrForDriver_1C70501E

Version NID
3.60 0x1C70501E

sceKernelFreeOwnProcessCDialogHeapForDriver

Version NID
3.60 0x11BEFBBE

This is a guessed name.

int sceKernelFreeOwnProcessCDialogHeapForDriver(ScePVoid ptr);

sceKernelGetProcessInfoListForDriver

Version NID
3.60-3.65 0xE8005AFC

This is a guessed name.

Except if pid == KERNEL_PID.

Wrapper to internal_subroutine(visibilityLevel, pVec, vecSize, puiNum, 0);.

int sceKernelGetProcessInfoListForDriver(SceUInt32 visibilityLevel, SceKernelProcessInfo* pVec, SceSize vecSize, SceUInt32* puiNum);

sceKernelGetProcessInfoList2ForDriver

Version NID
3.60-3.65 0xBA0A06A4

This is a guessed name.

Even if pid == KERNEL_PID.

Wrapper to internal_subroutine(visibilityLevel, pVec, vecSize, puiNum, 1);.

int sceKernelGetProcessInfoList2ForDriver(SceUInt32 visibilityLevel, SceKernelProcessInfo* pVec, SceSize vecSize, SceUInt32* puiNum);

sceKernelGetBudgetInfoForDriver

Version NID
3.60-3.65 0x46221964

Information size is 0x88 bytes.

int sceKernelGetBudgetInfoForDriver(SceUID pid, void *pInfo);

sceKernelRegisterGetProcessTimeFuncForDriver

Version NID
3.60-3.65 0x4140D633

This is a guessed name.

typedef struct SceProcessTimeFuncTable { // size is 0x24 on FW 3.60
    SceSize size; // Size of this structure
    void* _sceRtcGetCurrentTick;
    void* sceKernelLibcTime;
    void* sceKernelLibcGettimeofday;
    void* sceKernelLibcGmtime_r;
    void* sceKernelLibcLocaltime_r;
    void* sceKernelLibcMktime;
    void* sceRtcGetCurrentTick;
    void* sceRtcGetCurrentSecureTick;
} SceProcessTimeFuncTable;

int sceKernelRegisterGetProcessTimeFuncForDriver(const SceProcessTimeFuncTable *pTable);

sceKernelProcessRngForDriver

Version NID
0.990 not present
3.60-3.65 0x2CEB1C7A

This is a guessed name.

Cleans process memory in range with pseudo random values. Both address and length must be aligned on 4 bytes (DWORD size). Uses SceSysmem#sceXorshift128ForDriver to update each DWORD in range.

int sceKernelProcessRngForDriver(SceUID pid, void *dst, SceSize length);

sceKernelIsProcessCoredumpHandlerRegisteredForDriver

Version NID
3.60-3.65 0xA1CF74FA

This is a guessed name.

int sceKernelIsProcessCoredumpHandlerRegisteredForDriver(SceUID pid);

sceKernelCallCoredumpHandlerForDriver

Version NID
3.60-3.65 0xB559410A

Temp name was sceKernelInvokeProcessCoredumpHandlerForDriver.

int sceKernelCallCoredumpHandlerForDriver(SceUID pid);

SceProcessmgrForDriver_879153D9

Version NID
3.60-3.65 0x879153D9

Maybe get model bool param.

int SceProcessmgrForDriver_879153D9(SceUID pid, SceUInt32 a2);

SceProcessmgrForDriver_E1A67C86

Version NID
3.60-3.65 0xE1A67C86

Maybe get some count.

Related to display?

int SceProcessmgrForDriver_E1A67C86(SceUID pid, SceUInt32 *a2);

sceKernelGetProcessActiveTimeForDriver

Version NID
3.60-3.65 0x5BDA978F

This is a guessed name.

int sceKernelGetProcessActiveTimeForDriver(SceUID pid, SceUInt64 *pTime);

SceProcessmgrForDriver_8CB01675

Version NID
3.60-3.65 0x8CB01675
int SceProcessmgrForDriver_8CB01675(SceUID pid, SceUInt64 *time, SceUInt64 src_time);

sceKernelSetProcessTerminatedHandlerForDriver

Version NID
0.990-3.65 0x5E882B60

This is a guessed name.

Set Process Terminated callback. Used by SceAppMgr.

int sceKernelSetProcessTerminatedHandlerForDriver(void (* cb)(int a1, int a2));

sceKernelGetCurrentProcessIdForDriver

Version NID
0.931 0x3D4C250E
3.60-3.65 not present

Returns the current process ID.

Wrapper for SceKernelThreadMgr sceKernelGetProcessIdForKernel.

SceUID sceKernelGetCurrentProcessIdForDriver(void);

sceKernelAllocOwnProcessHeapForDriver

Version NID
0.931-3.65 0x5468892A
void *sceKernelAllocOwnProcessHeapForDriver(SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelAllocRemoteProcessHeapForDriver

Version NID
0.931-3.65 0x00B1CA0F
void *sceKernelAllocRemoteProcessHeapForDriver(SceUID pid, SceSize size, SceKernelHeapMemoryOpt *pOpt);

sceKernelFreeCurrentProcessHeapForDriver

Version NID
0.931-3.65 0xFC2A424E
int sceKernelFreeCurrentProcessHeapForDriver(void *ptr);

sceKernelFreeRemoteProcessHeapForDriver

Version NID
0.931-3.65 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.65 0x65B120B8

This function queries the status of a given process. It seems that 0x10 is related to suspension status.

/**
 * @brief       Get the status of a given process.
 * @param[in]   pid The process ID to query.
 * @param[out]  pStatus The status of the process (?bit field?).
 * @return      Zero on success, < 0 on error.
 */
int sceKernelGetProcessStatusForDriver(SceUID pid, SceUInt32 *pStatus);

sceKernelSetProcessStatusForDriver

Version NID
0.931-3.65 0x1D0F3185
int sceKernelSetProcessStatusForDriver(SceUID pid, SceUInt32 status);

sceKernelIsProcessSuspendingForDriver

Version NID
0.931-3.65 0x0CC5B30C

Return whether the process is suspending or not.

int sceKernelIsProcessSuspendingForDriver(SceUID pid);

sceKernelGetProcessTimeLowCoreForDriver

Version NID
3.60-3.65 0x02179E12
SceUInt32 sceKernelGetProcessTimeLowCoreForDriver(void);

sceKernelGetProcessTimeWideCoreForDriver

Version NID
3.60-3.65 0x82D94BE9
SceUInt64 sceKernelGetProcessTimeWideCoreForDriver(void);

sceKernelGetProcessTimeCoreForDriver

Version NID
3.60-3.65 0xEC283166
int sceKernelGetProcessTimeCoreForDriver(SceUInt64 *pTime);

sceKernelRegisterKPLSForDriver

Version NID
0.940-3.65 0x3801D7D6

Temp name was sceKernelCreateProcessLocalStorageForDriver.

Returns allocated KPLS' key on success. Up to 32 KPLS keys can be created.

int sceKernelRegisterKPLSForDriver(const char *name, SceSize size);

sceKernelGetCurrentKPLSForDriver

Version NID
0.990-3.65 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-3.65 0xC074EB31
int sceKernelGetRemoteProcessTimeForDriver(SceUID pid, SceUInt64 *pTime);

sceKernelIsCDialogAvailableForDriver

Version NID
3.60 0x2F6020B7
int sceKernelIsCDialogAvailableForDriver(void)

sceKernelIsGameBudgetForDriver

Version NID
3.60-3.65 0xF7A8BB25
int sceKernelIsGameBudgetForDriver(void);

sceKernelHasBusyProcessForDriver

Version NID
0.931.010-1.06 not present
1.500.151-3.740.011 0xC715591F

This is a guessed name.

Returns SCE_TRUE if there exists at least one usermode process that is busy, else returns SCE_FALSE.

Called by "sceProcessMgrLaunchAppFor" ?to check?. Called before system suspend.

SceBool sceKernelHasBusyProcessForDriver(void);

sceKernelGetCompiledSdkVersionByPidForDriver

Version NID
3.60-3.65 0xD141C076
int sceKernelGetCompiledSdkVersionByPidForDriver(SceUID pid, SceUInt32 *puiSdkVer);

sceKernelRegisterCoredumpHandlerForDriver

Version NID
3.60-3.65 0x21A6F0EC
int sceKernelRegisterCoredumpHandlerForDriver(void *handler, SceSize size, void *memblock_addr);

sceKernelUnregisterCoredumpHandlerForDriver

Version NID
3.60-3.65 0x33B3D026
int sceKernelUnregisterCoredumpHandlerForDriver(void);

sceKernelSetSyscallTraceFlagForDriver

Version NID
3.60-3.65 0x24FA97A5
int sceKernelSetSyscallTraceFlagForDriver(SceUID pid, int flag);

sceKernelAllocRemoteCDialogHeapForDriver

Version NID
3.60-3.65 0x8A85FA28
void *sceKernelAllocRemoteCDialogHeapForDriver(SceUID pid, SceSize length, void *opt);

sceKernelFreeRemoteCDialogHeapForDriver

Version NID
3.60-3.65 0xDD0A58D1
int sceKernelFreeRemoteCDialogHeapForDriver(SceUID pid, void *ptr);

sceKernelGetProcessResourceLimitForDriver

Version NID
3.60-3.65 0xB80DBD53
int sceKernelGetProcessResourceLimitForDriver(SceUID pid, void *result);

sceKernelSetInitialPMCRForDriver

Version NID
3.60-3.65 0x61B9B6FA

Temp name was sceKernelSetProcessPMCRForDriver.

int sceKernelSetInitialPMCRForDriver(SceUID pid, SceUInt32 value);

sceKernelGetPMCRForDriver

Version NID
3.60 0x594319C7

This is a guessed name. Temp name was sceKernelGetProcessPMCRForDriver.

int sceKernelGetPMCRForDriver(SceUID pid);

sceKernelSetInitialPMUSERENRForDriver

Version NID
3.60-3.65 0xB1C3EFCA
int sceKernelSetInitialPMUSERENRForDriver(SceUID pid, SceUInt32 value);

sceKernelSetPMUSERENRForDriver

Version NID
3.60-3.65 0x6599E5D9
int sceKernelSetPMUSERENRForDriver(SceUID pid, SceUInt32 value);

SceProcessmgrForKernel

sceKernelChangeProcessCpuAffinityForKernel

Version NID
3.60 0x0A60B40A
3.65 0xF013B7F1

sceKernelEnablePHWPForKernel

Version NID
3.60 0x20174234
3.65 0x9DF739C7

sceKernelDisablePHWPForKernel

Version NID
3.60 0x62D048D2
3.65 0xA2EE1B7F

sceKernelGrowBudgetForKernel

Version NID
0.940-3.60 0x029378AC
3.65 0x48DD3348
SceInt32 sceKernelGrowBudgetForKernel(SceInt32 budgetId, SceInt32 idx, SceSize size);

sceKernelGetPhyMemPartForKernel

Version NID
3.60 0xCCB4289B
3.65 0x923AF3CC
// 1: Kernel
// 2: Tool
// 3: Game
// 4: PhyCont
// 5: Shared
// 6: Game CDialog
// 7: Shell

void *sceKernelGetPhyMemPartForKernel(SceUInt32 type);

sceKernelCreateProcessForKernel

Version NID
0.931-3.60 0x71CF71FD
3.65 0x68068618

Temp name was sceKernelLaunchAppForKernel.

Loads the ProcessImage after preparing the process's stuff (ProcCB, Budget, AddressSpace) then opens the tty console.

/**
 * @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
3.65 0x5137B783
/**
 * @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
3.65 0x026F3E87

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
3.65 0x1E5B38E5

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
3.65 0x5A57766C

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
3.65 0xD991C85E

Temp name was sceKernelGetProcessKernelBufForKernel.

Gets the process object associated to a PID.

SceUIDProcessObject* sceKernelUIDtoProcessForKernel(ScePID pid);

sceKernelGetProcessMainThreadForDebuggerForKernel

Version NID
0.931-3.60 0x95F9ED94
3.65 0xD20553C6

Temp name was sceKernelGetProcessMainThreadForKernel.

/**
 * @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-3.74 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
3.65 0x93B8E785

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
3.65 0x6894499C

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
3.65 0x8FB7FD50
/**
 * @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
3.65 0xEFBCF15B
/**
 * @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
3.65 0x905621F9
int sceKernelExitProcessForKernel(int status);

sceKernelSetProcessSelfAuthInfoForKernel

Version NID
0.931.010-2.120.011 0x5ABA2772
2.500.071-3.740.011 not present
int sceKernelSetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *self_auth_info);

sceKernelGetProcessSelfAuthInfoForKernel

Version NID
0.931-3.60 0xE4C83B0D
3.65 0x324F2B20

Temp name was sceKernelGetProcessAuthidForKernel.

SceSelfAuthInfo type is described in SceSblSsSmComm#Types.

int sceKernelGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *self_auth_info);

sceKernelLibcTimeForKernel

Version NID
3.60 0x9E38C556
3.65 0xB0E076D6

sceKernelLibcGettimeofdayForKernel

Version NID
3.60 0xDE8B8B5E
3.65 0x014F5113

sceKernelGetCurrentTickForKernel

Version NID
3.60 0xD17D6110
3.65 0xD231AE5B

This is a guessed name.

_sceKernelGetCurrentTickForKernel

Version NID
3.60 0xACBAAB10
3.65 0x3EBC93BB

This is a guessed name.

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
3.65 0x148E23E3
int sceKernelKillProcessForDebuggerForKernel(SceUID pid);

sceKernelKillProcessForKernel

Version NID
0.931-3.60 0xA1071106
3.65 0xF388F05C
// option: 0: flag 0x2, 1: flag 0x20, 2: flag 0x40
int sceKernelKillProcessForKernel(SceUID pid, SceInt32 option);

sceKernelGetMMUL1InfoForKernel

Version NID
0.931-0.990 0xC526C6F2
3.60-3.74 not present
int sceKernelGetMMUL1InfoForKernel(SceUID pid, const void *addr, void *pInfo);

sceKernelGetMMUL2InfoForKernel

Version NID
0.931 0xE2681221
3.60-3.74 not present
int sceKernelGetMMUL2InfoForKernel(SceUID pid, const void *addr, void *pInfo);

sceKernelWaitProcessEndForKernel

Version NID
0.931-3.60 0x0EE2658E
3.65 0x0B9BE51B
int sceKernelWaitProcessEndForKernel(SceUID pid, int *pResult, SceUInt32 *pTimeout);

sceKernelWaitProcessEventCompletionForKernel

Version NID
3.60 0x6A7FF80A
3.65 0x0F23A5ED

sceKernelGetPHWPForKernel

Version NID
0.931-3.60 0xC55BF6C3
3.65 0x6898F7A7
int sceKernelGetPHWPForKernel(SceUID pid, SceUInt32 a2, int *a3, int *a4);

sceKernelSetPHWPForKernel

Version NID
0.931-3.60 0x54D7B16A
3.65 0xB2421F93
int sceKernelSetPHWPForKernel(SceUID pid, int a2, int a3, int a4);

sceKernelGetPHBPForKernel

Version NID
0.931-3.60 0xA9C20202
3.65 0x060DA466
int sceKernelGetPHBPForKernel(SceUID pid, SceUInt32 a2, int *a3, int *a4);

sceKernelSetPHBPForKernel

Version NID
0.931-3.60 0x59FA3216
3.65 0x597E6D2C
int sceKernelSetPHBPForKernel(SceUID pid, int a2, int a3, int a4);

sceKernelGetProcessAppForKernel

Version NID
0.931-3.60 0x34FA9645
3.65 0xE5097B4F
int sceKernelGetProcessAppForKernel(SceUID pid);

sceKernelGetProcessParentIdForKernel

Version NID
0.931-3.60 0x3C4D2889
3.65 0xA5E55217

Returns the parent process's PID.

ScePID sceKernelGetProcessParentIdForKernel(SceUID pid);

sceKernelSuspendProcessForDebuggerForKernel

Version NID
0.931-3.60 0x234A80B6
3.65 0x4232517A
/**
 * @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.931-3.60 0xCF83C23B
3.65 0x1400A1F8
// FW 0.931 define
/**
 * @brief       Suspend a running process.
 * @param[in]   pid The process to suspend.
 * @return      Zero on success, < 0 on error.
 */
int sceKernelSuspendProcessForKernel(SceUID pid);

// FW 3.60 define
/**
 * @brief       Suspend a running process.
 * @param[in]   pid The process to suspend.
 * @param[in]   status The status to set to the process.
 * @param[out]  pTimeout Maybe the time spent to suspend the process.
 * @return      Zero on success, < 0 on error.
 */
int sceKernelSuspendProcessForKernel(SceUID pid, int status, int *pTimeout);

sceKernelGetProcessImageForDebuggerForKernel

Version NID
0.931-0.990 0xCF71D9DD
3.60-3.74 not present

Returns Process Image on success.

void *sceKernelGetProcessImageForDebuggerForKernel(SceUID pid);

sceKernelProcessAppendForKernel

Version NID
0.931-0.990 0xC4E349D5
3.60-3.74 not present
// if pid2 is not set, current pid is used instead
int sceKernelProcessAppendForKernel(SceUID pid1, SceUID pid2);

sceKernelProcessAssocAppForKernel

Version NID
0.931-3.60 0x76C89783
3.65 0x00DBA872
int sceKernelProcessAssocAppForKernel(SceUID pid, int unk_in);

sceKernelCreateBudgetForKernel

Version NID
0.931-3.60 0x05F74BAF
3.65 0xDC18FCEF
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
3.65 0x459A223B

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
3.65 0xCF9EC344

Uses SceSysmem#SceSysmemForKernel_54E85275 to get a 0xB0 bytes buffer.

int sceKernelGetBudgetInfoForDebuggerForKernel(SceUID budgetId, SceUInt32 level, SceKernelBudgetInfo *pInfo);

sceKernelGetProcessLibdbForKernel

Version NID
1.03-2.06 not present
2.10-3.61 0xC1C91BB2
3.65 0x3AF6B088

Temp name was sceKernelGetProcessModuleInfoForKernel.

SceKernelProcessLibdb* sceKernelGetProcessLibdbForKernel(SceUID pid);

sceKernelSetProcessLibdbForKernel

Version NID
2.10-3.60 0x7D8D7885
3.65 0x72F25C14

Temp name was sceKernelSetProcessModuleInfoForKernel.

int sceKernelSetProcessLibdbForKernel(SceUID pid, SceKernelProcessLibdb *pLibdb);

SceProcessmgrForKernel_B75FB970

Version NID
0.931.010-2.120.011 not present
2.500.071-3.610.011 0xB75FB970
3.630.000-3.740.011 0x8B4086AF

Increments Process UID Reference List counter.

Theoretically, it seems that up to 159 or 160 modules can be loaded.

// unk_bool depends of the process type
int SceProcessmgrForKernel_B75FB970(SceUID pid, SceBool unk_bool);

SceProcessmgrForKernel_0A5A2CF1

Version NID
0.931.010-2.120.011 not present
2.500.071-3.610.011 0x0A5A2CF1
3.630.000-3.740.011 0xF160B4D8

Decrements Process UID Reference List counter.

// unk_bool depends of the process type
int SceProcessmgrForKernel_0A5A2CF1(SceUID pid, SceBool unk_bool);

sceKernelGetProcessTypeForKernel

Version NID
0.990 not present
3.60 0x2ABFB6C1
3.65 0xB631C93B

Temp name was sceKernelGetProcessBudgetTypeForKernel.

SceProcessType sceKernelGetProcessTypeForKernel(SceUID pid);

sceKernelAllocRemoteToolHeapForKernel

Version NID
0.940-1.50 not present
3.60 0x3C5E2F08
3.65 0x51AF6FE6

Temp name was sceKernelAllocRemoteToolHeapMemoryForKernel, sceKernelProcessAllocKernelBudgetHeapMemoryForKernel.

Requires DIP switch 210. Allocates memory in target process' "tool" heap. Free memory with sceKernelFreeRemoteToolHeapForKernel.

void* sceKernelAllocRemoteToolHeapForKernel(SceUID pid, SceSize size);

sceKernelFreeRemoteToolHeapForKernel

Version NID
0.990 not present
3.60 0x41815DF2
3.65 0x2755CEDD

Temp name was sceKernelFreeRemoteToolHeapMemoryForKernel, sceKernelFreeRemoteProcessKernelHeapForKernel.

Requires DIP switch 210. Frees memory allocated with sceKernelAllocRemoteToolHeapMemoryForKernel.

SceInt32 sceKernelFreeRemoteToolHeapForKernel(SceUID pid, void* addr);

sceKernelGetProcessAddressSpaceForKernel

Version NID
0.931-3.60 0xC77C2085
3.65 0x9BC44974

This is a guessed name.

Returns specified process' Address Space object UID.

SceUID sceKernelGetProcessAddressSpaceForKernel(SceUID pid);

sceKernelResetGameBudgetForKernel

Version NID
3.60 0x15A93CD2
3.65 0x56657302

SceProcessmgrForKernel_E7174A8D

Version NID
3.60 0xE7174A8D
3.65 0x23EF9D8E

SceProcessmgrForKernel_381818A1

Version NID
3.60 0x381818A1
3.65 0xBC110987

SceProcessmgrForKernel_9321D0E5

Version NID
3.60 0x9321D0E5
3.65 0x9FA66773

SceProcessmgrForKernel_B7C91F6C

Version NID
3.60 0xB7C91F6C
3.65 0xDDE282CF

SceProcessmgrForKernel_1423FA86

Version NID
3.60 0x1423FA86
3.65 0xE025F5A9

Gets the value set by #SceProcessmgrForKernel_915AB8D6.

SceProcessmgrForKernel_915AB8D6

Version NID
3.60 0x915AB8D6
3.65 0xFC80A606

Sets a value to ProcessCB->data_0x288.

SceProcessmgrForKernel_89A0A910

Version NID
3.60 0x89A0A910
3.65 0x6DEC45C3

Gets the value set by #SceProcessmgrForKernel_F7FFECF3.

SceProcessmgrForKernel_F7FFECF3

Version NID
3.60 0xF7FFECF3
3.65 0x1197DB8A

SceProcessmgrForKernel_8729DE79

Version NID
3.60 0x8729DE79
3.65 0x344DDE0B

Calls SceSysmem#SceSysrootForDriver_51F9C118 and SceSysmem#SceSysrootForDriver_582616EC.

sceKernelGetProcessIdListForKernel

Version NID
3.60 0xC031BFE0
3.65 0xEFFF2975

This is a guessed name.

Wrapper to internal_subroutine(visibilityLevel, pVec, vecSize, puiNum, 2);.

int sceKernelGetProcessIdListForKernel(SceUInt32 visibilityLevel, SceUID* pVec, SceSize vecSize, SceUInt32* puiNum);

SceProcessmgrForKernel_5AC72C5A

Version NID
3.60 0x5AC72C5A
3.65 0xD5DF895D

Same as #SceProcessmgrForKernel_C7E75A8C but signals sema instead of waiting sema.

SceProcessmgrForKernel_C7E75A8C

Version NID
3.60 0xC7E75A8C
3.65 0x8321B827

Same as #SceProcessmgrForKernel_5AC72C5A but waits sema instead of signaling sema.