SceProcessmgr: Difference between revisions

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


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


Line 23: Line 18:
! Version !! Name !! World !! Visibility !! NID
! Version !! Name !! World !! Visibility !! NID
|-
|-
| 1.69-3.65 || [[SceProcessmgr#SceProcessmgr|SceProcessmgr]] || Non-secure || User || 0x2DD91812
| 0.931.010-3.740.011 || [[SceProcessmgr#SceProcessmgr|SceProcessmgr]] || Non-secure || User || 0x2DD91812
|-
|-
| 1.69-3.65 || [[SceProcessmgr#SceProcessmgrForDriver|SceProcessmgrForDriver]] || Non-secure || Kernel || 0x746EC971
| 0.931.010-3.740.011 || [[SceProcessmgr#SceProcessmgrForDriver|SceProcessmgrForDriver]] || Non-secure || Kernel || 0x746EC971
|-
|-
| 1.69-3.61 || [[SceProcessmgr#SceProcessmgrForKernel|SceProcessmgrForKernel]] || Non-secure || Kernel || 0x7A69DE86
| 0.931.010-3.610.011 || [[SceProcessmgr#SceProcessmgrForKernel|SceProcessmgrForKernel]] || Non-secure || Kernel || 0x7A69DE86
|-
|-
| 3.63-3.73 || [[SceProcessmgr#SceProcessmgrForKernel|SceProcessmgrForKernel]] || Non-secure || Kernel || 0xEB1F8EF7
| 3.630.000-3.740.011 || [[SceProcessmgr#SceProcessmgrForKernel|SceProcessmgrForKernel]] || Non-secure || Kernel || 0xEB1F8EF7
|}
|}


Line 35: Line 30:


<source lang="C">
<source lang="C">
typedef SceUInt32 SceKernelProcessType;
//Pseudo-UIDs for Budget object
#define SCE_KERNEL_PROCESS_TYPE_FULL_GAME 0x01010001
#define SCE_KERNEL_PROCESS_CURRENT_PROCESS_BUDGET 0
#define SCE_KERNEL_PROCESS_TYPE_MINI_APPLICATION 0x02010001
#define SCE_KERNEL_PROCESS_FULL_GAME_PROCESS_BUDGET 2
#define SCE_KERNEL_PROCESS_TYPE_SHELL 0x04020102
#define SCE_KERNEL_PROCESS_SYSTEM_APPLICATION_PROCESS_BUDGET 3
#define SCE_KERNEL_PROCESS_TYPE_KERNEL 0x10030103
 
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_SYSTEM_CORE 0
Line 45: Line 45:


typedef struct SceKernelProcessInfo { // size is 0x24 or 0x4C on FW 0.931, 0xE8 on FW 3.60
typedef struct SceKernelProcessInfo { // size is 0x24 or 0x4C on FW 0.931, 0xE8 on FW 3.60
SceSize size;          //!< size of this struct, make sure it's 0xE8
SceSize size;          // Size of this structure
SceUID pid;            //!< our process ID
SceUID pid;            // Process ID
int unk08;
SceUID addressSpaceId;
int unk0C;
int unk_C;             // processCreationFlags
int unk10;
int status;             // Process status. ex: suspended = 0x11/0x10011, started = |2.
SceUID ppid;            //!< parent process ID
SceUID ppid;            // Parent process ID
SceUID unk18;
SceUID budgetId;
int unk1C;             // ex:7
int cpuAffinity;       // CPU affinity. ex: 7
int unk20;             // ex:7F
int unk_20;             // might be initial priority. ex: 0x7F (127)
SceUID modid;
SceUID modid;           // Module ID
void *unk28;           // entry point?
void *entrypoint;       // Process entry point
int unk2C;             // ex:1
SceUInt32 process_type;
char name[0x1C];
char name[0x20];       // Process name. ProcessObject->loadprocessparam.module_name if non-empty, else copy from sceGUIDGetName2ForDriver if not NULL, else \0
int unk4C;
void *unk_50;           // ?maxFHCount?
void *unk50;
void *unk_54;           // ?EntryHeap_uid?
void *unk54;
SceUID entryHeapId;     // GUID/PUID EntryHeap GUID
SceUID unk58;
int unk_5C;             // ex: -1
int unk5C; // ex:-1
int unk_60;             // ?module_inhibit_state?
int unk60;
int unk_64;             // ex: 0x32
int unk64; // ex:0x32
void *KPLS_slots[0x20];
int unk68;
int unk6C;
int unk70;
void *unk74[4 * 5 + 1];
int unk78[8];
} SceKernelProcessInfo;
} SceKernelProcessInfo;


typedef struct SceKernelProcessModuleInfo { // size is ?0x28?
// Temp name was SceKernelProcessModuleInfo
typedef struct SceKernelProcessLibdb { // size is 0x24
SceUID pid;
SceUID pid;
SceModuleLibraryExportInfo_t *lib_export_info;
SceModuleLibraryExportInfo_t *lib_export_info;
Line 83: Line 79:
void *data_0x1C;
void *data_0x1C;
int cpu_addr;
int cpu_addr;
int modid; // ex: 0x1009B
} SceKernelProcessLibdb;
} SceKernelProcessModuleInfo;
 
typedef struct SceKernelBudgetInfo { // size is 0x480 on FW 3.60
    SceSize size; // Size of this structure
    SceUID pid;
    char name[0x20];
    SceUInt32 num; // 0x28
    char name2[0x20]; // 0x2C
    char some_struct_B0[0xB0]; // 0x4C
    char unk[0x35C];
} SceKernelBudgetInfo;


typedef struct SceKernelProcessOpt { // size is 0x14 or 0x1C on FW 0.931, 0x20 on FW 0.990
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
   SceSize size; // Size of this structure
   SceUInt32 unk_4;
   SceUInt32 unk_4;
Line 96: Line 101:
   SceUInt32 unk_1C;
   SceUInt32 unk_1C;
} SceKernelProcessOpt;
} 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
typedef struct SceKernelBootParam { // size is up to 0x100
Line 103: Line 128:
   SceSize stackSize; // ex: 0x4000, 0x8000
   SceSize stackSize; // ex: 0x4000, 0x8000
   SceUInt32 unk_10; // ex: 0, 0x12
   SceUInt32 unk_10; // ex: 0, 0x12
   SceUInt32 budgetId; // ex: 0, 0xC
   SceUInt32 budgetId; // ex: 0, 2, 3, 0xC
   SceUInt32 unk_1C;
   SceUInt32 unk_1C;
} SceKernelBootParam;
} SceKernelBootParam;


typedef struct SceProcessmgrInfoInternal {
typedef struct SceLibkernelAddresses { // size is 0x1C on FW 3.60
uint32_t sce_rsv[2];
  SceSize size; // Size of this structure
uint32_t data_08[2];
  int (* sceKernelExitThread)(int a1);
uint32_t data_10;
  int (* sceKernelExitDeleteThread)(int a1);
SceUID data_14;
  int (* _sceKernelExitCallback)();
SceUID data_18;
  void *unk_cb_0x10;
SceUID data_1C;
  int *pStackGuard1;
uint32_t data_20[4];
  int *pStackGuard2;
void *data_30;
} SceLibkernelAddresses;
void *data_34;
 
uint32_t data_38;
typedef unsigned long long SceKernelSysClock;
uint32_t data_3C; // ex:1
 
uint32_t data_40; // ex:1
typedef struct _SceKernelCallbackListEntry {
uint32_t data_44; // ex:0x1D0000
  struct _SceKernelCallbackListEntry* next;
void *data_48;
  SceUID callback_uid;
SceUID data_4C;
} SceKernelCallbackListEntry;
uint32_t data_50; // ex:0xFFFFFFFF
 
uint32_t data_54; // ex:7
// Temporary name was SceProcessmgrInfoInternal, SceProcessObj
uint32_t data_58; // ex:1
typedef struct _SceUIDProcessObject { // size is 0x4E0 on FW 3.60
SceUID data_5C;
  SceKernelObject* process_kobj; // Comes from scePUIDKernelCreateWithAttrForKernel
void *data_60;
  uint32_t unk4;
SceUID this_obj_uid;
  uint32_t unk8;
SceUID data_68;
  void* breakpoints_ctx; // pointer to 0x60 bytes structure - only present if dipsw 0xE4 is set
SceUID data_6C;
  int unk10;
uint32_t data_70; // ex:0xFFFFFFFF
  SceUID process_lock_sema; // "SceKernelProcessmgrProcLock", semaphore created with attribute 0x8000, max count = init count = 1
void *data_74;
  SceUID process_event_flag; // "SceKernelProcessmgrProc", event flag with attribute ATTR_MULTI | 0x8000, initial pattern = 0x10000 - LSB is set near the end of CreateProcess
SceUID data_78;
  SceUID event_lock_sema; // "SceKernelProcessEventLock", semaphore created with attribute 0x8000, max count = init count = 4
uint32_t data_7C;
 
SceUID data_80;
  SceKernelSysClock some_time_20;
SceUID data_84;
  int cpu_intr;
SceUID data_88;
  int32_t unk2C; // maybe unsigned
SceUID data_8C;
  int unk30;
SceUID data_90;
  int unk34;
uint32_t data_94;
  int unk38;
uint32_t data_98; // ex:0x7F
  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
SceKernelModuleProcInfo_t *proc_module_info;
  SceProcessType process_type; // Value of the process_type argument passed to sceKernelCreateProcess
uint32_t data_A0; // ex:0x40
  uint32_t process_creation_flags; // Value of the opt->flags value passed to sceKernelCreateProcess (0 if NULL)
uint8_t data_A4[0x10]; // rnd data?
  SceKernelObject* entry_heap_obj; // Result of sceUIDtoObject(entry_heap_uid);
uint32_t data_B4;
  SceUID entry_heap_uid; // Result of sceUIDCreateEntryHeapForKernel
SceSelfAuthInfo self_auth_info;
  SceUID unk50;
int data_148;
  uint32_t affinity_mask; // Seems to be bit X -> core X
char thread_name[0x20];
  uint32_t unk58; // some atomic global variable related to affinity_mask
int thread_priority;
  SceUID address_space_uid; // Result of sceKernelCreateAddressSpaceForKernel
SceSize stack_size;
  SceKernelObject* address_space_obj; // Result of sceGUIDGetObjectForDriver(address_space_uid)
uint8_t data_174[0x4C];
  ScePID process_id; // Result of scePUIDKernelCreateWithAttrForKernel(SceUIDProcessClass, ...)
void *module_proc_param;
  ScePID parent_process_id; // PID of caller to sceKernelCreateProcess, can be overridden in SceKernelCreateProcessOpt
SceUID data_1C4;
  SceUID main_thread_uid; // UID of the first thread created in process
SceUID data_1C8;
  SceUID unk70;
SceUID data_1CC;
  void* partition_budget_thing; // Pointer to 0x74 structure related to budgets and partitions - depends on process type
SceUID data_1D0; // ex:-1
  SceUID partition_budget_thing_uid; // Comes from a field in struct above
SceUID data_1D4; // for user
  int32_t unk7C; // maybe unsigned
SceUID data_1D8; // for user
  SceUID unique_heap_uid; // "unique: %s", variable size, type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_10C0D006
SceUID data_1DC; // for user
  SceUID kpls_heap_uid; // "kpls: %s", 0x40000 size, allocated in kpls memblock
// more
  SceUID CDialog_heap_uid; // "CDialog: %s", 0x1000 size, type SCE_KERNEL_MEMBLOCK_TYPE_KERNEL_RW_CDIALOG
} SceProcessmgrInfoInternal; // size is 0x4E0
  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>
</source>


== SceProcessmgr ==
== SceProcessmgr ==


=== _sceKernelRegisterExitAddress ===
=== sceKernelLibcTime ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0x0278DFB7
| 0.931.010-3.740.011 || 0x0039BE45
|}
|}


=== sceKernelLibcTime ===
<source lang="C">int sceKernelLibcTime(SceUInt32 *pTime);</source>
{| class="wikitable"
|-
! Version !! NID
|-
| 1.69-3.60 || 0x0039BE45
|}


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


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


Line 203: Line 374:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x143BC4D6
| 0.931.010-1.06 || not present
|-
| 1.500.151-3.740.011 || 0x143BC4D6
|}
|}


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


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


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


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


=== sceKernelLibcGettimeofday ===
=== sceKernelLibcGettimeofday ===
Line 245: Line 432:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x4B879059
| 0.931.010-3.740.011 || 0x4B879059
|}
 
<source lang="C">int sceKernelLibcGettimeofday(SceKernelTimeval *tv, SceKernelTimezone *tz);</source>
 
=== _sceKernelRegisterExitAddress ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931.010-0.990 || 0x0278DFB7
|-
| 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 253: Line 456:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x56C2E8FF
| 0.931.010-0.990 || not present
|-
| 1.000.071-3.740.011 || 0x56C2E8FF
|}
|}
<source lang="C">int _sceKernelRegisterLibkernelAddresses(SceLibkernelAddresses *pAddresses);</source>


=== sceKernelRegisterProcessTerminationCallback ===
=== sceKernelRegisterProcessTerminationCallback ===
Line 261: Line 468:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x5EC77870
| 0.931.010-0.940 || not present
|-
| 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-3.60 || 0x7AA73378
| 0.931.010-0.940 || not present
|-
| 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-3.60 || 0x89DA0967
| 0.931.010-3.740.011 || 0x7AA73378
|}
|}


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


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


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


=== sceKernelGetStdin ===
=== sceKernelGetStdin ===
Line 309: Line 544:
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xC1727F59
| 0.931.010-3.740.011 || 0xC1727F59
|}
|}


Returns the fd of the current process stdin.
Returns the file descriptor of the current process stdin.


<source lang="C">SceUID sceKernelGetStdin(void);</source>
<source lang="C">SceUID sceKernelGetStdin(void);</source>
Line 321: Line 556:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xCD248267
| 0.931.010-3.740.011 || 0xCD248267
|}
|}


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


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


=== sceKernelGetStdout ===
=== sceKernelGetStdout ===
Line 351: Line 594:
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xE5AA625C
| 0.931.010-3.740.011 || 0xE5AA625C
|}
|}


Returns the fd of the current process stdout.
Returns the file descriptor of the current process stdout.


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


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


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


=== sceKernelGetStderr ===
=== sceKernelGetStderr ===
Line 387: Line 640:
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0xFA5E3ADA
| 0.931.010-3.740.011 || 0xFA5E3ADA
|}
|}


Returns the fd of the current process stderr.
Returns the file descriptor of the current process stderr.


<source lang="C">SceUID sceKernelGetStderr(void);</source>
<source lang="C">SceUID sceKernelGetStderr(void);</source>
Line 399: Line 652:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xDB4CC1D0
| 0.931.010-1.692.000 || not present
|-
| 1.800.071-3.740.011 || 0xDB4CC1D0
|}
|}


Line 407: Line 662:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xEC8DDAAD
| 0.931.010-2.06 || not present
|-
| 2.100.081-3.740.011 || 0xEC8DDAAD
|}
|}


Line 415: 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 423: Line 682:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xBCA437CD
| 0.931.010-1.81 || not present
|-
| 2.000.081-3.740.011 || 0xBCA437CD
|}
|}


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


Line 439: 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 ==
=== 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 ===
=== sceKernelGetCurrentProcessIdForDriver ===
Line 451: Line 978:
| 0.931 || 0x3D4C250E
| 0.931 || 0x3D4C250E
|-
|-
| 3.60 || not present
| 3.60-3.65 || not present
|}
|}


Line 459: Line 986:


<source lang="C">SceUID sceKernelGetCurrentProcessIdForDriver(void);</source>
<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 ===
=== sceKernelAllocRemoteProcessHeapForDriver ===
Line 465: Line 1,002:
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x00B1CA0F
| 0.931-3.65 || 0x00B1CA0F
|}
|}


3.60
<source lang="C">void *sceKernelAllocRemoteProcessHeapForDriver(SceUID pid, SceSize size, SceKernelHeapMemoryOpt *pOpt);</source>
<source lang="C">
void *sceKernelAllocRemoteProcessHeapForDriver(SceUID pid, SceSize len, void *pOpt);
</source>


=== sceKernelFreeRemoteProcessHeapForDriver ===
=== sceKernelFreeCurrentProcessHeapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x9C28EA9A
| 0.931-3.65 || 0xFC2A424E
|}
|}


<source lang="C">int sceKernelFreeRemoteProcessHeapForDriver(SceUID pid, void *ptr);</source>
<source lang="C">int sceKernelFreeCurrentProcessHeapForDriver(void *ptr);</source>


=== sceKernelSetProcessStatusForDriver ===
=== sceKernelFreeRemoteProcessHeapForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x1D0F3185
| 0.931-3.65 || 0x9C28EA9A
|}
|}


<source lang="C">int sceKernelSetProcessStatusForDriver(SceUID pid, SceUInt32 status);</source>
<source lang="C">int sceKernelFreeRemoteProcessHeapForDriver(SceUID pid, void *ptr);</source>


=== sceKernelGetProcessInfoForDriver ===
=== sceKernelGetProcessInfoForDriver ===
Line 510: Line 1,044:
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x65B120B8
| 0.931-3.65 || 0x65B120B8
|}
|}


This function queries the status of a given process. Davee is unsure what exactly the bits represent. It seems 0x10 is related to suspension status, but he's not confident in that assumption.
This function queries the status of a given process. It seems that 0x10 is related to suspension status.


<source lang="C">
<source lang="C">
Line 519: Line 1,053:
  * @brief      Get the status of a given process.
  * @brief      Get the status of a given process.
  * @param[in]  pid The process ID to query.
  * @param[in]  pid The process ID to query.
  * @param[out]  status The bit field status of the process.
  * @param[out]  pStatus The status of the process (?bit field?).
  * @return      Zero on success, < 0 on error.
  * @return      Zero on success, < 0 on error.
  */
  */
int sceKernelGetProcessStatusForDriver(SceUID pid, int *status);
int sceKernelGetProcessStatusForDriver(SceUID pid, SceUInt32 *pStatus);
</source>
</source>
=== sceKernelSetProcessStatusForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.931-3.65 || 0x1D0F3185
|}
<source lang="C">int sceKernelSetProcessStatusForDriver(SceUID pid, SceUInt32 status);</source>


=== sceKernelIsProcessSuspendingForDriver ===
=== sceKernelIsProcessSuspendingForDriver ===
Line 530: Line 1,074:
! Version !! NID
! Version !! NID
|-
|-
| 0.931-3.60 || 0x0CC5B30C
| 0.931-3.65 || 0x0CC5B30C
|}
|}


Line 542: Line 1,086:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x02179E12
| 3.60-3.65 || 0x02179E12
|}
|}


<source lang="C">unsigned int sceKernelGetProcessTimeLowCoreForDriver(void);</source>
<source lang="C">SceUInt32 sceKernelGetProcessTimeLowCoreForDriver(void);</source>


=== sceKernelGetProcessTimeWideCoreForDriver ===
=== sceKernelGetProcessTimeWideCoreForDriver ===
Line 552: Line 1,096:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x82D94BE9
| 3.60-3.65 || 0x82D94BE9
|}
|}


<source lnag="C">uint64_t sceKernelGetProcessTimeWideCoreForDriver(void);</source>
<source lnag="C">SceUInt64 sceKernelGetProcessTimeWideCoreForDriver(void);</source>


=== sceKernelGetProcessTimeCoreForDriver ===
=== sceKernelGetProcessTimeCoreForDriver ===
Line 562: Line 1,106:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xEC283166
| 3.60-3.65 || 0xEC283166
|}
|}


<source lang="C">int sceKernelGetProcessTimeCoreForDriver(uint64_t *pTime);</source>
<source lang="C">int sceKernelGetProcessTimeCoreForDriver(SceUInt64 *pTime);</source>


=== sceKernelRegisterKPLSForDriver ===
=== sceKernelRegisterKPLSForDriver ===
Line 572: Line 1,116:
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.60 || 0x3801D7D6
| 0.940-3.65 || 0x3801D7D6
|}
|}


Temp name was sceKernelCreateProcessLocalStorageForDriver.
Temp name was sceKernelCreateProcessLocalStorageForDriver.


Return ?key?.
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>
<source lang="C">int sceKernelRegisterKPLSForDriver(const char *name, SceSize size);</source>
Line 586: Line 1,130:
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xEE694840
| 0.990-3.65 || 0xEE694840
|}
|}


Line 598: Line 1,142:
! Version !! NID
! Version !! NID
|-
|-
| 0.940-3.68 || 0xAF80F39C
| 0.931-3.68 || 0xAF80F39C
|}
|}


Line 605: Line 1,149:
This functions gets Remote Kernel Process Local Storage.
This functions gets Remote Kernel Process Local Storage.


<source lang="C">int sceKernelGetRemoteKPLSForDriver(SceUID pid, int key, void **kpls_addr, int force_create);</source>
<source lang="C">
// 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);
</source>


=== sceKernelGetRemoteProcessTimeForDriver ===
=== sceKernelGetRemoteProcessTimeForDriver ===
Line 612: Line 1,161:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xC074EB31
| 3.60-3.65 || 0xC074EB31
|}
|}


<source lang="C">int sceKernelGetRemoteProcessTimeForDriver(SceUID pid, uint64_t *pTime);</source>
<source lang="C">int sceKernelGetRemoteProcessTimeForDriver(SceUID pid, SceUInt64 *pTime);</source>


=== sceKernelIsCDialogAvailableForDriver ===
=== sceKernelIsCDialogAvailableForDriver ===
Line 632: Line 1,181:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xF7A8BB25
| 3.60-3.65 || 0xF7A8BB25
|}
|}


<source lang"C">int sceKernelIsGameBudgetForDriver(void);</source>
<source lang"C">int sceKernelIsGameBudgetForDriver(void);</source>


=== SceProcessmgrForDriver_C715591F ===
=== sceKernelHasBusyProcessForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xC715591F
| 0.931.010-1.06 || not present
|-
| 1.500.151-3.740.011 || 0xC715591F
|}
|}


Called by "sceProcessMgrLaunchAppFor".
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 ===
=== sceKernelGetCompiledSdkVersionByPidForDriver ===
Line 652: Line 1,209:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xD141C076
| 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"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x8A85FA28
|}
 
<source lang="C">void *sceKernelAllocRemoteCDialogHeapForDriver(SceUID pid, SceSize length, void *opt);</source>
 
=== sceKernelFreeRemoteCDialogHeapForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xDD0A58D1
|}
 
<source lang="C">int sceKernelFreeRemoteCDialogHeapForDriver(SceUID pid, void *ptr);</source>
 
=== sceKernelGetProcessResourceLimitForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xB80DBD53
|}
|}


<source lang="C">int sceKernelGetCompiledSdkVersionByPidForDriver(SceUID pid, int *result);</source>
<source lang="C">int sceKernelGetProcessResourceLimitForDriver(SceUID pid, void *result);</source>
 
=== sceKernelSetInitialPMCRForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x61B9B6FA
|}
 
Temp name was sceKernelSetProcessPMCRForDriver.
 
<source lang="C">int sceKernelSetInitialPMCRForDriver(SceUID pid, SceUInt32 value);</source>
 
=== sceKernelGetPMCRForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x594319C7
|}
 
This is a guessed name. Temp name was sceKernelGetProcessPMCRForDriver.
 
<source lang="C">int sceKernelGetPMCRForDriver(SceUID pid);</source>
 
=== sceKernelSetInitialPMUSERENRForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0xB1C3EFCA
|}
 
<source lang="C">int sceKernelSetInitialPMUSERENRForDriver(SceUID pid, SceUInt32 value);</source>
 
=== sceKernelSetPMUSERENRForDriver ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60-3.65 || 0x6599E5D9
|}
 
<source lang="C">int sceKernelSetPMUSERENRForDriver(SceUID pid, SceUInt32 value);</source>


== SceProcessmgrForKernel ==
== SceProcessmgrForKernel ==
=== 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 ===
=== sceKernelCreateProcessForKernel ===
Line 665: Line 1,391:
|-
|-
| 0.931-3.60 || 0x71CF71FD
| 0.931-3.60 || 0x71CF71FD
|-
| 3.65 || 0x68068618
|}
|}


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


<source lang="C">
<source lang="C">
Line 687: Line 1,417:
|-
|-
| 0.931-3.60 || 0x38FB7BCA
| 0.931-3.60 || 0x38FB7BCA
|-
| 3.65 || 0x5137B783
|}
|}


Line 707: Line 1,439:
|-
|-
| 0.990-3.60 || 0x36728B16
| 0.990-3.60 || 0x36728B16
|-
| 3.65 || 0x026F3E87
|}
|}


Temp name was sceKernelStartProcess2ForKernel.
Temp name was sceKernelStartProcess2ForKernel.
Used by [[SceAppMgr]]


<source lang="C">
<source lang="C">
Line 718: Line 1,454:
  * @param[in]  argSize Size of the arguments block.
  * @param[in]  argSize Size of the arguments block.
  * @param[in]  pArgBlock Arguments block.
  * @param[in]  pArgBlock Arguments block.
  * @param[in]  flags Unknown flags.
  * @param[in]  process module flags. 1:inhibit shared and load libgxm_dbg_es4.suprx Instead of libgxm_es4.suprx
  * @return      Return value of the started process on success, < 0 on error.
  * @return      Return value of the started process on success, < 0 on error.
  */
  */
Line 730: Line 1,466:
|-
|-
| 0.931-3.60 || 0x31834C49
| 0.931-3.60 || 0x31834C49
|-
| 3.65 || 0x1E5B38E5
|}
|}


Line 754: Line 1,492:
|-
|-
| 0.990-3.60 || 0x8F320D2B
| 0.990-3.60 || 0x8F320D2B
|-
| 3.65 || 0x5A57766C
|}
|}


Line 779: Line 1,519:
|-
|-
| 0.931-3.60 || 0xB9E68092
| 0.931-3.60 || 0xB9E68092
|-
| 3.65 || 0xD991C85E
|}
|}


Temp name was sceKernelGetProcessKernelBufForKernel.
Temp name was sceKernelGetProcessKernelBufForKernel.


Gets the process privileged only buffer.
Gets the process object associated to a PID.


<source lang="C">void *sceKernelUIDtoProcessForKernel(SceUID pid);</source>
<source lang="C">SceUIDProcessObject* sceKernelUIDtoProcessForKernel(ScePID pid);</source>


=== sceKernelGetProcessMainThreadForDebuggerForKernel ===
=== sceKernelGetProcessMainThreadForDebuggerForKernel ===
Line 793: Line 1,535:
|-
|-
| 0.931-3.60 || 0x95F9ED94
| 0.931-3.60 || 0x95F9ED94
|-
| 3.65 || 0xD20553C6
|}
|}
Temp name was sceKernelGetProcessMainThreadForKernel.


<source lang="C">
<source lang="C">
Line 811: Line 1,557:
| 0.931 || 0x3EC5FDF4
| 0.931 || 0x3EC5FDF4
|-
|-
| 3.60 || not present
| 3.60-3.74 || not present
|}
|}


Line 829: Line 1,575:
|-
|-
| 0.990-3.60 || 0x6AECE4CD
| 0.990-3.60 || 0x6AECE4CD
|-
| 3.65 || 0x93B8E785
|}
|}


Line 849: Line 1,597:
|-
|-
| 0.990-3.60 || 0x080CDC59
| 0.990-3.60 || 0x080CDC59
|-
| 3.65 || 0x6894499C
|}
|}


Line 868: Line 1,618:
|-
|-
| 0.931-3.60 || 0xB13E3C7B
| 0.931-3.60 || 0xB13E3C7B
|-
| 3.65 || 0x8FB7FD50
|}
|}


Line 885: Line 1,637:
|-
|-
| 0.931-3.60 || 0xE0A9C9C4
| 0.931-3.60 || 0xE0A9C9C4
|-
| 3.65 || 0xEFBCF15B
|}
|}


Line 902: Line 1,656:
|-
|-
| 0.990-3.60 || 0x4CA7DC42
| 0.990-3.60 || 0x4CA7DC42
|-
| 3.65 || 0x905621F9
|}
|}


Line 911: Line 1,667:
! Version !! NID
! Version !! NID
|-
|-
| 0.931-0.990 || 0x5ABA2772
| 0.931.010-2.120.011 || 0x5ABA2772
|-
|-
| 3.60 || not present
| 2.500.071-3.740.011 || not present
|}
|}


Line 924: Line 1,680:
|-
|-
| 0.931-3.60 || 0xE4C83B0D
| 0.931-3.60 || 0xE4C83B0D
|-
| 3.65 || 0x324F2B20
|}
|}


Temp name was sceKernelGetProcessAuthidForKernel.
Temp name was sceKernelGetProcessAuthidForKernel.


<code>SceSelfAuthInfo</code> type is described in [[SceSysmem#sceKernelSysrootGetProcessSelfAuthInfoForKernel|sceKernelSysrootGetProcessSelfAuthInfoForKernel]].
<code>SceSelfAuthInfo</code> type is described in [[SceSblSsSmComm#Types]].


<source lang="C">int sceKernelGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *self_auth_info);</source>
<source lang="C">int sceKernelGetProcessSelfAuthInfoForKernel(SceUID pid, SceSelfAuthInfo *self_auth_info);</source>
Line 938: Line 1,696:
|-
|-
| 3.60 || 0x9E38C556
| 3.60 || 0x9E38C556
|-
| 3.65 || 0xB0E076D6
|}
|}


Line 946: Line 1,706:
|-
|-
| 3.60 || 0xDE8B8B5E
| 3.60 || 0xDE8B8B5E
|-
| 3.65 || 0x014F5113
|}
=== sceKernelGetCurrentTickForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xD17D6110
|-
| 3.65 || 0xD231AE5B
|}
This is a guessed name.
=== _sceKernelGetCurrentTickForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xACBAAB10
|-
| 3.65 || 0x3EBC93BB
|}
|}


=== sceKernelGetClassForUidForKernel ===
This is a guessed name.
 
=== sceKernelGetUIDProcessClassForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 954: Line 1,740:
|-
|-
| 3.60 || 0xC6820972
| 3.60 || 0xC6820972
|-
| 3.65 || 0x98AE4BC8
|}
|}


<source lang="C">SceClass* sceKernelGetClassForUidForKernel(SceUID pid);</source>
Temp name was sceKernelGetClassForUid2ForKernel, sceKernelGetProcessClassForKernel.
 
<source lang="C">SceClass *sceKernelGetUIDProcessClassForKernel(void);</source>


=== sceKernelKillProcessForDebuggerForKernel ===
=== sceKernelKillProcessForDebuggerForKernel ===
Line 964: Line 1,754:
|-
|-
| 0.931-3.60 || 0x90C27779
| 0.931-3.60 || 0x90C27779
|-
| 3.65 || 0x148E23E3
|}
|}


Line 974: Line 1,766:
|-
|-
| 0.931-3.60 || 0xA1071106
| 0.931-3.60 || 0xA1071106
|-
| 3.65 || 0xF388F05C
|}
|}


<source lang="C">int sceKernelKillProcessForKernel(SceUID pid, int status);</source>
<source lang="C">
// option: 0: flag 0x2, 1: flag 0x20, 2: flag 0x40
int sceKernelKillProcessForKernel(SceUID pid, SceInt32 option);
</source>


=== sceKernelGetMMUL1InfoForKernel ===
=== sceKernelGetMMUL1InfoForKernel ===
Line 985: Line 1,782:
| 0.931-0.990 || 0xC526C6F2
| 0.931-0.990 || 0xC526C6F2
|-
|-
| 3.60 || not present
| 3.60-3.74 || not present
|}
|}


Line 997: Line 1,794:
| 0.931 || 0xE2681221
| 0.931 || 0xE2681221
|-
|-
| 3.60 || not present
| 3.60-3.74 || not present
|}
|}


Line 1,008: Line 1,805:
|-
|-
| 0.931-3.60 || 0x0EE2658E
| 0.931-3.60 || 0x0EE2658E
|-
| 3.65 || 0x0B9BE51B
|}
|}


<source lang="C">int sceKernelWaitProcessEndForKernel(SceUID pid, int *res, SceUInt32 *pTimeout);</source>
<source lang="C">int sceKernelWaitProcessEndForKernel(SceUID pid, int *pResult, SceUInt32 *pTimeout);</source>
 
=== sceKernelWaitProcessEventCompletionForKernel ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0x6A7FF80A
|-
| 3.65 || 0x0F23A5ED
|}


=== sceKernelGetPHWPForKernel ===
=== sceKernelGetPHWPForKernel ===
Line 1,018: Line 1,827:
|-
|-
| 0.931-3.60 || 0xC55BF6C3
| 0.931-3.60 || 0xC55BF6C3
|-
| 3.65 || 0x6898F7A7
|}
|}


Line 1,028: Line 1,839:
|-
|-
| 0.931-3.60 || 0x54D7B16A
| 0.931-3.60 || 0x54D7B16A
|-
| 3.65 || 0xB2421F93
|}
|}


Line 1,038: Line 1,851:
|-
|-
| 0.931-3.60 || 0xA9C20202
| 0.931-3.60 || 0xA9C20202
|-
| 3.65 || 0x060DA466
|}
|}


Line 1,048: Line 1,863:
|-
|-
| 0.931-3.60 || 0x59FA3216
| 0.931-3.60 || 0x59FA3216
|-
| 3.65 || 0x597E6D2C
|}
|}


Line 1,058: Line 1,875:
|-
|-
| 0.931-3.60 || 0x34FA9645
| 0.931-3.60 || 0x34FA9645
|-
| 3.65 || 0xE5097B4F
|}
|}


Line 1,068: Line 1,887:
|-
|-
| 0.931-3.60 || 0x3C4D2889
| 0.931-3.60 || 0x3C4D2889
|-
| 3.65 || 0xA5E55217
|}
|}


<source lang="">
Returns the parent process's PID.
// returns the parent process PID
 
int sceKernelGetProcessParentIdForKernel(SceUID pid);
<source lang="C">ScePID sceKernelGetProcessParentIdForKernel(SceUID pid);</source>
</source>


=== sceKernelSuspendProcessForDebuggerForKernel ===
=== sceKernelSuspendProcessForDebuggerForKernel ===
Line 1,081: Line 1,901:
|-
|-
| 0.931-3.60 || 0x234A80B6
| 0.931-3.60 || 0x234A80B6
|-
| 3.65 || 0x4232517A
|}
|}


Line 1,097: Line 1,919:
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xCF83C23B
| 0.931-3.60 || 0xCF83C23B
|-
| 3.65 || 0x1400A1F8
|}
|}


<source lang ="C">
<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.
  * @brief      Suspend a running process.
  * @param[in]  pid The process to suspend.
  * @param[in]  pid The process to suspend.
  * @param[in]  status The status to set to the process.
  * @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.
  * @return      Zero on success, < 0 on error.
  */
  */
int sceKernelSuspendProcessForKernel(SceUID pid, int status);
int sceKernelSuspendProcessForKernel(SceUID pid, int status, int *pTimeout);
</source>
</source>


Line 1,116: Line 1,950:
|-
|-
| 0.931-0.990 || 0xCF71D9DD
| 0.931-0.990 || 0xCF71D9DD
|-
| 3.60-3.74 || not present
|}
|}


Return Process Image on success.
Returns Process Image on success.


<source lang="C">void *sceKernelGetProcessImageForDebuggerForKernel(SceUID pid);</source>
<source lang="C">void *sceKernelGetProcessImageForDebuggerForKernel(SceUID pid);</source>
Line 1,128: Line 1,964:
|-
|-
| 0.931-0.990 || 0xC4E349D5
| 0.931-0.990 || 0xC4E349D5
|-
| 3.60-3.74 || not present
|}
|}


Line 1,141: Line 1,979:
|-
|-
| 0.931-3.60 || 0x76C89783
| 0.931-3.60 || 0x76C89783
|-
| 3.65 || 0x00DBA872
|}
|}


Line 1,151: Line 1,991:
|-
|-
| 0.931-3.60 || 0x05F74BAF
| 0.931-3.60 || 0x05F74BAF
|-
| 3.65 || 0xDC18FCEF
|}
|}


<source lang="C">
<source lang="C">
typedef struct SceKernelBudgetOpt { // size is 0x18 on FW 0.931
typedef struct SceKernelBudgetOpt { // size is 0x18 on FW 0.931-3.60
   SceSize size; // Size of this structure
   SceSize size; // Size of this structure
   uint32_t unk_4;
   SceBool unk_4; // cdram related
   uint32_t unk_8;
   SceSize ddrmain_size;
   uint32_t main_size;
   SceSize main_size;
   uint32_t cdialog_size;
   SceSize cdialog_size; // ddrpcnt
   uint32_t cdram_size;
   SceSize cdram_size; // or maybe budgetId
} SceKernelBudgetOpt;
} SceKernelBudgetOpt;


Line 1,172: Line 2,014:
|-
|-
| 0.931-3.60 || 0xE5A60577
| 0.931-3.60 || 0xE5A60577
|-
| 3.65 || 0x459A223B
|}
|}


Line 1,187: Line 2,031:
|-
|-
| 0.990-3.60 || 0xF3C4A83B
| 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
|}
|}


=== sceKernelGetProcessModuleInfoForKernel ===
Temp name was sceKernelGetProcessModuleInfoForKernel.
 
<source lang="C">SceKernelProcessLibdb* sceKernelGetProcessLibdbForKernel(SceUID pid);</source>
 
=== sceKernelSetProcessLibdbForKernel ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.03 || not present
| 2.10-3.60 || 0x7D8D7885
|-
|-
| 3.60 || 0xC1C91BB2
| 3.65 || 0x72F25C14
|}
|}


<source lang="C">SceKernelProcessModuleInfo *sceKernelGetProcessModuleInfoForKernel(SceUID pid);</source>
Temp name was sceKernelSetProcessModuleInfoForKernel.


== To find ==
<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
|}


*sceKernelPermitProcEvent
Increments Process UID Reference List counter.
*sceKernelInhibitProcEvent


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
|}
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.