SceAppMgr

From Vita Development Wiki
Jump to navigation Jump to search

Contents

Module

Known NIDs

Version Name World Privilege NID
1.69 SceAppMgr Non-secure Kernel 0x69876CDE
3.60 SceAppMgr Non-secure Kernel 0xDBB29DB7

Libraries

Known NIDs

Version Name World Visibility NID
1.69-3.60 SceAppMgrForDriver Non-secure Kernel 0xDCE180F8
1.69-3.60 SceAppMgr Non-secure User 0x8AF17416
1.69-3.60 SceSharedFb Non-secure User 0x32A0442E
1.69 SceSharedFbForDriver Non-secure Kernel 0x9B443ECC

Types

AppId

Some functions take an AppId as argument.

ID Description
-1 Corresponds to pid 0
-2 Current app
-3 Unknown
-4 Unknown
-5 Unknown
-6 Unknown

App Run status

runStatus:
set: status & 0xfffff00f | runStatus_new
get: status & f

running: 2
suspended: 0x20
resumed: 0x10

debuggerRunStatus:
set: status & 0xfff0ffff | debuggerRunStatus_new
get: status & f0000

activeness:
set: status & 0xfffffff0 | activeness_new
get: status & 0xff0

anything (0x30, 2) -> 1
0x10 -> 0x11
0x200 -> 0

WaiterExistentFlag:
set: status | 0x1000
unset: & 0xffff0fff

TABLE:
0 nothing
1 SCE_APP_RUN_FLAG_DEACTIVATE
2 SCE_APP_RUN_FLAG_ACTIVATE
0x10 resumed
0x20 suspended
0x30 SCE_APP_RUN_FLAG_CREATED
0x100 SCE_APP_RUN_FLAG_NOEXIST
0x200 unk (activeness)
0x400 unk (activeness)
0x300 SCE_APP_RUN_FLAG_RESERVED
0x500 unk (activeness)
0x800 unk (runState)
0x1000 WaiterExistentFlag
0x10000 suspend debuggerRunStatus
0x20000 kill debuggerRunStatus

SceAppMgr Mount IDs

MountId real path
(X is an incremental number)
virtual mount point
(X is randomized)
Function to call for mounting Used by
?0x3F? ux0:data/near/gift gift0: Seen in sceAppMgrAppDataMountByIdForDriver ?SceNear?
0x64 ux0:picture photo0: automounted
or sceAppMgrAppDataMount
or sceAppUtilPhotoMount
SceEmailApp,
SceHostCollaboService,
ScePsp2Compat,
SceSettings,
SceWebBrowser,
SceWebUIPlugin, by NPXS10036
0x64 ? ? sceAppMgrPhotoMountForDriver
sceAppMgrPhotoMount
sceAppMgrAppDataMountForDriver
0x65 ur0:user/XX/psnfriend adXXXXXXXXXXXX: sceAppMgrAppDataMount SceFriend,
SceFriendListDialogPlugin,
SceInvitationDlgPlugin,
SceNpGameCustomDataDPlugin,
SceNpMessageDialogPlugin,
SceNpProfile2DialogPlugin,
ScePsnMail,
SceShell
0x66 ur0:user/XX/psnmsg adXXXXXXXXXXXX: sceAppMgrAppDataMount SceInvitationDlgImplPlugin,
SceMsgMiddleWare,
SceNpGameCustomDataDlgImpl,
SceNpMessage,
SceNpMessageDlgImplPlugin
0x67 ur0:user/XX/near adXXXXXXXXXXXX: sceAppMgrAppDataMount SceNear,
SceNearAutoCheckin,
SceNearAutoLocation,
SceNearProfile,
SceNearUtilService, by NPXS10036
0x68 ? ?
? ur0:user/XX/grpmsg adXXXXXXXXXXXX:
? ur0:contacts ?
0x69 ux0:music music0: automounted
or sceAppMgrAppDataMount
or sceAppUtilMusicMount
SceAvMediaService,
SceHostCollaboService,
SceMusicBrowser,
SceShell
0x6A ? adXXXXXXXXXXXX: sceAppMgrAppDataMountById
0x6B ? adXXXXXXXXXXXX: sceAppMgrAppDataMountById
0x6C ux0:calendar adXXXXXXXXXXXX: sceAppMgrAppDataMount SceCalendar,
SceCalendarBg,
SceCalendarDialogPlugin,
SceEmailApp
0x6D ux0:video video0: sceAppUtilExtVideoMount
or sceAppMgrAppDataMount
0x6E ux0:appmeta/new (only while app promoting)
ux0:appmeta/<TITLEID>
adXXXXXXXXXXXX: mounted when installing app / refreshing LiveArea of an app
0x6F tm0:nphome adXXXXXXXXXXXX: mounted by NPXS10010 when playing a video bought on PSStore, mounted by NPXS10036 when downloading a video bought on PSStore (NPXS10002). SceLibMarlin, SceLibMarlinPb
0x70 ux0:book ?adXXXXXXXXXXXX:? sceAppUtilBookMount Reader™ (PCSC80012)
0xC8 ur0:temp/sqlite tdXXXXXXXXXXXX: mounted by some system apps
0xC9 ur0:temp/attach tdXXXXXXXXXXXX: mounted by some games
0xCA ux0:pspemu ms0: sceAppMgrPspSaveDataRootMount mounted by NPXS19999 (SceShell) when asked by CMA or PspEmu or SceGameManual or Store
0xCB ? tdXXXXXXXXXXXX: sceAppMgrWorkDirMount
0xCC ur0:temp/checkout tdXXXXXXXXXXXX: mounted by NPXS10002 (SceStoreBrowser or SceCheckoutBrowser)
0xCD ux0:cache/<TITLEID> cache0: sceAppUtilCacheMount
or sceAppMgrWorkDirMountById
0xCE ur0:temp/webbrowser tdXXXXXXXXXXXX: mounted by NPXS10003 (SceWebBrowser)
0xCF ? tdXXXXXXXXXXXX: sceAppMgrWorkDirMountById ?
? ux0:mtp ? ? ?MTP?
0x12C ? ? sceAppMgrTrophyMount
sceAppMgrTrophyMountForDriver
?
0x12E ur0:user/XX/trophy/data/sce_trop trophy_sys0: ?sceNpTrophyCreateContext?
sceAppMgrTrophyMount
sceAppMgrTrophyMountForDriver
mounted by NPXS19999 (SceShell) when asked by app or games
0x12F ur0:user/XX/trophy/data/<COMMID> trophy_dat0: sceAppMgrTrophyMountById
0x130 ?ur0:user/XX/trophy/data/db? trophy_dbk0: sceAppMgrTrophyMountById
0x190 ux0:mms/photo adXXXXXXXXXXXX: sceAppMgrMmsMount
sceAppMgrMmsMountForDriver
mounted by NPXS10004, by NPXS10036
0x191 ux0:mms/music adXXXXXXXXXXXX: sceAppMgrMmsMount
sceAppMgrMmsMountForDriver
?mounted by NPXS10009?
0x192 ux0:mms/video adXXXXXXXXXXXX: sceAppMgrMmsMount
sceAppMgrMmsMountForDriver
mounted by NPXS10010, by NPXS10036
0x1F4 ? ?
0x1F8 ? sdimport0:
0x1F9 ? sdimport_tmp0:
0x258 ? ? sceAppMgrLoopBackMount
0x384 ? ?
0x3E8 ux0:temp/fakepkg/expand/<TITLEID> (PKG installer promoting),
ux0:bgdl/t/XXXXXXXX/<TITLEID>/0000 (bgdl promoting),
vs0:app/<TITLEID>
gpXXXXXXXXXXXX:,
app0:
automounted ?
0x3E8
ux0:app/<TITLEID>,
gro0:app/<TITLEID>
gpXXXXXXXXXXXd: sceAppMgrGameDataMountForDriver
0x3E9 ux0:temp/fakepkg/expand/<TITLEID> (PKG installer promoting),
ux0:bgdl/t/XXXXXXXX/<TITLEID>/0000 (bgdl promoting)
gpXXXXXXXXXXXX:,
app0: (mounted over /app/ app0:)
0x3E9 ux0:patch/<TITLEID>,
grw0:patch/<TITLEID>
gpXXXXXXXXXXXd: sceAppMgrGameDataMountForDriver
0x3EA ux0:temp/fakepkg/expand/<TITLEID> (PKG installer promoting),
ux0:bgdl/t/XXXXXXXX/<TITLEID>/0000 (bgdl promoting)
gpXXXXXXXXXXXX:,
addcont0: - addcont1:
automounted by SceAppMgr
or sceAppUtilAddcontMount
or sceAppUtilDrmOpen
or sceAppUtilAddcontForceAddcontMount
0x3EA gro0:addcont/<TITLEID> ? sceAppMgrAddContMount
0x3EA ux0:addcont/<TITLEID>,
grw0:addcont/<TITLEID>
? sceAppMgrAddContAddMount
sceAppMgrAddContMount
0x3EA gro0:acinst/<titleid> ? sceAppMgrAcInstGetAcdirParamForDriver
0x3EB ux0:addcont/<TITLEID>,
grw0:addcont/<TITLEID>
? sceAppMgrAddContMount
0x3EC ux0:theme/<CONTENTID> tmXXXXXXXXXXXX: sceAppMgrThemeDataMount
0x3ED ux0:user/XX/savedata/<TITLEID> savedata0:
?savedata1:?
automounted by SceAppMgr
0x3ED ?any path? tsXXXXXXXXXXXX: sceAppMgrFakeSaveDataCreateMountForDriver
sceAppMgrGetSaveDataInfoForSpecialExport
?fake_package_installer?
?SceContentManager?
0x3ED ?any path? ? sceAppMgrLoadSaveDataSystemFile ?fake_package_installer?
0x3ED ux0:user/XX/savedata_plus/work/<TITLEID> tsXXXXXXXXXXXX: sceAppMgrCloudDataDstCreateMountForDriver
0x3ED ux0:/user/XX/savedata/<TITLEID> tsXXXXXXXXXXXX:
tsXXXXXXXXXXXXd
sceAppMgrCloudDataSrcMountForDriver
sceAppMgrUpdateSaveDataParam
0x3ED grw0:savedata/<titleid> tsXXXXXXXXXXXX:
tsXXXXXXXXXXXXd
sceAppMgrCloudDataSrcMountForDriver
sceAppMgrUpdateSaveDataParam
0x3ED ux0:/user/XX/savedata_vc/<titleid>,
ux0:/user/XX/savedata/<titleid>
? sceAppMgrSaveDataAddMount
0x3EE ur0:user/XX/savedata/<TITLEID> savedata0:
?savedata1:?
sceAppMgrSaveDataAddMount
or sceAppUtilSaveDataMount
0x3EF vs0:sys/external sdXXXXXXXXXXXX: automounted
0x3F0 vs0:data/external sdXXXXXXXXXXXX: automounted

Types

typedef char[0x10] SceTitleId;

// Linked list of these items is controlled by common function that is responsible for PFS mounting.
// This function (on 3.60, segment 0, offset 0x19B51) is used by all other mount functions in SceAppMgr.
// Linked list is used as lookup by callback that is set by sceIoSetPathMappingFunctionForDriver.
// Pointer of address of first entry is: on 3.60, segment 1, offset 0x3470C.
typedef struct pfs_mount_t { // size is 0x1D0 (known)
   int mount_id;
   char path[0x124]; // path used for PFS mount (like ux0:app/<TITLEID>)
   ScePfsRndDriveId pfs_rnd_drive_id; // PFS mount drive name - used internally by iofilemgr to connect to vfs_nodes through vfs_node_info?
   SceTitleId titleId;
   SceUInt64 auth_ids[0x10]; // array of auth ids
   pfs_mount_t *prev; // pointer to prev item in the list or 0
   pfs_mount_t *next; // pointer to next item in the list or 0
} pfs_mount_t;

struct appmgr_mount_t { // size is 0x24 (known)
   pfs_mount_t *this_pfs_mount;
   SceFiosOverlayID overlay_id; // overlay for redirecting <appmgr_rnd_drive_id> to <this_pfs_mount->pfs_rnd_drive_id>0: (if this_pfs_mount is not a 0x3E9 patch mount point )
                                 // or <mctx->prev_pfs_mount->pfs_rnd_drive_id>0: to <this_pfs_mount->pfs_rnd_drive_id>0: (if this_pfs_mount is a 0x3E9 patch mount point )
                                 // or <mctx->prev_pfs_mount->path> to <this_pfs_mount->path>

   ScePfsRndDriveId appmgr_rnd_drive_id; // used for appmgr mount - returned when executing appmgr mount function
   pfs_mount_t* prev_pfs_mount; // other pfs mount with same mount_id and appmgr_rnd_drive_id if mount_id is 0x3EA or 0x3E8
   appmgr_mount_t* prev; // pointer to prev item in the list or 0
   appmgr_mount_t* next; // pointer to next item in the list or 0
} appmgr_mount_t;

typedef struct appmgr_mount_holder_t {
   int unk0;
   appmgr_mount_t *first_virt_mount; // start of the list for appmgr mounts
} appmgr_mount_holder_t;

typedef struct titleId_item {
   SceTitleId titleId;
} titleId_item;

// most importantly contains rif_info and keystone
typedef struct phys_ctx_t { // size is 0x508 (known)
   int unk0[0x58];
   int flag_160;
   int unk164;
   int unk168;
   int unk16C;
   int unk170;
   char physical_mountpoint[0xC];
   int unk180[0x46];
   char prefix_298[4];
   int flag_29C;
   int unk2A0;
   int unk2A4;
   rif_info rif;
   char keystone_318[0x60];
   SceTitleId titleId_378;
   SceTitleId titleid_388;
   titleId_item addContTitleIds[8];
   titleId_item saveDataTitleIds[8];
   char unk498[0x70];
} phys_ctx_t;

typedef struct sub_ctx_23C2960_C {
   char unk0[0x128];
   int unk128;
   int unk12C;
   int unk130;
   int unk134;
   int unk138;
   int unk13C;
   char unk140[0x3F8];
   int unk538;
   int unk53C;
   char unk540;
   char unk541;
   char unk542;
   char unk543;
   int unk544;
   int unk548;
} sub_ctx_23C2960_C;

typedef struct sub_ctx_23C2960_558_548 {
   int unk0;
   int unk4;
   int unk8;
   int unkC;
   int unk10;
   int unk14;
   int unk18;
   int unk1C;
   int unk20;
   int unk24;
   int unk28;
   int unk2C;
} sub_ctx_23C2960_558_548;

// most importantly holds appmgr_mount_holder_t
// which is a root for appmgr mountpoints
typedef struct sub_ctx_23C2960_558 {
   char appName[32];
   SceUID pid;
   int unk24;
   appmgr_mount_holder_t mctx_hldr_28;
   phys_ctx_t phys_ctx_30;
   sub_ctx_23C2960_558_548 unk548;
} sub_ctx_23C2960_558;

typedef struct sub_ctx_23C2960_AFC_10A4 {
   int unk0;
   int unk4;
   char unk8;
   char unk9;
   char unkA;
   char unkB;
   char unkC;
   char unkD;
   char unkE;
   char unkF;
} sub_ctx_23C2960_AFC_10A4;

typedef struct sub_ctx_23C2960_AFC {
   char unk_0[4260];
   sub_ctx_23C2960_AFC_10A4 unk_10A4;
} sub_ctx_23C2960_AFC;

typedef struct sub_ctx_23C2960_1BC0_14_7EC {
   int unk0;
   int unk4;
   int unk8;
   int unkC;
   int unk10;
   int unk14;
   int unk18;
   int unk1C;
   int unk20;
   int unk24;
   int unk28;
   int unk2C;
   int unk30;
   int unk34;
   int unk38;
   int unk3C;
} sub_ctx_23C2960_1BC0_14_7EC;

typedef struct sub_ctx_23C2960_1BC0_14 {
   char unk0[2028];
   sub_ctx_23C2960_1BC0_14_7EC unk7EC;
} sub_ctx_23C2960_1BC0_14;

struct sub_ctx_23C2960_1BC0 {
   __int16 unk0;
   __int16 unk2;
   int unk4;
   int unk8;
   SceUID SceAppMgrAppMutex_uid;
   SceUID current_thread_10;
   sub_ctx_23C2960_1BC0_14 unk14;
} sub_ctx_23C2960_1BC0;

typedef struct sub_ctx_23C2960_2400 {
   int unk0;
   int unk4;
   int unk8;
   char unkC[4];
} sub_ctx_23C2960_2400;

typedef struct ctx_23C2960_SceAppInfoInternal360 { // size is 0x2410 (known)
   int appId;
   int unk4;
   int unk8;
   sub_ctx_23C2960_C unkC;
   sub_ctx_23C2960_558 unk_558;
   int flags_AC0;
   int unk_AC4;
   int is_this_process_AC8;
   int unk_ACC;
   int appmgr_0x10000001_event_indicator_AD0;
   int appmgr_0x10000002_event_indicator_AD4;
   int appmgr_0x10000003_event_indicator_AD8;
   int appmgr_0x20000001_event_indicator_ADC;
   int appmgr_0x20000004_event_indicator_AE0;
   int appmgr_0x10000101_0x10000102_event_indicator_AE4;
   int appmgr_0x10000004_event_indicator_AE8;
   int appmgr_0x10000006_event_indicator_AEC;
   int appmgr_0x10000005_event_indicator_AF0;
   int appmgr_0x20000010_event_indicator_AF4;
   int unk_AF8;
   sub_ctx_23C2960_AFC unk_AFC;
   int unk_1BB0;
   int unk_1BB4;
   __int64 timewide_1BB8;
   sub_ctx_23C2960_1BC0 unk_1BC0;
   sub_ctx_23C2960_2400 unk_2400;
} ctx_23C2960;

typedef ctx_23C2960 global_ctx_item;

typedef struct generic_mount_ctx {
  SceTitleId titleId;
  char passCode[32];
  char mountDrive[16];
} generic_mount_ctx;

#define SCE_APPMGR_MAX_APP_NAME_LENGTH		(31)		/* Maximum app name length */

/* System event ID */
#define SCE_APPMGR_SYSTEMEVENT_ON_RESUME			(0x10000003)
#define SCE_APPMGR_SYSTEMEVENT_ON_STORE_PURCHASE		(0x10000004)
#define SCE_APPMGR_SYSTEMEVENT_ON_NP_MESSAGE_ARRIVED		(0x10000005)
#define SCE_APPMGR_SYSTEMEVENT_ON_STORE_REDEMPTION		(0x10000006)

/* Event ID (old SDK) */
#define SCE_APP_EVENT_UNK0					(0x00000003)
#define SCE_APP_EVENT_ON_ACTIVATE				(0x10000001)
#define SCE_APP_EVENT_ON_DEACTIVATE				(0x10000002)
#define SCE_APP_EVENT_UNK1					(0x10000300)
#define SCE_APP_EVENT_REQUEST_QUIT				(0x20000001)
#define SCE_APP_EVENT_UNK2					(0x30000003)

/* Error number */
#define SCE_APPMGR_ERROR_BUSY			(0x80802000)	/* Busy */
#define SCE_APPMGR_ERROR_INTERNAL		(0x80802001)	/* Internal error */
#define SCE_APPMGR_ERROR_PARAM			(0x80802002)	/* The parameter is invalid. It is necessary to deal with it by the time of application development */
#define SCE_APPMGR_ERROR_STATE			(0x80802013)	/* Invalid state */
#define SCE_APPMGR_ERROR_NULL_POINTER		(0x80802016)	/* NULL pointer */
#define SCE_APPMGR_ERROR_INVALID		(0x8080201a)	/* Invalid parameter */
#define SCE_APPMGR_ERROR_INVALID_SELF_PATH	(0x8080201e)	/* Invalid SELF path */
#define SCE_APPMGR_ERROR_TOO_LONG_ARGV		(0x8080201d)	/* argv is too long */
#define SCE_APPMGR_ERROR_BGM_PORT_BUSY		(0x80803000)	/* The BGM port was occupied and could not be secured. Entered the queue */

/* Infobar state */
typedef enum SceAppMgrInfoBarVisibility {
	SCE_APPMGR_INFOBAR_VISIBILITY_INVISIBLE = 0,
	SCE_APPMGR_INFOBAR_VISIBILITY_VISIBLE   = 1
} SceAppMgrInfoBarVisibility;

typedef enum SceAppMgrInfoBarColor {
	SCE_APPMGR_INFOBAR_COLOR_BLACK  = 0,
	SCE_APPMGR_INFOBAR_COLOR_WHITE  = 1
} SceAppMgrInfoBarColor;

typedef enum SceAppMgrInfoBarTransparency {
	SCE_APPMGR_INFOBAR_TRANSPARENCY_OPAQUE      = 0,
	SCE_APPMGR_INFOBAR_TRANSPARENCY_TRANSLUCENT = 1
} SceAppMgrInfoBarTransparency;

#define SCE_APP_MGR_MAX_EVENT_PARM_LENGTH	(56)		/* Maximum event parameter length */

/* Event structure */
typedef struct SceAppMgrEvent { // size is 0x64
	int event;						/* Event ID */
	SceUID appId;						/* Application ID. Added when required by the event */
	char  param[SCE_APP_MGR_MAX_EVENT_PARM_LENGTH];		/* Parameters to pass with the event */
} SceAppMgrEvent;

/* System event structure */
typedef struct SceAppMgrSystemEvent { // size is 0x64
	int systemEvent;					/* Event ID */
	union {
		SceUInt8 reserved[60];
	} data;
} SceAppMgrSystemEvent;

typedef struct SceAppMgrAppState { // size is 128 bytes
	SceUInt32 systemEventNum;
	SceUInt32 appEventNum;
	SceBool isSystemUiOverlaid;

	SceUInt8 reserved[128 - sizeof(SceUInt32)*2 - sizeof(SceBool)];
} SceAppMgrAppState;

typedef struct SceAppMgrAppInfo { // size is 128 bytes
	char appName[32];

	SceUInt8 reserved[128 - 32];
} SceAppMgrAppInfo;

typedef struct SceAppMgrNetworkDisconnectionWarningDialogStateOptParam {
	SceUInt8 reserved[128];
} SceAppMgrNetworkDisconnectionWarningDialogStateOptParam;

typedef struct SceAppMgrLoadExecOptParam {
	int reserved[256/4];
} SceAppMgrLoadExecOptParam;

// First element is at offset 0x22110 on FW 0.990
typedef struct SceAppInfo_internal { // (size is 0xADC, 4 elements max) on FW 0.990
	SceUID appId;					// 0x0 - Application ID - (-1)
	char appName[32];				// 0x4
	char appPath[256];				// 0x24
	SceSize budgetSize;				// 0x124
	SceSize phycontSize;				// 0x128
	SceUInt32 budget_related;			// 0x12C
	SceUInt32 launchMode;				// 0x130 - (0)
	SceUInt32 budgetType;				// 0x134 - (0)
	SceUInt32 processAttr;				// 0x138 - (0)
	SceUInt32 unk_13C;				// 0x13C
	SceUInt32 unk_140;				// 0x140 - (0)
	SceUID processId;				// 0x144 - Process ID - (0)
	SceUInt32 state;				// 0x148 - (-1)
	SceUID evfId;					// 0x14C - Specify the identifier of the event flag. - (-1)
	SceUInt32 unk_150;				// 0x150 - (0)
	appmgr_mount_t *mount				// 0x154
	char buf_158[0x114];				// 0x158
	SceUInt32 unk_26C;				// 0x26C - (0)
	SceUInt32 unk_270;				// 0x270 - (0)
	SceUInt32 unk_274;				// 0x274
	SceUInt32 status;				// 0x278 - bgm_priority (& ?), runStatus (& 0xf), activeness (& ff0) - (0x101)
	SceUInt32 unk_27C;				// 0x27C - (0)
	SceUInt32 unk_280;				// 0x280
	SceUInt32 unk_284;				// 0x284 - (0)
	SceUInt32 firstCustomEventId_maybe;		// 0x288
	SceUInt32 lastCustomEventId_maybe;		// 0x28C
	SceAppMgrEvent *firstCustomEvent;		// 0x290 - heap memory address of size 0x14 (the 5 following events on FW 0.990)
	SceUInt32 event_on_activate;			// 0x294
	SceUInt32 event_on_deactivate;			// 0x298
	SceUInt32 systemevent_on_resume;		// 0x29C
	SceUInt32 systemevent_on_store_purchase;	// 0x2A0
	SceUInt32 systemevent_on_np_message_arrived;	// 0x2A4
	SceUInt32 appEventNum;				// 0x2A8
	SceAppMgrAppParam appParam			// 0x2AC
	SceUInt32 unk_6AC;				// 0x6AC
	SceUInt32 unk_6B0;				// 0x6B0
	SceUInt32 unk_6B4;				// 0x6B4
	char buf_6B8[0x400];				// 0x6B8
	SceUInt32 unk_AB8;				// 0xAB8 - (0)
	SceUID appMutexId;				// 0xABC - SceAppMgrAppMutex uid
	SceUInt32 currentBgmState;			// 0xAC0 - (0)
	SceUInt32 unk_AC4;				// 0xAC4 - (-1)
	SceUInt32 unk_AC8;				// 0xAC8
	SceUInt32 unk_ACC;				// 0xACC
	SceUInt32 callbackOnLaunch;			// 0xAD0 - (-1)
	SceUInt32 unk_AD4;				// 0xAD4 - (0)
	SceUInt32 unk_AD8;				// 0xAD8
} SceAppInfo_internal;

typedef struct SceAppMgrAppStatus { // size is 0x40 on FW 0.990
	SceUInt32 unk_0;				// 0x0
	SceUInt32 launchMode;				// 0x4
	SceUInt32 bgm_priority_or_status;		// 0x8
	char appName[32];				// 0xC
	SceUInt32 unk_2C;				// 0x2C
	SceUID appId;					// 0x30 - Application ID
	SceUID processId;				// 0x34 - Process ID
	SceUInt32 status_related_1;			// 0x38
	SceUInt32 status_related_2;			// 0x3C
} SceAppMgrAppStatus;

typedef struct SceAppMgrAppParam { // size is 0x400 on FW 0.990
	char data[0x400];
} SceAppMgrAppParam;

typedef struct SceAppMgrBootParam { // size is 0xC on FW 0.990
	SceUint unk_0;				// 0x0
	SceUint unk_4;				// 0x4
	SceUint unk_8;				// 0x8
} SceAppMgrBootParam;

typedef struct SceSharedFbCreate { // size is 0x18
    SceSize AllocMemSize;
    int unk_04;
    int unk_08;
    int unk_0C;
    int unk_10;
    int unk_14;
} SceSharedFbCreate;

typedef struct SceSharedFbInfo { // size is 0x58
    int unk_00;		// cdram base?
    int unk_04;		// ex: 0x500000
    int unk_08;		// cdram base?
    int unk_0C;
    void *unk_10;
    int unk_14;
    int unk_18;
    int unk_1C;
    int unk_20;
    int unk_24;		// 960
    int unk_28;		// 960
    int unk_2C;		// 544
    int unk_30;
    int unk_34;		// unk idx
    int unk_38;
    int unk_3C;
    int unk_40;
    int unk_44;
    int unk_48;
    int unk_4C;
    int unk_50;
    int unk_54;
} SceSharedFbInfo;

Data segment layout

On 3.60 :

Address Size Description
0x00000 0x4 SceUID SceAppMgrApp pool if size 0x1000
0x00004 0x4 SceUID SceAppMgrApp mutex
0x00008 0x4 SceUID SceAppMgrMount pool if size 0x10000
0x0000C 0x4 SceUID SceAppMgrMount mutex
0x00010 0x4 SceUID SceAppMgrSaveData pool if size 0xA000
0x00014 0x4 SceUID SceAppMgrSaveData mutex
0x00018 0x4 SceUID SceAppMgrPhoto mutex
0x0001C 0x4 int process local storage SceAppMgrSafeMemory of size 0x10000
0x00020 0x4 SceUID SceAppMgrSafeMemory mutex
0x00024 0x4 int process local storage SceAppMgrAppInfoCache of size 0x400
0x00028 0x4 unknown
0x0002C 0x4 unknown
0x00030 0x4 SceUID SceAppMgrDbgShellEventCount sema
0x00034 0x4 SceUID SceAppMgrBottomSema sema
0x00038 0x4 SceUID SceAppMgrLiveAreaOperation mutex
0x0003C 0x4 SceUID SceAppMgrLiveAreaOpeResultMx mutex
0x00040 0x4 SceUID SceAppMgrLiveAreaOpeResultCd mutex
0x00044 0x4 unknown
0x00048 0x4 unknown
0x0004C 0x4 unknown
0x00050 0x4 unknown
0x00054 0x4 unknown
0x00058 0x4 unknown
0x0005C 0x4 unknown
0x00060 0x4 unknown
0x00064 0x4 SceUID SceAppMgrUpdtNtfy sema
0x00068 0x4 SceUID SceAppMgrProcessStateUpdater thread
0x0006C 0x4 SceUID SceAppMgrGcListener thread
0x00070 0x434 unknown
0x004A4 0x4 SceUID SceAppMgrCore mutex
0x004A8 0x4 SceUID current thread
0x004AC 0x4 SceUID SceAppMgrCore2 mutex
0x004B0 0x4 unknown
0x004B4 0x4 SceUID SceAppMgrCoreKM mutex
0x004B8 0x48 unknown
0x00500 0x2D140 global_ctx_item[20] - array of global contexts most likely for each running app
0x2D640 0x1824 memset chunk
0x2EE64 0x4 unknown
0x2EE68 0x4 SceUID SceAppMgrAbort event flag
0x2EE6C 0x4 SceUID SceAppMgrCoredump event flag
0x2EE70 0x4 SceUID SceAppMgrAbortHandler thread
0x2EE74 0x4 unknown
0x2EE78 0xA78 memset chunk of size 0xA7C
0x2F8F0 0x4 SceUID SceAppMgrAudioUdt mutex (part of 0xA7C chunk)
0x2F8F4 0x14 unknown
0x2F908 0x4 SceUID SceAppMgrEv event flag
0x2F90C 0x4 0x01
0x2F910 0x4 0
0x2F914 0x4 SceUID SceAppMgrEv event flag
0x2F918 0x4 0x02
0x2F91C 0x4 0
0x2F920 0x4 SceUID SceAppMgrEv event flag
0x2F924 0x4 0x04
0x2F928 0x4 0
0x2F92C 0x4 SceUID SceAppMgrEv event flag
0x2F930 0x4 0x08
0x2F934 0x4 0
0x2F938 0x4 SceUID SceAppMgrEv event flag
0x2F93C 0x4 0x10
0x2F940 0x4 0
0x2F944 0x4 SceUID SceAppMgrEv event flag
0x2F948 0x4 0x20
0x2F94C 0x4 0
0x2F950 0x4 SceUID SceAppMgrEv event flag
0x2F954 0x4 0x40
0x2F958 0x4 0
0x2F95C 0x298 unknown
0x2FBF4 0x2D00 memset chunk
0x328F4 0x1640 unknown
0x33F34 4 int ux0: mount event id
0x33F38 0x120 unknown
0x34058 4 int grw0: mount event id
0x3405C 0x104 unknown
0x34160 4 int gro0: mount event id
0x34164 0x424 unknown
0x34588 0x20 some struct
0x345A8 0x164 unknown
0x3470C 0x4 pfs_mount_t* pointer to list of items
0x34710 0x6E0 unknown
0x34DF0 0x20 some struct
0x34E10 0x14 unknown
0x34E24 4 void* 0x720 buffer allocated from 0x22A0000 pool
0x34E28 0x30 unknown
0x34E58 4 void* 0x400 buffer allocated from 0x22A0010 pool
0x34E5C 4 void* 0x8000 buffer allocated from 0x22A0010 pool
0x34E60 0x54 unknown
0x34EB4 0x368 memset chunk of size 0x3AC
0x3521C 0x40 fast_mutex SceSharedFb (part of 0x3AC chunk)
0x3525C 0x4 unknown (part of 0x3AC chunk)
0x35260 0x42FC unknown

pfs_mount_t Parser

pfs_mount_t** first_entry_addr;
tai_module_info_t appmgr_info;
taiGetModuleInfoForKernel(KERNEL_PID, "SceAppMgr", &appmgr_info);
int res=1;
switch (appmgr_info.module_nid) {
	case 0xDBB29DB7: // 3.60 retail
		res = module_get_offset(KERNEL_PID, appmgr_info.modid, 1, 0x3470C, &first_entry_addr);
		break;
	default:
		break;
}
if (!res) {
	pfs_mount_t* entry = *first_entry_addr;
	log_write((char*)entry, sizeof(pfs_mount_t));
	while ((int)entry->next > 0) {
		entry = entry->next;
		log_write((char*)entry, sizeof(pfs_mount_t));
	}
}

How app, patch and addcont is mounted

Global mountpoint list in AppMgr

mounts

Explanation

AppMgr operates with such term as mount_id.

Different ids correspond to different paths and are described at SceAppMgr_Mount_IDs

There are many different mount functions in AppMgr which mount different paths with corresponding mount_id.

However on the bottom level there is only one single function that is responsible for all mount operations.

It is located in segment 0 at offset 0x19B51 on 3.60.

int create_mountpoint_base(SceUID pid, appmgr_mount_holder_t *mount_ctx_holder, unsigned int mount_id, SceTitleId *title_id, char *physical_path, char *mount_drive, char *klicensee, char *mount_point_result);
  • pid - current process pid.
  • mount_ctx_holder - root holder of appmgr_mount_t (stored in segment 1).
  • mount_id - mount id to use for this mount operation.
  • title_id - title id of the application.
  • physical_path - path like ux0:app/<TITLEID>
  • mount_drive - virtual drive like app0:. This may be also randomly generated. This argument goes to appmgr_rnd_drive_id. This argument is optional. When empty - will be generated by create_mountpoint_base.
  • klicensee - klicensee for this mount operation. This argument is optional.
  • mount_point_result - mountpoint for the user. Returned from appmgr_rnd_drive_id.

AppMgr maintains two parallel lists in segment 1.

One of the lists contains appmgr_mount_t items.

These are the items that are exposed to user of AppMgr library.

appmgr_rnd_drive_id is what is returned as mount_point_result when user calls some mount functions in AppMgr.

appmgr_rnd_drive_id in many cases is randomly generated (but not always).

Other list is an internal list of pfs_mount_t items.

These items store arguments that are used for calling PFS mount.

Each item also has randomly generated pfs_rnd_drive_id in form of PDXXXXXXXXXXXXd.

When create_mountpoint_base is called, it creates both appmgr_mount_t and pfs_mount_t items and links them with this_pfs_mount.

Each item is put in a corresponding list.

This mapping relation is important and shows how AppMgr mountpoint translates to PfsMgr mountpoint.

All basic relations are shown on a diagram example with black color.

However there is another prev_pfs_mount relation between items which is especially important for sceAppMgrGameDataMountForDriver.

This relation is illustrated on diagram with red color and applies to pairs of mount_ids: 0x3E8,0x3E9 or 0x3EA, 0x3EB.

Such relation is used to setup multiple mount levels. For example app (0x3E8) with patch (0x3E9) on top. Or addcont (ro) (0x3EA) with addcont (rw) (0x3EB) on top.

Additionally multiple mount levels are controlled using fios overlays, hence overlay_id in appmgr_mount_t.

Overlay is a concept of filesystem path redirection/remapping. Additional description is at SceFios2Kernel

Table below shows how overlays are created for 0x3E8, 0x3E9, 0x3EA, 0x3EB for given appmgr_mount_t

mount_id folder overlay_type src dst
0x3E8 app SCE_FIOS_OVERLAY_TYPE_OPAQUE <this_pfs_mount->pfs_rnd_drive_id>0: (0x3E8) appmgr_rnd_drive_id
0x3E9 patch SCE_FIOS_OVERLAY_TYPE_TRANSLUCENT <this_pfs_mount->pfs_rnd_drive_id>0: (0x3E9) <prev_pfs_mount->pfs_rnd_drive_id>0: (0x3E8)
0x3EA addcont (ro) SCE_FIOS_OVERLAY_TYPE_OPAQUE <this_pfs_mount->pfs_rnd_drive_id>0: (0x3EA) appmgr_rnd_drive_id
0x3EB addcont (rw) SCE_FIOS_OVERLAY_TYPE_TRANSLUCENT <this_pfs_mount->pfs_rnd_drive_id>0: (0x3EB) <prev_pfs_mount->pfs_rnd_drive_id>0: (0x3EA)

Overlay is created with sceFiosKernelOverlayAddForProcessForDriver

This results in a path remapping, where when user reads from appmgr_rnd_drive_id virtual drive, he will actually read from <this_pfs_mount->pfs_rnd_drive_id>0: (0x3E8).

However if patch directory was present, further path remapping will happen, so that user will read from <this_pfs_mount->pfs_rnd_drive_id>0: (0x3E9).

SceAppMgrForDriver

sceAppMgrAcInstGetAcdirParamForDriver

Version NID
3.60 0x474AABDF
  • mount PFS drive 0 to path gro0:acinst/<titleid> with mountid 0x3EA
  • read keystone from <mountpoint>:sce_sys/keystone into outputData
  • extract klicensee from gro0:license/addcont/<titleid>/<dlc_folder>/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.rif
  • execute pfs ioctl command 0x4402 with klicensee
  • execute pfs ioctl command 0x4403
  • read gro0:acinst/<titleid>/<dlc_folder>/sce_sys/param.sfo
  • read game title into outputData
typedef struct acinst_res {
  char keystone[0x60];
  char game_title[0x80];
} acinst_res;

int sceAppMgrAcInstGetAcdirParamForDriver(SceTitleId *titleId, const char *dlc_folder, acinst_res *outputData);

sceAppMgrAppDataMountByIdForDriver

Version NID
3.60 0x5E311F71

Only valid appmgr mount ids are: 0x68, 0x6A, 0x6B, 0x6E

int sceAppMgrAppDataMountByIdForDriver(int mountId, SceTitleId *titleId, char *mountPoint);

sceAppMgrAppDataMountForDriver

Version NID
3.60 0xB1D3C287

Only valid appmgr mount ids are: 0x64, 0x65, 0x66, 0x67, 0x69, 0x6C, 0x6D, 0x6F, 0x70

int sceAppMgrAppDataMountForDriver(int mountId, char *mountPoint);

sceAppMgrAppMountForDriver

Version NID
3.60 0xEF0C9533

sceAppMgrAppUmountForDriver

Version NID
3.60 0x1DE3B7C4

sceAppMgrBgdlSetQueueStatusForDriver

Version NID
3.60 0x5B1BE482

sceAppMgrCheckContentInstallPeriodForDriver

Version NID
3.60 0x193784A9

sceAppMgrCheckPfsMountedForDriver

Version NID
3.60 0x0B1BEEE0

sceAppMgrCloudDataClearMcIdForDriver

Version NID
3.60 0xEC408FEF

sceAppMgrCloudDataCreateHeaderForDriver

Version NID
3.60 0xED87F191

sceAppMgrCloudDataDstCreateMountForDriver

Version NID
3.60 0xB3816B42
  • check authid SceShell(0x2800000000000001), SceContentManager(0x280000000000002D)
  • do some ioctl check 0x3001
  • create directory ux0:user/XX/savedata_plus/work/<TITLEID>
  • create sealedkey
  • retrieve klicensee
  • pure mount PFS PDXXXXXXXXXXXX mountpoint to pfs mount ux0:user/XX/savedata_plus/work/<TITLEID> path and authid 0x2800000000000001 or 0x280000000000002D
  • create directory ux0:user/XX/savedata_plus/work/<TITLEID>/sce_sys
  • write file ux0:user/XX/savedata_plus/work/<TITLEID>/sce_sys/sealedkey
  • unmount PFS PDXXXXXXXXXXXX mountpoint
  • mount PFS tsXXXXXXXXXXXX: mountpoint to ux0:user/XX/savedata_plus/work/<TITLEID> path with mountid 0x3ED
int sceAppMgrCloudDataDstCreateMountForDriver(SceTitleId *titleId, char *mountPoint);

sceAppMgrCloudDataGetMcIdForDriver

Version NID
3.60 0x1286AF64

sceAppMgrCloudDataSetMcIdForDriver

Version NID
3.60 0x0B94BB90

sceAppMgrCloudDataSetupKeyForDriver

Version NID
3.60 0x2FAA6ABD

sceAppMgrCloudDataSrcMountForDriver

Version NID
3.60 0x6D4D6FFE
  • check auth id SceShell(0x2800000000000001), SceContentManager(0x280000000000002D), SceDailyCheckerBg(0x2800000000000039)
  • select path depending on mode: ux0:/user/XX/savedata/<titleid> or grw0:savedata/<titleid>
  • read sealedkey from ux0:/user/XX/savedata/<titleid>/sce_sys/sealedkey or grw0:savedata/<titleid>/sce_sys/sealedkey
  • mount PFS tsXXXXXXXXXXXX: mountpoint to ux0:/user/XX/savedata/<TITLEID> or grw0:savedata/<titleid> path with mountid 0x3ED
// mode probably allows values 1,2,3
// 1 probably selects ux0:
// 2, 3 probably selects grw0:
int sceAppMgrCloudDataSrcMountForDriver(int mode, SceTitleId *titleId, char *mountPoint);

sceAppMgrCloudDataVerifyHeaderForDriver

Version NID
3.60 0x55D48190

sceAppMgrDebugSettingNotifyUpdateForDriver

Version NID
3.60 0x7554330F

sceAppMgrDrmCloseForDriver

Version NID
3.60 0x088670A6

sceAppMgrDrmOpenForDriver

Version NID
3.60 0xEA75D157
typedef struct drm_opts {
	uint32_t size;
	char addcont_id[20];
	char mount_point[10];
} drm_opts;
int sceAppMgrDrmOpenForDriver(drm_opts *drmOpt);

sceAppMgrFakeSaveDataCreateMountForDriver

Version NID
3.60 0x12FC3FA8
  • check authid fake_package_installer(0x280000000000002E)
  • resolve overlay for <path>
  • create <path> directory
  • do some ioctl check 0x3001
  • create sealedkey
  • pure mount PFS PDXXXXXXXXXXXX mountpoint to pfs mount <path> path without klicensee and authid 0x280000000000002E
  • create directory <path>/sce_sys
  • write file <path>/sce_sys/sealedkey
  • write empty file <path>/sce_sys/keystone
  • unmount PFS PDXXXXXXXXXXXX mountpoint
  • mount PFS tsXXXXXXXXXXXX: mountpoint to <path> path with mountid 0x3ED
int sceAppMgrFakeSaveDataCreateMountForDriver(const char *path, const char *mountPoint);

sceAppMgrGameDataMountForDriver

Version NID
3.60 0xCE356B2D
  • read and parse <app_path>/sce_sys/param.sfo
  • check that path does not start from one of these host0:, ux0:data, vs0:
  • create <app_path>/sce_pfs folder if required
  • check if <app_path>/sce_sys/clearsign exists
  • get klicensee from rif (from fixed name at <app_path>/license/app/<titleid> or from <rif_file_path>)
  • check <app_path>/sce_sys/package/head.bin vs <app_path>/sce_sys/clearsign
  • mount PFS gpXXXXXXXXXXXd: mountpoint to <app_path> path with mountid 0x3E8
  • override with another mount PFS gpXXXXXXXXXXXd: mountpoint to <patch_path> path with 0x3E9 if <patch_path> exists
  • check that path does not start with ux0:data
  • create ux0:patch/<TITLEID> or grw0:patch/<TITLEID> path
  • override with another mount PFS gpXXXXXXXXXXXd: mountpoint to ux0:patch/<TITLEID> or grw0:patch/<TITLEID> path with 0x3E9 if path exists
//derived from _sceAppMgrGameDataMount
int sceAppMgrGameDataMountForDriver(char *app_path, char *patch_path, char *rif_file_path, char *mount_point);

sceAppMgrGetBootParamForDriver

Version NID
3.60 0xD2541B4A

sceAppMgrGetPfsProcessStatusForDriver

Version NID
3.60 0xE72D2A4A

sceAppMgrGetSystemDataFileForDriver

Version NID
1.69-3.60 0xAEC49533

sceAppMgrIsExclusiveProcessRunningForDriver

Version NID
3.60 0xA888C2DC

sceAppMgrLaunchAppByPathForDriver

Version NID
0.990-3.60 0xB0A37065

Loads a SELF at a given path with optional arguments. Arguments is a null-separated string. Arguments are passed directly to the app as a list of strings (char * const argv[]).

Special arguments are listed below:

Argument Param Description
-budget one of "big", "game", "sys", "shell", "small", "mini" App budget (memory allocation size)
-memsize decimal number Memory size
-la_type "B" or "C" LiveArea type
-bg none Run in background
-nonsuspendable none Non-suspendable
-titleid string (8 chars, 9 bytes) TitleId
-phcontmemsize decimal number Physical contiguous memory size
-livearea_off none No LiveArea
-exit_to string (title id) App to resume upon exit
-param string Param
-usecdlg none Use CDRAM large
-port "1" Unknown
typedef struct SceAppMgrLaunchParam {
    size_t size; //<! set to sizeof(SceAppMgrLaunchParam)
    unsigned int unk_4; //<! set to 0x80000000 to break on launch
    unsigned int unk_8;
    unsigned int unk_C;
    unsigned int unk_10;
    unsigned int unk_14;
    unsigned int unk_18;
    unsigned int unk_1C;
    unsigned int unk_20;
    unsigned int unk_24;
    unsigned int unk_28;
    unsigned int unk_2C;
    unsigned int unk_30;
} SceAppMgrLaunchParam;

/**
 * @brief       Launch an application for debugging
 * 
 * @param[in] path  Path to the executable to load
 * @param[in] args  Arguments to pass to the executable and to configure appmgr
 * @param[in] arg_size  Size of the args passed in
 * @param[in] type  Set to 0x80000000 for debugging launch
 * @param[in] param  Pointer to launch params
 * @param unk unknown, set to nullptr
 * 
 * @return   pid on success, else < 0.
 */
int sceAppMgrLaunchAppByPathForDriver(const char *path, const char *args, unsigned arg_size, unsigned int type, const SceAppMgrLaunchParam *param, void *unk);

Example:

SceAppMgrLaunchParam param;
param.size = sizeof(param);
sceAppMgrLaunchAppByPathForDriver("ux0:temp/bootstrap.self", "-budget\0big\0-nonsuspendable\0-livearea_off\0", 0x2A, 0, param, NULL);

sceAppMgrLoadSafeMemoryForDriver

Version NID
1.69-3.60 0xFAF3DAAA

sceAppMgrLocalBackupGetOfflineIdForDriver

Version NID
3.60 0x61B13981

sceAppMgrLocalBackupVerifyOfflineHeaderForDriver

Version NID
3.60 0x62E98C42

sceAppMgrMmsMountForDriver

Version NID
3.60 0x13D54107
int sceAppMgrMmsMountForDriver(int mountId, char *mountPoint);

sceAppMgrPhotoMountForDriver

Version NID
3.60 0x43A35729

Call sceAppMgrAppDataMountForDriver with mount_id 0x64.

typedef struct sceAppMgrPhotoMountParam {
  SceSize size;
  char unk4[128];
} sceAppMgrPhotoMountParam;

int sceAppMgrPhotoMountForDriver(sceAppMgrPhotoMountParam *opt);

sceAppMgrRegisterPathForDriver

Version NID
3.60 0xB53FB98E

sceAppMgrSaveDataGetQuotaForDriver

Version NID
3.60 0xE104C37E

sceAppMgrSaveDataLocalBackupTargetGetListForDriver

Version NID
3.60 0x9B3F7D66

sceAppMgrSaveDataLocalBackupTargetRemoveItemForDriver

Version NID
3.60 0xC4EF95BB

sceAppMgrSaveDataMountForDriver

Version NID
3.60 0xE73C9516

sceAppMgrSaveDataNotifyBackupFinishedForDriver

Version NID
3.60 0x6989B258

sceAppMgrSaveDataSlotCreateForDriver

Version NID
3.60 0xE6F389B8

sceAppMgrSaveDataSlotDeleteForDriver

Version NID
3.60 0xB544F2A0

sceAppMgrSaveDataSlotGetParamForDriver

Version NID
3.60 0xD137D486

sceAppMgrSaveDataSlotGetStatusForDriver

Version NID
3.60 0xEC9D5A35

sceAppMgrSaveDataSlotInitForDriver

Version NID
3.60 0x2277F736

sceAppMgrSaveDataSlotSetParamForDriver

Version NID
3.60 0x7E247E47

sceAppMgrSaveDataSlotSetStatusForDriver

Version NID
3.60 0x9ADB00FA

sceAppMgrSaveDataUmountForDriver

Version NID
3.60 0x2B080268

sceAppMgrSaveSafeMemoryForDriver

Version NID
1.69-3.60 0xD366AA44

sceAppMgrSystemParamDateTimeSetConfForDriver

Version NID
3.60 0xA9AA3A68

sceAppMgrTrophyMountForDriver

Version NID
3.60 0xE977A833
int sceAppMgrTrophyMountForDriver(int mountId, SceUID pid, char *mountPoint);

sceAppMgrUmountForDriver

Version NID
3.60 0xA714BB35

derived from _sceAppMgrUmount

The following mount points can be derived from the code:

  • "photo0:" (0x64)
  • "music0:" (0x69)
  • "video0:" (0x6D)
  • "addcont0:"
  • "addcont1:"
int sceAppMgrUmountForDriver(const char *mount_point);

sceAppMgrUpdateRifInfoForDriver

Version NID
3.60 0x894BDCB8

sceAppMgrWorkDirMountForDriver

Version NID
3.60 0x3A0A9B82

only valid appmgr mount ids are: 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCE

int sceAppMgrWorkDirMountForDriver(int mountId, char *mountPoint);

sceAppMgrGetUserDirPathForDriver

Version NID
0.990-3.60 0x0813AFCA

derived from _sceAppMgrGetUserDirPath

// partition_id: 1 (ur0:) or 2 (ux0:)
int sceAppMgrGetUserDirPathForDriver(int partition_id, char *userDirPath, SceSize path_maxlen);

sceAppMgrAppParamGetIntForDriver

Version NID
3.60 0x12CE29F7

SceAppMgrForDriver_2FEACA9F

Version NID
0.990-3.60 0x2FEACA9F

sceAppMgrSpawnProcessExt_2ForDriver

Version NID
0.990-3.60 0x324DD34E

SceAppMgrForDriver_unk_0C5D65F1

Version NID
3.60 0x0C5D65F1

SceAppMgrForDriver_unk_1574E1A4

Version NID
3.60 0x1574E1A4

SceAppMgrForDriver_unk_1B6C2FED

Version NID
3.60 0x1B6C2FED

SceAppMgrForDriver_unk_21BE167A

Version NID
3.60 0x21BE167A

sceAppMgrSuspendAppForDebugger

Version NID
0.990-3.60 0x29421DCD
int sceAppMgrSuspendAppForDebugger(SceUID id);

SceAppMgrForDriver_unk_30947DF4

Version NID
3.60 0x30947DF4

SceAppMgrForDriver_unk_3B4F305B

Version NID
3.60 0x3B4F305B

SceAppMgrForDriver_unk_4FA62A46

Version NID
3.60 0x4FA62A46

SceAppMgrForDriver_unk_504023C8

Version NID
3.60 0x504023C8

SceAppMgrForDriver_unk_99AA37C1

Version NID
3.60 0x99AA37C1

sceAppMgrSpawnProcessExtForDriver

Version NID
0.990-3.60 0xC4924946

Call sceKernelSpawnProcessExtForKernel.

int sceAppMgrSpawnProcessExtForDriver(int a1, int a2, int a3, int a4, int a5, int a6, int a7);

sceAppMgrKillAppForDebugger

Version NID
0.990-3.60 0xD80566DB

Temp name was sceAppMgrKillProcessForDriver.

/**
 * @brief       Kill an app process.
 * @param[in]   id The app to kill.
 * @return      Zero on success, else < 0.
 */
int sceAppMgrKillAppForDebugger(SceUID id);

SceAppMgrForDriver_unk_DC13160A

Version NID
3.60 0xDC13160A

SceAppMgrForDriver_unk_DD5BEEE3

Version NID
3.60 0xDD5BEEE3

SceAppMgrForDriver_unk_E8DB7942

Version NID
3.60 0xE8DB7942

SceAppMgrForDriver_unk_EBFE1BE2

Version NID
3.60 0xEBFE1BE2

SceAppMgrForDriver_unk_EE6047CA

Version NID
3.60 0xEE6047CA

SceAppMgrForDriver_unk_F3B1D42E

Version NID
3.60 0xF3B1D42E

sceAppMgrResumeAppForDebugger

Version NID
0.990-3.60 0xF9A61E94
int sceAppMgrResumeAppForDebugger(SceUID id);

sceAppMgrDestroyOtherAppByPidForDriver

Version NID
3.60 0xFC89D33D

sceAppMgrPhotoUmountForDriver

Version NID
0.990-3.60 0xDCADB9FE
int sceAppMgrPhotoUmountForDriver(void);

SceAppMgrForDriver_BDD1FBD1

Version NID
0.990 0xBDD1FBD1

SceAppMgrForDriver_3C7B4B77

Version NID
0.990 0x3C7B4B77

SceAppMgr

__sceAppMgrGetAppState

Version NID
0.990-3.60 0x210C0046

exported to user by SceDriverUser

int _sceAppMgrGetAppState(SceAppMgrAppState *appState, SceUInt32 sizeofSceAppMgrAppState, SceUInt32 buildVersion);

_sceAppMgrAcidDirSet

Version NID
1.69-3.60 0x6CBCBE1A

exported to user by SceDriverUser

_sceAppMgrAcquireSoundOutExclusive3

Version NID
1.69-3.60 0x13ED8FFD

exported to user by SceDriverUser

_sceAppMgrAddContAddMount

Version NID
3.60 0x581DB1BE

exported to user by SceDriverUser

  • verify that titleid belongs to one of currently running titleids
  • mount PFS to ux0:addcont/<titleid> or grw0:addcont/<titleid> path with mountid 0x3EA
  • read keystone from <mountpoint>:sce_sys/keystone
  • verify keystone passcode
int _sceAppMgrAddContAddMount(generic_mount_ctx *data, int force_mount_ux);

_sceAppMgrAddContMount

Version NID
1.69-3.60 0x0667E10A

exported to user by SceDriverUser

  • if path is gro0:
    • produce path gro0:addcont/<titleid>
  • else
    • obtain path ux0:addcont/<titleid> or grw0:addcont/<titleid>
  • mount PFS to one of 3 paths with mountid 0x3EA
  • if first mount succeeded
    • check that mount drive is addcont0:
    • read keystone form <mountpoint>:sce_sys/keystone
    • verify keystone content
    • if path is gro0:
      • obtain path ux0:addcont/<titleid> or grw0:addcont/<titleid>
      • mount PFS to one of 2 paths with mountid 0x3EB
      • check that mount drive is addcont0:
      • read keystone form <mountpoint>:sce_sys/keystone
      • verify keystone content
  • if first mount failed:
    • if path is gro0:
      • obtain path ux0:addcont/<titleid> or grw0:addcont/<titleid>
      • mount PFS to one of 2 paths with mountid 0x3EA
      • check that mount drive is addcont0:
      • read keystone form <mountpoint>:sce_sys/keystone
      • verify keystone content
  • check that mounted drive is indeed addcont0:
int _sceAppMgrAddContMount(SceUID pid, generic_mount_ctx *mctx);

_sceAppMgrAppDataMountById

Version NID
1.69-3.60 0x9275414A

exported to user by SceDriverUser

Only valid appmgr mount ids are: 0x68, 0x6A, 0x6B, 0x6E

typedef struct sceAppMgrAppDataMountByIdOpt {
  int reserved1;
  int reserved2;
} sceAppMgrAppDataMountByIdOpt;

int _sceAppMgrAppDataMountById(int mountId, generic_mount_ctx *mctx, char *mountPoint, sceAppMgrAppDataMountByIdOpt *opt);

_sceAppMgrAppDataMount

Version NID
1.69-3.60 0xF07B816E

exported to user by SceDriverUser

Use sceAppMgrUmount to unmount this.

Only valid appmgr mount ids are: 0x64, 0x65, 0x66, 0x67, 0x69, 0x6C, 0x6D, 0x6F, 0x70

int _sceAppMgrAppDataMount(int mountId, char *mountPoint);

_sceAppMgrAppMount

Version NID
1.69-3.60 0xCF1C0C0C

exported to user by SceDriverUser

_sceAppMgrAppParamGetInt

Version NID
1.69-3.60 0xDC7F8DE5

exported to user by SceDriverUser

_sceAppMgrAppParamGetString

Version NID
1.69-3.60 0xEF34CA42

exported to user by SceDriverUser

This is used to retrieve SFO information. The cmd probably corresponds to and index of SFO entries. See the examples for which entries they may be. Example from store_checkout_plugin.

typedef struct sceAppMgrAppParamGetString_opt { // size is 0x10 on 3.60
   SceSize size;
   int32_t unk_4;
   int32_t unk_8;
   int32_t unk_C;
} sceAppMgrAppParamGetString_opt;

// example: 
// sceAppMgrAppParamGetString_opt opt;
// opt.size = 0x10;
// sceAppMgrAppParamGetString(pid, 0xC, &buffer, &opt);

int _sceAppMgrAppParamGetString(int pid, int param, char *string, sceAppMgrAppParamGetString_opt *opt);

On WebKit:

0xC - return current process application name

0x8 - gda


On PSM Dev:

Cmd Output
0x6 IP9100-PCSI00007_00-PSSUITEDEV000000
0x7
0x8 gd
0x9 PlayStationArMobile Development Assistant
0xA PSM Dev
0xC PCSI00007
0x64 IP9100-PCSI00007_00-PSSUITEDEV000000
0x65 PlayStationArMobile Development Assistant

_sceAppMgrAppParamSetString

Version NID
3.60 0x5957390F

exported to user by SceDriverUser

_sceAppMgrAppUmount

Version NID
1.69-3.60 0x2FB40418

exported to user by SceDriverUser

_sceAppMgrBgdlGetQueueStatus

Version NID
1.69-3.60 0x5075AE28

exported to user by SceDriverUser

_sceAppMgrCaptureFrameBufDMACByAppId

Version NID
1.69-3.60 0xC698385C

exported to user by SceDriverUser

_sceAppMgrCaptureFrameBufIFTUByAppId

Version NID
1.69-3.60 0xF29E0732

exported to user by SceDriverUser

_sceAppMgrCheckRifGD

Version NID
1.69-3.60 0x15D7CA34

exported to user by SceDriverUser

Checks game data rif from \license\app\.

typedef struct _sceAppMgrCheckRifGD_opt { // size is 0x8 on FW 3.60
  uint32_t unk_0;
  uint32_t unk_4;
} _sceAppMgrCheckRifGD_opt;

// path is a temporary mount point acquired with _sceAppMgrGameDataMount
// dest should be buffer of size 0x70
int _sceAppMgrCheckRifGD(const char *path, void *dest, _sceAppMgrCheckRifGD_opt *opt);

_sceAppMgrContentInstallPeriodStart

Version NID
1.69-3.60 0xDC478FB1

exported to user by SceDriverUser

Example from store_checkout_plugin. Parameters are uncertain.

int sceAppMgrContentInstallPeriodStart();

_sceAppMgrContentInstallPeriodStop

Version NID
1.69-3.60 0xC9854E6E

exported to user by SceDriverUser

Example from store_checkout_plugin.

  • calls non exported function equal to kernel level of sceAppMgrAddContMount
  • clears flag 0x1000000 if it is set (in internal structure of one of mountpoints in list in AppMgr )
int sceAppMgrContentInstallPeriodStop();

_sceAppMgrConvertVs0UserDrivePath

Version NID
1.69-3.60 0x19B76D11

Exported to user by SceDriverUser.

Pass in a non-restricted vs0: path and an empty buffer and the buffer will be filled with the path of a temporary mount point.

Example from libssl.

// example:
// char sys_external_path[16];
// memset(sys_external_path, 0, sizeof(sys_external_path));
// _sceMgrConvertVs0userDrivePath("vs0:sys/external", &sys_external_path, 1024);.

// path_maxlen must be <= 1024
int _sceAppMgrConvertVs0UserDrivePath(const char *path, char *converted_path, SceSize path_maxlen);

_sceAppMgrDeclareShellProcess2

Version NID
1.69-3.60 0xBDF15BDC

exported to user by SceDriverUser

int _sceAppMgrDeclareShellProcess2 (char (*str)[32], char (*buf)[8]);

_sceAppMgrDestroyAppByName

Version NID
1.69-3.60 0xEB318002

exported to user by SceDriverUser

_sceAppMgrDrmClose

Version NID
1.69-3.60 0xE4CE4A0C

exported to user by SceDriverUser

_sceAppMgrDrmOpen

Version NID
1.69-3.60 0xAA5B3A37

exported to user by SceDriverUser

_sceAppMgrForceUmount

Version NID
1.69-3.60 0x2598EC8A

exported to user by SceDriverUser

_sceAppMgrGameDataMount

Version NID
1.69-3.60 0x454EB183

exported to user by SceDriverUser

typedef struct _sceAppMgrGameDataMount_opt { // size is 0x18 on FW 3.60
  char* mount_point;
  uint32_t unk_4;
  uint32_t unk_8;
  uint32_t unk_C;
  uint32_t unk_10;
  uint32_t unk_14;
} _sceAppMgrGameDataMount_opt;

int _sceAppMgrGameDataMount(char *app_path, char *patch_path, char *rif_file_path, _sceAppMgrGameDataMount_opt *opt)

_sceAppMgrGetAppInfo

Version NID
0.990 0xCA7AF469
1.69-3.60 0x6E65D746

exported to user by SceDriverUser

int _sceAppMgrGetAppInfo(SceAppMgrAppInfo *appInfo, SceUInt32 sizeofSceAppMgrAppInfo, SceUInt32 buildVersion);

_sceAppMgrGetAppMgrState

Version NID
0.990-3.60 0x55C60D20

exported to user by SceDriverUser

int _sceAppMgrGetAppMgrState(SceAppMgrAppMgrState *AppMgrState);

_sceAppMgrGetAppParam2

Version NID
1.69-3.60 0x26D43923

exported to user by SceDriverUser

_sceAppMgrGetAppParam

Version NID
0.990-3.60 0x258C3E3C

exported to user by SceDriverUser

typedef struct _sceAppMgrGetAppParam_opt { // size is 0x8 on FW 0.990
	SceSize appParamSize;
	SceUint32 reserved0;
} _sceAppMgrGetAppParam_opt;

int _sceAppMgrGetAppParam(SceAppMgrAppParam *appParam, _sceAppMgrGetAppParam_opt *opt);

_sceAppMgrGetBootParam

Version NID
0.990-3.60 0xEEFBC756

exported to user by SceDriverUser

typedef struct _sceAppMgrGetBootParam_opt { // size is 0x8 on FW 0.990
	SceSize bootParamSize;		// 0x0
	SceUint unk_8;			// 0x4
} _sceAppMgrGetBootParam_opt;

int _sceAppMgrGetBootParam(uint32_t a1, SceAppMgrBootParam *bootParam, _sceAppMgrGetBootParam_opt *opt);

_sceAppMgrGetBudgetInfo

Version NID
1.69-3.60 0xEACF2237

exported to user by SceDriverUser

Example from webcore

SceAppMgrUser_5F00F261(&struct_of_size_0x88);

_sceAppMgrGetCoredumpStateForShell

Version NID
1.69-3.60 0x03DD7E65

exported to user by SceDriverUser

_sceAppMgrGetCurrentBgmState2

Version NID
1.69-3.60 0x3F7B9BB5

exported to user by SceDriverUser

_sceAppMgrGetCurrentBgmState

Version NID
0.990-3.60 0x81569A58

exported to user by SceDriverUser

int _sceAppMgrGetCurrentBgmState(void **currentBgmId, void **currentBgmState);

_sceAppMgrGetDevInfo

Version NID
1.69-3.60 0x52766019

exported to user by SceDriverUser

Example from store_checkout_plugin.

_sceAppMgrGetDevInfo("ux0:", buffer, resultbuf);

_sceAppMgrGetFgAppInfo

Version NID
1.69-3.60 0xAC9968B7

exported to user by SceDriverUser

_sceAppMgrGetIdByName

Version NID
0.990-3.60 0xC311CC17

exported to user by SceDriverUser

typedef struct _sceAppMgrGetIdByName_opt { // size is 0x8 on FW 0.990
	SceSize appNameSize;
	SceUint32 reserved0;
} _sceAppMgrGetIdByName_opt;

int _sceAppMgrGetIdByName(SceUID *id, const char *appName, _sceAppMgrGetIdByName_opt *opt);

_sceAppMgrGetMediaTypeFromDriveByPid

Version NID
1.69-3.60 0xC7566C46

exported to user by SceDriverUser

_sceAppMgrGetMediaTypeFromDrive

Version NID
1.69-3.60 0xC8D32206

exported to user by SceDriverUser

_sceAppMgrGetMountProcessNum

Version NID
3.60 0x1A844716

exported to user by SceDriverUser

_sceAppMgrGetNameById

Version NID
0.990-3.60 0x08E93582

exported to user by SceDriverUser

typedef struct _sceAppMgrGetNameById_opt { // size is 0x8 on FW 0.990
	SceSize appNameSize;
	SceUint32 reserved0;
} _sceAppMgrGetNameById_opt;

int _sceAppMgrGetNameById(SceUID id, char *appName, _sceAppMgrGetNameById_opt *opt);

_sceAppMgrGetPfsDrive

Version NID
1.69-3.60 0x46B208D4

exported to user by SceDriverUser

_sceAppMgrGetPidListForShell

Version NID
1.69-3.60 0x29AC9DF0

exported to user by SceDriverUser

This function has two IsShell checks, AuthId and pid check

_sceAppMgrGetRawPathOfApp0ByAppIdForShell

Version NID
1.69-3.60 0x7D210054

exported to user by SceDriverUser

appId possible values

/**
 * Get the real/resolved path of app0: (where it's actually mounted)
 * 
 * @param[in] appId
 * @param[out] resolved_path - Buffer that will hold the resolved path. It should have enough room to hold 292 characters or it will buffer overflow (noname120).
 * 
 * @return 0 on success.
 */
int _sceAppMgrGetRawPathOfApp0ByAppIdForShell(int appId, char resolved_path[292]);

_sceAppMgrGetRawPathOfApp0ByPidForShell

Version NID
1.69-3.60 0x550422F9

exported to user by SceDriverUser

_sceAppMgrGetRawPath

Version NID
1.69-3.60 0x9FB3E2C8

exported to user by SceDriverUser

Resolve a path to the corresponding actual path (uses sceFiosKernelOverlayResolveSyncForDriver underneath).

/**
 * Resolve a path to the corresponding true path (uses ::ksceFiosKernelOverlayResolveSync underneath). 
 *
 * @param[in] path - Path to convert (e.g. app0:)
 * @param[out] resolved_path - True resolved path
 * @param[in] unk - Unknown, provide an empty buffer
 *
 * @return 0 on success, < 0 on error.
 */
int _sceAppMgrGetRawPath(char *path, char *resolved_path, int resolved_path_size, char unk[16]);

_sceAppMgrGetRecommendedScreenOrientation

Version NID
3.60 0x37E94672

exported to user by SceDriverUser

_sceAppMgrGetRunningAppIdListForShell

Version NID
3.60 0xDA66AE0E

exported to user by SceDriverUser

_sceAppMgrGetSaveDataInfoForSpecialExport

Version NID
3.60 0xDC815429

exported to user by SceDriverUser

  • check that current app auth id is SceContentManager (0x280000000000002D)
  • check some flag set by SceSblPostSsMgrForDriver (related to utoken_sm.self F00D commands)
  • read sealedkey from <path>/sce_sys/sealedkey to restore klicensee
  • mount PFS tsXXXXXXXXXXXX: mountpoint to <path> path with mount ID 0x3ED
  • get ACCOUNT_ID from <path>/sce_sys/param.sfo
typedef struct _sceAppMgrGetSaveDataInfoForSpecialExport_opt { // size is 0x8 on FW 3.60
  int reserved0;
  int reserved1;
} _sceAppMgrGetSaveDataInfoForSpecialExport_opt;

int _sceAppMgrGetSaveDataInfoForSpecialExport(char *path, char *account_id, _sceAppMgrGetSaveDataInfoForSpecialExport_opt *opt);

_sceAppMgrGetSaveDataInfo

Version NID
1.69-3.60 0x6C52A377

exported to user by SceDriverUser

typedef struct _sceAppMgrGetSaveDataInfo_res {
  int enum_flag_0;
  int enum_flag_4;
  int enum_flag_8;
  int unkC;
  int unk10;
  int open_psid_related_14;
  int ioctl_related_18;
} _sceAppMgrGetSaveDataInfo_res;

typedef struct _sceAppMgrGetSaveDataInfo_opt { // size is 0x10 on FW 3.60
  _sceAppMgrGetSaveDataInfo_res *res;
  int unk_4;
  int unk_8;
  int unk_C;
} _sceAppMgrGetSaveDataInfo_opt;

int _sceAppMgrGetSaveDataInfo(char *path, SceTitleId *titleid, int force_mount_ux, _sceAppMgrGetSaveDataInfo_opt *opt);

_sceAppMgrGetStatusByAppId

Version NID
1.69-3.60 0xBF4213A3

exported to user by SceDriverUser

int _sceAppMgrGetStatusByAppId(int appId, SceAppMgrAppStatus *appStatus);

_sceAppMgrGetStatusById

Version NID
0.990-3.60 0x211D9558

exported to user by SceDriverUser

typedef struct _sceAppMgrGetStatusById_opt { // size is 0x8 on FW 0.990
	SceSize appStatusSize;
	uint32_t reserved1;
} _sceAppMgrGetStatusById_opt;

int _sceAppMgrGetStatusById(SceUID id, SceAppMgrAppStatus *appStatus, _sceAppMgrGetStatusById_opt *opt);

_sceAppMgrGetStatusByName

Version NID
0.990-3.60 0x46998AFC

exported to user by SceDriverUser

typedef struct _sceAppMgrGetStatusByName_opt { // size is 0x10 on FW 0.990
	SceSize appNameSize;			// max value is 32
	SceSize appStatusSize;
	uint32_t reserved1;
	uint32_t reserved2;
} _sceAppMgrGetStatusByName_opt;

int _sceAppMgrGetStatusByName(const char* appName, SceAppMgrAppStatus *appStatus, sceAppMgrGetStatus_opt *opt);

_sceAppMgrGetSystemDataFilePlayReady

Version NID
3.60 0x7C44FE5D

exported to user by SceDriverUser

_sceAppMgrGetUserDirPathById

Version NID
3.60 0x617D78DA

exported to user by SceDriverUser

_sceAppMgrGetUserDirPath

Version NID
0.990-3.60 0x84B138BF

exported to user by SceDriverUser

typedef struct _sceAppMgrGetUserDirPath_opt { // size is 0x8 on FW 0.990
	SceSize path_maxlen;		// Must be <= 1024
	SceUint32 reserved1;
} _sceAppMgrGetUserDirPath_opt;

// partition_id: 1 (ur0:), 2 (ux0:)
int _sceAppMgrGetUserDirPath(int partition_id, char *userDirPath, SceSize path_maxlen, _sceAppMgrGetUserDirPath_opt *opt);

_sceAppMgrGetVs0UserDataDrive

Version NID
0.990-3.60 0xC361C084

exported to user by SceDriverUser

Get drive for mountId 0x3EF.

int _sceAppMgrGetVs0UserDataDrive(ScePfsRndDriveId *rnd_drive_id);

_sceAppMgrGetVs0UserModuleDrive

Version NID
0.990-3.60 0x85589E87

exported to user by SceDriverUser

Get drive for mountId 0x3EE.

int _sceAppMgrGetVs0UserModuleDrive(ScePfsRndDriveId *rnd_drive_id);

_sceAppMgrInitSafeMemoryById

Version NID
3.60 0x03FA4036

exported to user by SceDriverUser

_sceAppMgrInstallDirMount

Version NID
1.69-3.60 0xED37D810

exported to user by SceDriverUser

_sceAppMgrIsCameraActive

Version NID
1.69-3.60 0x7F0C9410

exported to user by SceDriverUser

_sceAppMgrLaunchAppByName2ForShell

Version NID
1.69-3.60 0xC6BA9596

exported to user by SceDriverUser

_sceAppMgrLaunchAppByName2

Version NID
1.69-3.60 0xAEF06983

exported to user by SceDriverUser

_sceAppMgrLaunchAppByName2ndStage

Version NID
1.69-3.60 0xDEDD2AED

exported to user by SceDriverUser

_sceAppMgrLaunchAppByNameForShell

Version NID
1.69-3.60 0x4C3B5BB8

exported to user by SceDriverUser

_sceAppMgrLaunchAppByName

Version NID
1.69-3.60 0xDAC0AF12

exported to user by SceDriverUser

_sceAppMgrLaunchAppByPath4

Version NID
1.69-3.60 0x8FE4F651

exported to user by SceDriverUser

_sceAppMgrLaunchAppByUri2

Version NID
1.69-3.60 0x4B45EAC0

exported to user by SceDriverUser

_sceAppMgrLaunchAppByUri

Version NID
1.69-3.60 0x37CE3984

exported to user by SceDriverUser

_sceAppMgrLaunchVideoStreamingApp

Version NID
3.60 0x29650EE6

exported to user by SceDriverUser

Note: Can only be run from SceShell or Webkit context or 0x8080201F is returned.

/**
 * @brief       Open the video player app
 * @param[in]   buf Arguments for the video player (format is unknown, max size is 0x1824)
 * @param[in]   buf_size Size of the buf array.
 * @param[in]   opt Optional parameters, you can pass NULL.
 * @return      Zero on success, else < 0.
 */
int _sceAppMgrLaunchVideoStreamingApp(char *buf, size_t buf_size, void *opt);

_sceAppMgrLoadExec

Version NID
1.69-3.60 0xDC2F23E0

exported to user by SceDriverUser

/* Relaunch app using other ELF */
int _sceAppMgrLoadExec(const char *appPath,				/* Path of SELF file. SELF file must be put immediatly under app0: */
			char *const argv[],				/* Array of arguments pass the entry function of new SELF */
			const SceAppMgrLoadExecOptParam *optParam	/* Not used in userland. Must be NULL */
	);

_sceAppMgrLoadSaveDataSystemFile

Version NID
3.60 0xA630BC5D

exported to user by SceDriverUser

  • check auth id SceShell(0x2800000000000001), fake_package_installer(0x280000000000002E)
  • resolve overlay for <path>
  • create <path> directory if required
  • create <path>/sce_pfs directory if required
  • mount PFS to <path> path with mountid 0x3ED
  • read <path>/sce_sys/param.sfo
struct sceAppMgrLoadSaveDataSystemFileOpt
{
  int reserved0;
  int reserved1;
};

int _sceAppMgrLoadSaveDataSystemFile(char *path, int param_sfo_data, int authid_related, sceAppMgrLoadSaveDataSystemFileOpt *opt);

_sceAppMgrLoopBackFormat

Version NID
1.69-3.60 0xEA307D2C

exported to user by SceDriverUser

_sceAppMgrLoopBackMount

Version NID
1.69-3.60 0x3493CDFA

exported to user by SceDriverUser

struct sceAppMgrLoopBackMountOpt
{
  int reserved0;
  int reserved1;
};

int _sceAppMgrLoopBackMount(int mountId, SceTitleId *titleId, char *mountPoint, sceAppMgrLoopBackMountOpt *opt);

_sceAppMgrMmsMount

Version NID
1.69-3.60 0xE56A2E1B

exported to user by SceDriverUser

int _sceAppMgrMmsMount(int mountId, char *mountPoint);

_sceAppMgrOverwriteLaunchParamForShell

Version NID
1.69-3.60 0xFDE9A3E3

exported to user by SceDriverUser

_sceAppMgrPeekLaunchParamForShell

Version NID
1.69-3.60 0x8CC3DC46

exported to user by SceDriverUser

_sceAppMgrPhotoMount

Version NID
1.69-3.60 0xE98E9C52

exported to user by SceDriverUser

struct sceAppMgrPhotoMountParam
{
  int size;
  char unk4[0x80];
};

struct sceAppMgrPhotoMountOpt
{
  int size;
  int reserved0;
};

int _sceAppMgrPhotoMount(sceAppMgrPhotoMountParam *param, sceAppMgrPhotoMountOpt *opt);

_sceAppMgrPhotoUmount

Version NID
1.69-3.60 0xB2EA376F

exported to user by SceDriverUser

_sceAppMgrPspSaveDataGetParams

Version NID
3.60 0x77A51E82

exported to user by SceDriverUser

_sceAppMgrPspSaveDataRead

Version NID
3.60 0xE535161F

exported to user by SceDriverUser

_sceAppMgrPspSaveDataRootMount

Version NID
3.60 0xA77DF8BA

exported to user by SceDriverUser

int _sceAppMgrPspSaveDataRootMount(char *mountPoint);

_sceAppMgrReceiveEventNum

Version NID
0.990-3.60 0x3EEEC172

exported to user by SceDriverUser

/* Get the number of events from AppMgr */
int _sceAppMgrReceiveEventNum(int *eventNum		/* Number of events in the queue */
);

_sceAppMgrReceiveEvent

Version NID
1.69-3.60 0xA90546F4

exported to user by SceDriverUser

/* Get events from AppMgr */
int _sceAppMgrReceiveEvent(SceAppMgrEvent *appEvent);

_sceAppMgrReceiveNotificationRequestForShell

Version NID
1.69-3.60 0x21A86141

exported to user by SceDriverUser

_sceAppMgrReceiveShellEvent

Version NID
1.69-3.60 0xE0DADF51

exported to user by SceDriverUser

_sceAppMgrReceiveSystemEvent

Version NID
1.69-3.60 0x7240375B

exported to user by SceDriverUser

int _sceAppMgrReceiveSystemEvent(SceAppMgrSystemEvent *systemEvent);

_sceAppMgrSaveDataAddMount

Version NID
3.60 0xD1391ACE

exported to user by SceDriverUser

  • verify that titleid belongs to one of currently running titleids
  • create ux0:/user/XX/savedata_vc/<titleid> or ux0:/user/XX/savedata/<titleid> directory if required
  • mount PFS to ux0:/user/XX/savedata_vc/<titleid> or ux0:/user/XX/savedata/<titleid> path with mountid 0x3ED
  • read keystone from <mountpoint>:sce_sys/keystone
  • verify keystone passcode
int _sceAppMgrSaveDataAddMount(generic_mount_ctx *opt);

_sceAppMgrSaveDataDataRemove2

Version NID
3.60 0x435E0BCB

exported to user by SceDriverUser

_sceAppMgrSaveDataDataRemove

Version NID
1.69-3.60 0xA579A39E

exported to user by SceDriverUser

_sceAppMgrSaveDataDataSave2

Version NID
3.60 0xFDACCA65

exported to user by SceDriverUser

_sceAppMgrSaveDataDataSave

Version NID
1.69-3.60 0xB81777B7

exported to user by SceDriverUser

_sceAppMgrSaveDataGetQuota

Version NID
1.69-3.60 0xF28A426B

exported to user by SceDriverUser

_sceAppMgrSaveDataMount

Version NID
1.69-3.60 0x95A6B1BF

exported to user by SceDriverUser

_sceAppMgrSaveDataSlotCreate

Version NID
1.69-3.60 0xC48833AA

exported to user by SceDriverUser

_sceAppMgrSaveDataSlotDelete

Version NID
1.69-3.60 0x191CF6B1

exported to user by SceDriverUser

_sceAppMgrSaveDataSlotFileClose

Version NID
3.60 0xFE821175

exported to user by SceDriverUser

_sceAppMgrSaveDataSlotFileGetParam

Version NID
3.60 0x667CC149

exported to user by SceDriverUser

_sceAppMgrSaveDataSlotFileOpen

Version NID
3.60 0x855CDAA4

exported to user by SceDriverUser

_sceAppMgrSaveDataSlotGetParam

Version NID
1.69-3.60 0x74D789E2

exported to user by SceDriverUser

_sceAppMgrSaveDataSlotGetStatus

Version NID
1.69-3.60 0xAF8258D4

exported to user by SceDriverUser

_sceAppMgrSaveDataSlotInit

Version NID
1.69-3.60 0x79689A1D

exported to user by SceDriverUser

_sceAppMgrSaveDataSlotSetParam

Version NID
1.69-3.60 0x0E216486

exported to user by SceDriverUser

_sceAppMgrSaveDataSlotSetStatus

Version NID
1.69-3.60 0x030C0CA4

exported to user by SceDriverUser

_sceAppMgrSaveDataUmount

Version NID
1.69-3.60 0x53623420

exported to user by SceDriverUser

_sceAppMgrSendNotificationRequest

Version NID
1.69-3.60 0xF42E27AD

exported to user by SceDriverUser

_sceAppMgrSendParam

Version NID
3.60 0xD29236AD

exported to user by SceDriverUser

_sceAppMgrSendSystemEvent2

Version NID
1.69-3.60 0xD70D5EEC

exported to user by SceDriverUser

_sceAppMgrSendSystemEvent

Version NID
1.69-3.60 0xCEAF12B6

exported to user by SceDriverUser

Example from store_checkout_plugin.

_sceAppMgrSendSystemEvent(0, 0x10000006);

_sceAppMgrSendSystemEvent(0, 0x10000004);

_sceAppMgrSetBackRenderPortOwner

Version NID
1.69-3.60 0xE8357021

exported to user by SceDriverUser

_sceAppMgrSetBgmProxyApp

Version NID
1.69-3.60 0xF6B093BC

exported to user by SceDriverUser

_sceAppMgrSetNetworkDisconnectionWarningDialogState

Version NID
3.60 0xD4B0CDB4

exported to user by SceDriverUser

/* Set network disconnection warning dialog state */
int _sceAppMgrSetNetworkDisconnectionWarningDialogState(SceBool enable, const SceAppMgrNetworkDisconnectionWarningDialogStateOptParam *optParam);

_sceAppMgrSetPowerSaveMode

Version NID
1.69-3.60 0xB0ECB9C2

exported to user by SceDriverUser

_sceAppMgrSetRecommendedScreenOrientationForShell

Version NID
3.60 0xD14D39F5

exported to user by SceDriverUser

_sceAppMgrSetShellScreenOrientation

Version NID
3.60 0x10E23253

exported to user by SceDriverUser

_sceAppMgrSetSystemDataFilePlayReady

Version NID
3.60 0x8964E793

exported to user by SceDriverUser

_sceAppMgrSetSystemDataFile

Version NID
3.60 0x78F5AF66

exported to user by SceDriverUser

_sceAppMgrSystemParamDateTimeGetConf

Version NID
1.69-3.60 0xB7F95389

exported to user by SceDriverUser

_sceAppMgrSystemParamGetInt

Version NID
3.60 0x18EB1DAC

exported to user by SceDriverUser

_sceAppMgrSystemParamGetString

Version NID
1.69-3.60 0xAF5F9497

exported to user by SceDriverUser

_sceAppMgrThemeDataMount

Version NID
3.60 0xD9B7A5AF

exported to user by SceDriverUser

  • check that program-authority-id is SceShell(0x2800000000000001) or SceSettings (0x2800000000000010)
  • read ux0:theme/<CONTENTID>/sce_sys/param.sfo or <theme_path>/<CONTENTID>/sce_sys/param.sfo (in case of debug custom theme)
  • check in param.sfo that CATEGORY = ac and get TITLEID
  • get klicensee from rif (from fixed name at path ux0:license/theme/<CONTENTID> or from <rif_file_path>)
  • check ux0:theme/<CONTENTID>/sce_sys/package/head.bin vs ux0:theme/<CONTENTID>/sce_sys/clearsign or <theme_path>/<CONTENTID>/sce_sys/package/head.bin vs <theme_path>/<CONTENTID>/sce_sys/clearsign
  • mount PFS tmXXXXXXXXXXXd: mountpoint to ux0:theme/<CONTENTID> or <theme_path>/<CONTENTID> path with mountid 0x3EC and TITLEID
struct sceAppMgrThemeDataMountOpt
{
  char *mount_point;
  int reserved0;
  int reserved1;
  int reserved2;
  int reserved3;
  int reserved4;
};

int _sceAppMgrThemeDataMount(SceTitleId *titleid, const char *theme_path, const char *rif_file_path, sceAppMgrThemeDataMountOpt *opt);

_sceAppMgrTrophyMountById

Version NID
1.69-3.60 0x3DFC9410

exported to user by SceDriverUser

struct sceAppMgrTrophyMountByIdOpt
{
  int reserved0;
  int reserved1;
};

int _sceAppMgrTrophyMountById(int mountId, SceTitleId *titleId, char *mountPoint, sceAppMgrTrophyMountByIdOpt *opt);

_sceAppMgrTrophyMount

Version NID
1.69-3.60 0xF8B80AC2

exported to user by SceDriverUser

int _sceAppMgrTrophyMount(int mountId, SceUID pid, char *mountPoint);

_sceAppMgrUmountByPid

Version NID
1.69-3.60 0x0A419BC8

exported to user by SceDriverUser

_sceAppMgrUmount

Version NID
1.69-3.60 0xFFCA54E0

Exported to user by SceDriverUser.

This is the unmount command for the mount point created with _sceAppMgrWorkDirMount.

This unmount command is also called in pair with _sceAppMgrGameDataMount from SceShell.

// max size of mount_point is 0x10 bytes including null
int _sceAppMgrUmount(const char *mount_point);

_sceAppMgrUpdateSaveDataParam

Version NID
1.69-3.60 0xF4703412

exported to user by SceDriverUser

  • resolve overlay for <path>
  • if <overlay path> is ux0:/user/XX/savedata or grw0:/savedata/
    • mount PFS tsXXXXXXXXXXXXd mountpoint to <overlay path> path with mountid 0x3ED
    • verify open psid
  • if <overlay path> is ux0:/ or grw0:/
    • mount PFS tsXXXXXXXXXXXXd mountpoint to <overlay path>/user/XX/savedata path with mountid 0x3ED
    • verify open psid
struct sceAppMgrUpdateSaveDataParamOpt
{
  int reserved0;
  int reserved1;
};

int _sceAppMgrUpdateSaveDataParam(char *path, sceAppMgrUpdateSaveDataParamOpt *opt);

_sceAppMgrWorkDirMountById

Version NID
1.69-3.60 0x58E4CC90

exported to user by SceDriverUser

only valid appmgr mount ids are:

  • 0xCD: ux0:cache/<TITLEID>
  • 0xCF: ?
struct sceAppMgrWorkDirMountByIdOpt
{
  int reserved0;
  int reserved1;
};

int _sceAppMgrWorkDirMountById(int mountId, generic_mount_ctx* data, char *mount_point, sceAppMgrWorkDirMountByIdOpt *opt);

_sceAppMgrWorkDirMount

Version NID
1.69-3.60 0x0C49659E

exported to user by SceDriverUser

For example used by store_checkout_plugin, sqlite_vsh.

This creates a mount point that can be used as a filesystem.

Only valid appmgr mount ids are:

  • 0xC8: ur0:temp/sqlite
  • 0xC9: ur0:temp/attach
  • 0xCA: ux0:pspemu
  • 0xCB: ?
  • 0xCC: ur0:temp/checkout
  • 0xCE: ur0:temp/webbrowser
int _sceAppMgrWorkDirMount(int mountId, char *mountPoint);

sceAppMgrAcquireBgmPortForMusicPlayer

Version NID
1.69-3.60 0x44EC36FA

sceAppMgrAcquireBgmPortWithPriority

Version NID
1.69-3.60 0xAAED7419

sceAppMgrAcquireBgmPort

Version NID
1.69-3.60 0xAFCEAB96
/* Get BGM port and sound BGM even when not in front */
int sceAppMgrAcquireBgmPort(void);

sceAppMgrAcquireBtrm

Version NID
1.69-3.60 0xD752695D

sceAppMgrAcquireSoundOutExclusive2

Version NID
1.69-3.60 0xB9365442

sceAppMgrAcquireSoundOutExclusive

Version NID
1.69-3.60 0xACB48075

sceAppMgrActivateApp

Version NID
1.69-3.60 0x43631508
int sceAppMgrActivateApp(int appId);

sceAppMgrDeactivateApp

Version NID
1.69-3.60 0xFFA093D9

sceAppMgrDeclareSystemChatApp

Version NID
1.69-3.60 0x77EE891D

sceAppMgrDestroyAppByAppId

Version NID
1.69-3.60 0x54368A0B

sceAppMgrDestroyOtherAppByAppIdForShell

Version NID
1.69-3.60 0xDC70C5F7

sceAppMgrDestroyOtherAppByPidForShell

Version NID
1.69-3.60 0x5420D23C

sceAppMgrDestroyOtherApp

Version NID
1.69-3.60 0x3EF143BF

sceAppMgrDump

Version NID
1.69-3.60 0x527795E8

sceAppMgrEnableCoredumpForTest

Version NID
1.69-3.60 0x32FD0B99

sceAppMgrEnableDuckingOnSystemChat

Version NID
1.69-3.60 0x5AB230DE

sceAppMgrEnablePrioritizingSystemChat

Version NID
1.69-3.60 0x3E1FAB92

sceAppMgrExitToLiveboardForGameApp

Version NID
1.69-3.60 0x89D1DA55

sceAppMgrFinishCoredumpForShell

Version NID
1.69-3.60 0x52FF63D1

sceAppMgrGetAppIdByAppId

Version NID
1.69-3.60 0x332C9D98

sceAppMgrGetExtraAppParam

Version NID
3.60 0x94A722BC

sceAppMgrGetProcessIdByAppIdForShell

Version NID
1.69-3.60 0x63FAC2A9

sceAppMgrGetSystemDataFile

Version NID
1.69-3.60 0xAEC49533

sceAppMgrGrowMemory3

Version NID
3.60 0x4401EDCD

sceAppMgrGrowMemory

Version NID
1.69-3.60 0x842FCE8C

sceAppMgrIsDevelopmentMode

Version NID
1.69-3.60 0x7D4F8F83

sceAppMgrIsGameBudgetAppPresent

Version NID
1.69-3.60 0xE134F5A0

sceAppMgrIsGameProgram

Version NID
1.69-3.60 0xFFF8F7F0

sceAppMgrIsNonGameProgram

Version NID
3.60 0x5F22E192

sceAppMgrIsOtherAppPresent

Version NID
1.69-3.60 0x371F6F81

sceAppMgrIsPidShellAndCrashed

Version NID
3.60 0xC648EA9B

sceAppMgrIsPsNowClient

Version NID
3.60 0x972EA7BA

sceAppMgrLaunchAppCancel

Version NID
1.69-3.60 0x5369BC0A

sceAppMgrLoadSafeMemory

Version NID
1.69-3.60 0xFAF3DAAA

sceAppMgrNotifyLiveBoardModeForShell

Version NID
1.69-3.60 0x389F048D

sceAppMgrQuitApp

Version NID
1.69-3.60 0x0DD747FB

sceAppMgrQuitForNonSuspendableApp

Version NID
1.69-3.60 0xE3F719A0

sceAppMgrReceiveShellEventNum

Version NID
1.69-3.60 0xFB67BABD

sceAppMgrReleaseBgmPort

Version NID
1.69-3.60 0xF3717E37
/* Open the acquired BGM port */
int sceAppMgrReleaseBgmPort(void);

sceAppMgrReleaseBtrm

Version NID
1.69-3.60 0xACDCE4DB

sceAppMgrReleaseSoundOutExclusive2

Version NID
1.69-3.60 0x2BB68701

sceAppMgrReleaseSoundOutExclusive3

Version NID
3.60 0x626C339D

sceAppMgrReleaseSoundOutExclusive

Version NID
1.69-3.60 0x3BA41199

sceAppMgrRestoreBgmSettingForShell

Version NID
1.69-3.60 0xD9BCC50C

sceAppMgrRestoreDisplaySettingForShell

Version NID
1.69-3.60 0xE455922D

sceAppMgrResumeBgAppByShell

Version NID
3.60 0x64DD4321

sceAppMgrReturnLiveAreaOperationResultForShell

Version NID
3.60 0x5CF3BA39

sceAppMgrSaveDataGetCachedRequiredSizeKiB

Version NID
3.60 0x56EDE09A

sceAppMgrSaveSafeMemory

Version NID
1.69-3.60 0xD366AA44

sceAppMgrSendLiveBoardMode

Version NID
1.69-3.60 0x3E4AC082

sceAppMgrSetAppProtectionModeOnMemoryShortage

Version NID
1.69-3.60 0xAF8C7FFB

sceAppMgrSetBgmSubPriorityForSystemChat

Version NID
1.69-3.60 0x90E42B4D

sceAppMgrSetBgmSubPriority

Version NID
1.69-3.60 0x7333C2F1

sceAppMgrSetDisplayMergeConf

Version NID
3.60 0x0789D501

sceAppMgrSetFakeSettingBug51800

Version NID
3.60 0xF46C81F3

sceAppMgrSetInfobarStateForCommonDialog

Version NID
1.69-3.60 0xD6758B4E

sceAppMgrSetInfobarStateForShellByAppId

Version NID
1.69-3.60 0xF7DFE96E

sceAppMgrSetInfobarStateForShellByPid

Version NID
1.69 0xA3314B2B

sceAppMgrSetInfobarState

Version NID
1.69-3.60 0xAD9022A1
/* Set infobar state */
int _sceAppMgrSetInfobarState(SceAppMgrInfoBarVisibility visibility, SceAppMgrInfoBarColor color, SceAppMgrInfoBarTransparency transparency);

sceAppMgrSetRecommendedScreenOrientationActivated

Version NID
3.60 0x75876896

sceAppMgrSetSystemImposeState2

Version NID
3.60 0x2163759A

sceAppMgrSetSystemImposeState

Version NID
1.69-3.60 0xD16B91B5

sceAppMgrSuspendBgAppByShell

Version NID
3.60 0x5BCF6927

sceAppMgrSuspendUntilActivated

Version NID
1.69-3.60 0xECEC7F90

_sceAppMgrCaptureFrameBuf

Version NID
1.69 0xFA21A020
3.60 NOT PRESENT

_sceAppMgrCaptureFrameBufByAppId

Version NID
0.990-1.69 0xD3787750
3.60 NOT PRESENT

_sceAppMgrCaptureFrameBufDMAC

Version NID
1.69 0x34170882
3.60 NOT PRESENT

_sceAppMgrCaptureFrameBufIFTU

Version NID
1.69 0x4799F0F7
3.60 NOT PRESENT

_sceAppMgrCheckSaveDataMounted

Version NID
1.69 0x947A95CA
3.60 NOT PRESENT

_sceAppMgrGameDataMountWithPatch

Version NID
1.69 0x7A239EDC
3.60 NOT PRESENT

_sceAppMgrGetParam

Version NID
1.69 0x5FF430E8
3.60 NOT PRESENT
int _sceAppMgrGetParam(int app_id, char *param_buffer);

_sceAppMgrSendEvent

Version NID
0.990-1.69 0x5432E51D
3.60 NOT PRESENT

_sceAppMgrReleaseSoundOutExclusive3

Version NID
1.69 0x82C924AD
3.60 NOT PRESENT

sceAppMgrDestroyApp

Version NID
1.69 0xD18F8DDD
3.60 NOT PRESENT

sceAppMgrGetActivateApp

Version NID
1.69 0x4C1183C2
3.60 NOT PRESENT

sceAppMgrGrowMemory2

Version NID
1.69 0xE4CE2CB5
3.60 NOT PRESENT

sceAppMgrInfoBarClose

Version NID
1.69 0x9A60BED4
3.60 NOT PRESENT

sceAppMgrInfoBarOpen

Version NID
1.69 0x97B80C01
3.60 NOT PRESENT

sceAppMgrSetEnablePrioritizeSystemChat

Version NID
1.69 0xD4078CC0
3.60 NOT PRESENT

sceAppMgrAssignVoicePortByPid

Version NID
0.990 0xC10C53D7

sceAppMgrAssignVoicePortByAppId

Version NID
0.990 0x83B3F1BE

sceAppMgrGetRunStatus

Version NID
0.990 0x563C494F
int sceAppMgrGetRunStatus(void);

sceAppMgrDump

Version NID
0.990 0xEEDDB508
int sceAppMgrDump(void);

SceAppMgr_13C5CB3D

Version NID
0.990 0x13C5CB3D

activateAppById

Version NID
0.990 0x86B07AD5
int activateAppById(SceUID id);

sendQuitRequestById

Version NID
0.990 0x14945ECE

Return 0 on success.

int sendQuitRequestById(uint32_t id);

send_0x10000202_Event

Version NID
0.990 0x1819E285
int send_0x10000202_Event(void);

SceSharedFb

sceSharedFbOpen

Version NID
0.990 0xD2B27255

_sceSharedFbOpen

Version NID
1.69-3.60 0xB358E1B6
a1 - set 1

SceUID _sceSharedFbOpen(int a1, int sysver);

sceSharedFbBegin

Version NID
0.990-3.60 0x72067C6B

note : If do not call sceSharedFbEnd after calling sceSharedFbBegin, you cannot return to the home

int sceSharedFbBegin(SceUID shared_fb_id, SceSharedFbInfo *info);

sceSharedFbClose

Version NID
0.990-3.60 0x33DA3428
int sceSharedFbClose(SceUID shared_fb_id);

sceSharedFbCreate

Version NID
0.990-3.60 0xD6C643B5
a1 - set 1

SceUID sceSharedFbCreate(int a1, SceSharedFbCreate *create_param);

sceSharedFbDelete

Version NID
0.990-3.60 0xBE5A1A81

sceSharedFbEnd

Version NID
0.990-3.60 0xFC5A62B6
int sceSharedFbEnd(SceUID shared_fb_id);

sceSharedFbGetInfo

Version NID
0.990-3.60 0x819954FB
int sceSharedFbGetInfo(SceUID shared_fb_id, SceSharedFbInfo *info);

sceSharedFbGetRenderingInfo

Version NID
0.990-3.60 0x61FEEDFA

sceSharedFbGetShellRenderPort

Version NID
0.990-3.60 0xAC49FC1D
int sceSharedFbGetShellRenderPort(void);

sceSharedFbUpdateProcessBegin

Version NID
0.990-3.60 0xF9754AD9
a2 buf size is 0x40
a3 buf size is 4?

int sceSharedFbUpdateProcessBegin(SceUID shared_fb_id, void *a2, void *a3);

sceSharedFbUpdateProcessEnd

Version NID
0.990-3.60 0x565A9AB6
int sceSharedFbUpdateProcessEnd(SceUID shared_fb_id);

sceSharedFbUpdateProcess

Version NID
0.990-3.60 0x3889ACF8
int sceSharedFbUpdateProcess(void);

sceSharedFbSetShellRenderPort

Version NID
0.990-1.69 0x0B81B10F

sceSharedFbSetRenderingOrderForTest

Version NID
0.990-1.69 0x0D2B21AE

SceSharedFbForDriver