SceAppMgr: Difference between revisions

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


=== Known NIDs ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! Name !! World !! Privilege !! NID
! Version !! World !! Privilege
|-
|-
| 1.69 || SceAppMgr || Non-secure || Kernel || 0x69876CDE
| 1.69-3.60 || Non-secure || Kernel
|-
| 3.60 || SceAppMgr || Non-secure || Kernel || 0xDBB29DB7
|}
|}


Line 36: Line 33:
{| class="wikitable"
{| class="wikitable"
|-
|-
! ID !! Desc
! ID !! Description
|-
|-
| -1 || Corresponds to pid 0
| -1 || Corresponds to pid 0
Line 50: Line 47:
| -6 || Unknown
| -6 || Unknown
|}
|}
=== App Run status ===
<source>
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
</source>


=== SceAppMgr Mount IDs ===
=== SceAppMgr Mount IDs ===
<source>
sceAppMgrPhotoMount
0x64
sceAppMgrAppDataMount
0x64
0x65
0x66
0x67
0x69
0x6C
0x6D
0x6F
0x70
sceAppMgrAppDataMountById
0x68
0x6A
0x6B
0x6E
sceAppMgrAppMount
direct scePfsMount
sceAppMgrPspSaveDataRootMount
0xCA
sceAppMgrWorkDirMount
0xC8
0xC9
0xCA
0xCB
0xCC
0xCE
sceAppMgrWorkDirMountById
0xCD
0xCF
sceAppMgrTrophyMount
0x12C
0x12D
0x12E
sceAppMgrTrophyMountById
0x12F
0x130
sceAppMgrMmsMount
0x190
0x191
0x192
sceAppMgrInstallDirMount
0x1F4
0x1F5
0x1F8
0x1F9
sceAppMgrLoopBackMount
0x258
sceAppMgrGameDataMount
0x3E8
0x3E9
sceAppMgrAddContAddMount
0x3EA
sceAppMgrAddContMount
0x3EA
0x3EB
sceAppMgrSaveDataAddMount
0x3EC
sceAppMgrSaveDataMount
direct scePfsMount
</source>


{| class="wikitable"
{| class="wikitable"
|-
|-
! MountId !! real path <br>(<code>X</code> is an incremental number) !! virtual mount point <br>(<code>X</code> is randomized) !! Function to call for mounting !! Used by
! id !! src !! pfs mount mode !! key type !! default mount point
|-
|-
| ?0x3F? || ux0:data/near/gift || gift0: || Seen in [[SceAppMgr#sceAppMgrAppDataMountByIdForDriver|sceAppMgrAppDataMountByIdForDriver]] || ?SceNear?
| 0x64 || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x64 || ux0:picture || photo0: || automounted <br>or [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]]<br> or [[SceAppUtil#sceAppUtilPhotoMount|sceAppUtilPhotoMount]] || SceEmailApp,<br> SceHostCollaboService, <br>ScePsp2Compat, <br>SceSettings, <br>SceWebBrowser, <br>SceWebUIPlugin, by NPXS10036
| 0x65 || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x64 || ? || ? || [[SceAppMgr#sceAppMgrPhotoMountForDriver|sceAppMgrPhotoMountForDriver]]<br>[[SceAppMgr#sceAppMgrPhotoMount|sceAppMgrPhotoMount]]<br>[[SceAppMgr#sceAppMgrAppDataMountForDriver|sceAppMgrAppDataMountForDriver]] ||
| 0x66 || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x65 || ur0:user/XX/psnfriend || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] || SceFriend,<br> SceFriendListDialogPlugin,<br> SceInvitationDlgPlugin,<br> SceNpGameCustomDataDPlugin,<br> SceNpMessageDialogPlugin,<br> SceNpProfile2DialogPlugin,<br> ScePsnMail,<br> SceShell
| 0x67 || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x66 || ur0:user/XX/psnmsg || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] || SceInvitationDlgImplPlugin, <br>SceMsgMiddleWare, <br>SceNpGameCustomDataDlgImpl, <br>SceNpMessage, <br>SceNpMessageDlgImplPlugin
| 0x68 || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x67 || ur0:user/XX/near || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] || SceNear, <br>SceNearAutoCheckin, <br>SceNearAutoLocation, <br>SceNearProfile, <br>SceNearUtilService, by NPXS10036
| 0x69 || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x68 || ? || ? || ||
| 0x6A || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| ? || ur0:user/XX/grpmsg || adXXXXXXXXXXXX: || ||
| 0x6B || - || 0x15 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| ? || ur0:contacts || ? || ||
| 0x6C || - || 0x15 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x69 || ux0:music || music0: || automounted <br>or [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] <br> or [[SceAppUtil#sceAppUtilMusicMount|sceAppUtilMusicMount]] || SceAvMediaService, <br>SceHostCollaboService, <br>SceMusicBrowser, <br>SceShell
| 0x6D || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x6A || ? || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMountById|sceAppMgrAppDataMountById]] ||
| 0x6E || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x6B || ? || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMountById|sceAppMgrAppDataMountById]] ||
| 0x6F || - || 0x15 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x6C || ux0:calendar || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] || SceCalendar, <br>SceCalendarBg, <br>SceCalendarDialogPlugin, <br>SceEmailApp
| 0x70 || - || 0x15 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x6D || ux0:video || video0: || [[SceAppUtilExt#sceAppUtilExtVideoMount|sceAppUtilExtVideoMount]] <br>or [[SceDriverUser#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] ||
| 0xC8 || - || 0x15 || - || td%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x6E || ux0:appmeta/new (only while app promoting)<br>ux0:appmeta/<TITLEID> || adXXXXXXXXXXXX: || mounted when installing app / refreshing LiveArea of an app ||
| 0xC9 || - || 0x15 || - || td%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 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
| 0xCA || - || 0x15 || - || sceSblACMgrIsNotSandboxed(0) != 0 ? ms0: : ms%s%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x70 || ux0:book || ?adXXXXXXXXXXXX:? || [[SceAppUtil#sceAppUtilBookMount|sceAppUtilBookMount]] || Reader™ (PCSC80012)
| 0xCB || - || 0x15 || - || td%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0xC8 || ur0:temp/sqlite || tdXXXXXXXXXXXX: || mounted by some system apps ||
| 0xCC || - || 0x15 || - || td%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0xC9 || ur0:temp/attach || tdXXXXXXXXXXXX: || mounted by some games ||
| 0xCD || - || 0x15 || - || cache0:
|-
|-
| 0xCA || ux0:pspemu || ms0: || [[SceAppMgr#sceAppMgrPspSaveDataRootMount|sceAppMgrPspSaveDataRootMount]] || mounted by NPXS19999 (SceShell) when asked by CMA or PspEmu or SceGameManual or Store
| 0xCE || - || 0x15 || - || td%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0xCB || ? || tdXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrWorkDirMount|sceAppMgrWorkDirMount]] ||
| 0xCF || - || 0x15 || - || td%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0xCC || ur0:temp/checkout || tdXXXXXXXXXXXX: || mounted by NPXS10002 (SceStoreBrowser or SceCheckoutBrowser) ||
| 0x12D || - || 6 || Sealedkey || trophy_dst0:
|-
|-
| 0xCD || ux0:cache/<TITLEID> || cache0: || [[SceAppUtil#sceAppUtilCacheMount|sceAppUtilCacheMount]] <br>or [[SceAppMgr#sceAppMgrWorkDirMountById|sceAppMgrWorkDirMountById]] ||
| 0x12E || - || 6 || Sealedkey || trophy_sys0:
|-
|-
| 0xCE || ur0:temp/webbrowser || tdXXXXXXXXXXXX: || mounted by NPXS10003 (SceWebBrowser) ||
| 0x12F || - || 6 || Sealedkey || trophy_dat0:
|-
|-
| 0xCF || ? || tdXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrWorkDirMountById|sceAppMgrWorkDirMountById]] || ?
| 0x130 || - || 6 || Sealedkey || trophy_dbk0:
|-
|-
| ? || ux0:mtp || ? || ? || ?MTP?
| 0x190 || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x12C || ? || ? || [[SceAppMgr#sceAppMgrTrophyMount|sceAppMgrTrophyMount]]<br>[[SceAppMgr#sceAppMgrTrophyMountForDriver|sceAppMgrTrophyMountForDriver]] || ?
| 0x191 || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x12E || ur0:user/XX/trophy/data/sce_trop || trophy_sys0: || ?sceNpTrophyCreateContext?<br>[[SceAppMgr#sceAppMgrTrophyMount|sceAppMgrTrophyMount]]<br>[[SceAppMgr#sceAppMgrTrophyMountForDriver|sceAppMgrTrophyMountForDriver]] || mounted by NPXS19999 (SceShell) when asked by app or games
| 0x192 || - || 0x16 || - || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x12F || ur0:user/XX/trophy/data/<COMMID> || trophy_dat0: || [[SceAppMgr#sceAppMgrTrophyMountById|sceAppMgrTrophyMountById]] ||
| 0x1F4 || - || 4 || Sealedkey || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x130 || ?ur0:user/XX/trophy/data/db? || trophy_dbk0: || [[SceAppMgr#sceAppMgrTrophyMountById|sceAppMgrTrophyMountById]] ||
| 0x1F5 || - || 4 || Sealedkey || ad%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x190 || ux0:mms/photo || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrMmsMount|sceAppMgrMmsMount]]<br>[[SceAppMgr#sceAppMgrMmsMountForDriver|sceAppMgrMmsMountForDriver]] || mounted by NPXS10004, by NPXS10036
| 0x1F8 || - || 6 || Sealedkey || sdimport0:
|-
|-
| 0x191 || ux0:mms/music || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrMmsMount|sceAppMgrMmsMount]]<br>[[SceAppMgr#sceAppMgrMmsMountForDriver|sceAppMgrMmsMountForDriver]] || ?mounted by NPXS10009?
| 0x1F9 || - || 6 || Sealedkey || sdimport_tmp0:
|-
|-
| 0x192 || ux0:mms/video || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrMmsMount|sceAppMgrMmsMount]]<br>[[SceAppMgr#sceAppMgrMmsMountForDriver|sceAppMgrMmsMountForDriver]] || mounted by NPXS10010, by NPXS10036
| 0x258 || - || 6 || Sealedkey || lm%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x1F4 || ? || ? || ||
| 0x3E8 || - || 2 (0x14 for external path) || klicensee (none for external path) || app0:
|-
|-
| 0x1F8 || ? || sdimport0: || ||
| 0x3E9 || - || 2 (0x14 for external path) || klicensee (none for external path) || app0:
|-
|-
| 0x1F9 || ? || sdimport_tmp0: || ||
| 0x3EA || - || 4 (0xC for gro0:) || Sealedkey || addcont0:
|-
|-
| 0x258 || ? || ? || [[SceAppMgr#sceAppMgrLoopBackMount|sceAppMgrLoopBackMount]] ||
| 0x3EB || - || 4 (0xC for gro0:)  || Sealedkey || addcont0:
|-
|-
| 0x384 || ? || ? || ||
| 0x3EC || - || 5 || Sealedkey || savedata0:
|-
|-
| 0x3E8 || ux0:temp/fakepkg/expand/<TITLEID> (PKG installer promoting),<br> ux0:bgdl/t/XXXXXXXX/<TITLEID>/0000 (bgdl promoting), <br>vs0:app/<TITLEID> || gpXXXXXXXXXXXX:,<br> app0: || automounted ? ||
| 0x3ED || - || 0x15 || - || savedata0:
|-
|-
| 0x3E8 || <br>ux0:app/<TITLEID>, <br>gro0:app/<TITLEID> || gpXXXXXXXXXXXd: || [[SceAppMgr#sceAppMgrGameDataMountForDriver|sceAppMgrGameDataMountForDriver]] ||
| 0x3EE || - || 0x14 || - || sd%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x3E9 || ux0:temp/fakepkg/expand/<TITLEID> (PKG installer promoting), <br>ux0:bgdl/t/XXXXXXXX/<TITLEID>/0000 (bgdl promoting) || gpXXXXXXXXXXXX:,<br>app0: (mounted over /app/ app0:) || ||
| 0x3EF || - || 0x14 || - || sd%02x%02x%02x%02x%02x%02xd0:
|-
|-
| 0x3E9 || ux0:patch/<TITLEID>, <br>grw0:patch/<TITLEID> || gpXXXXXXXXXXXd: || [[SceAppMgr#sceAppMgrGameDataMountForDriver|sceAppMgrGameDataMountForDriver]] ||
| 0x3F0 || - || 0x15 || - || ud%02x%02x%02x%02x%02x%02xd0:
|}
 
{| class="wikitable"
|-
|-
| 0x3EA || ux0:temp/fakepkg/expand/<TITLEID> (PKG installer promoting), <br>ux0:bgdl/t/XXXXXXXX/<TITLEID>/0000 (bgdl promoting) || gpXXXXXXXXXXXX:,<br>addcont0: - addcont1: || automounted by [[SceAppMgr]] <br>or [[SceAppUtil#sceAppUtilAddcontMount|sceAppUtilAddcontMount]] <br>or [[SceAppUtil#sceAppUtilDrmOpen|sceAppUtilDrmOpen]] <br>or [[SceAppUtil#sceAppUtilAddcontForceAddcontMount|sceAppUtilAddcontForceAddcontMount]] ||
! MountId !! real path <br>(<code>X</code> is an incremental number) !! virtual mount point <br>(<code>X</code> is randomized) !! Function to call for mounting !! Used by
|-
|-
| 0x3EA || gro0:addcont/<TITLEID> || ? || [[SceAppMgr#sceAppMgrAddContMount|sceAppMgrAddContMount]] ||
| ?0x3F? || ux0:data/near/gift || gift0: || Seen in [[SceAppMgr#sceAppMgrAppDataMountByIdForDriver|sceAppMgrAppDataMountByIdForDriver]] || ?SceNear?
|-
|-
| 0x3EA || ux0:addcont/<TITLEID>, <br>grw0:addcont/<TITLEID> || ? || [[SceAppMgr#sceAppMgrAddContAddMount|sceAppMgrAddContAddMount]]<br>[[SceAppMgr#sceAppMgrAddContMount|sceAppMgrAddContMount]] ||
| 0x64 || ux0:picture || photo0: || automounted <br>or [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]]<br> or [[SceAppUtil#sceAppUtilPhotoMount|sceAppUtilPhotoMount]] || SceEmailApp,<br> SceHostCollaboService, <br>ScePsp2Compat, <br>SceSettings, <br>SceWebBrowser, <br>SceWebUIPlugin, by NPXS10036
|-
|-
| 0x3EA || gro0:acinst/<titleid> || ? || [[SceAppMgr#sceAppMgrAcInstGetAcdirParamForDriver|sceAppMgrAcInstGetAcdirParamForDriver]] ||
| 0x64 || ? || ? || [[SceAppMgr#sceAppMgrPhotoMountForDriver|sceAppMgrPhotoMountForDriver]]<br>[[SceAppMgr#sceAppMgrPhotoMount|sceAppMgrPhotoMount]]<br>[[SceAppMgr#sceAppMgrAppDataMountForDriver|sceAppMgrAppDataMountForDriver]] ||
|-
|-
| 0x3EB || ux0:addcont/<TITLEID>, <br>grw0:addcont/<TITLEID> || ? || [[SceAppMgr#sceAppMgrAddContMount|sceAppMgrAddContMount]] ||
| 0x65 || ur0:user/XX/psnfriend || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] || SceFriend,<br> SceFriendListDialogPlugin,<br> SceInvitationDlgPlugin,<br> SceNpGameCustomDataDPlugin,<br> SceNpMessageDialogPlugin,<br> SceNpProfile2DialogPlugin,<br> ScePsnMail,<br> SceShell
|-
| 0x66 || ur0:user/XX/psnmsg || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] || SceInvitationDlgImplPlugin, <br>SceMsgMiddleWare, <br>SceNpGameCustomDataDlgImpl, <br>SceNpMessage, <br>SceNpMessageDlgImplPlugin
|-
| 0x67 || ur0:user/XX/near || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] || SceNear, <br>SceNearAutoCheckin, <br>SceNearAutoLocation, <br>SceNearProfile, <br>SceNearUtilService, by NPXS10036
|-
| 0x68 || ? || ? || ||
|-
| ? || ur0:user/XX/grpmsg || adXXXXXXXXXXXX: || ||
|-
| ? || ur0:contacts || ? || ||
|-
|-
| 0x3EC || ux0:theme/<CONTENTID> || tmXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrThemeDataMount|sceAppMgrThemeDataMount]] ||
| 0x69 || ux0:music || music0: || automounted <br>or [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] <br> or [[SceAppUtil#sceAppUtilMusicMount|sceAppUtilMusicMount]] || SceAvMediaService, <br>SceHostCollaboService, <br>SceMusicBrowser, <br>SceShell
|-
|-
| 0x3ED || ux0:user/XX/savedata/<TITLEID> || savedata0: <br>?savedata1:? || automounted by [[SceAppMgr]] ||
| 0x6A || ? || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMountById|sceAppMgrAppDataMountById]] ||
|-
|-
| 0x3ED || ?any path? || tsXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrFakeSaveDataCreateMountForDriver|sceAppMgrFakeSaveDataCreateMountForDriver]]<br>[[SceAppMgr#sceAppMgrGetSaveDataInfoForSpecialExport|sceAppMgrGetSaveDataInfoForSpecialExport]] || ?fake_package_installer?<br>?SceContentManager?
| 0x6B || ? || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMountById|sceAppMgrAppDataMountById]] ||
|-
|-
| 0x3ED || ?any path? || ? || [[SceAppMgr#sceAppMgrLoadSaveDataSystemFile|sceAppMgrLoadSaveDataSystemFile]] || ?fake_package_installer?
| 0x6C || ux0:calendar || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] || SceCalendar, <br>SceCalendarBg, <br>SceCalendarDialogPlugin, <br>SceEmailApp
|-
|-
| 0x3ED || ux0:user/XX/savedata_plus/work/<TITLEID> || tsXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrCloudDataDstCreateMountForDriver|sceAppMgrCloudDataDstCreateMountForDriver]] ||
| 0x6D || ux0:video || video0: || [[SceAppUtilExt#sceAppUtilExtVideoMount|sceAppUtilExtVideoMount]] <br>or [[SceDriverUser#sceAppMgrAppDataMount|sceAppMgrAppDataMount]] ||
|-
|-
| 0x3ED || ux0:/user/XX/savedata/<TITLEID> || tsXXXXXXXXXXXX:<br>tsXXXXXXXXXXXXd || [[SceAppMgr#sceAppMgrCloudDataSrcMountForDriver|sceAppMgrCloudDataSrcMountForDriver]]<br>[[SceAppMgr#sceAppMgrUpdateSaveDataParam|sceAppMgrUpdateSaveDataParam]] ||
| 0x6E || ux0:appmeta/new (only while app promoting)<br>ux0:appmeta/<TITLEID> || adXXXXXXXXXXXX: || mounted when installing app / refreshing LiveArea of an app ||
|-
|-
| 0x3ED || grw0:savedata/<titleid> || tsXXXXXXXXXXXX:<br>tsXXXXXXXXXXXXd || [[SceAppMgr#sceAppMgrCloudDataSrcMountForDriver|sceAppMgrCloudDataSrcMountForDriver]]<br>[[SceAppMgr#sceAppMgrUpdateSaveDataParam|sceAppMgrUpdateSaveDataParam]] ||
| 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
|-
|-
| 0x3ED || ux0:/user/XX/savedata_vc/<titleid>,<br>ux0:/user/XX/savedata/<titleid> || ? || [[SceAppMgr#sceAppMgrSaveDataAddMount|sceAppMgrSaveDataAddMount]] ||
| 0x70 || ux0:book || ?adXXXXXXXXXXXX:? || [[SceAppUtil#sceAppUtilBookMount|sceAppUtilBookMount]] || Reader™ (PCSC80012)
|-
|-
| 0x3EE || ur0:user/XX/savedata/<TITLEID> || savedata0: <br>?savedata1:? || [[SceAppMgr#sceAppMgrSaveDataAddMount|sceAppMgrSaveDataAddMount]] <br>or [[SceAppUtil#sceAppUtilSaveDataMount|sceAppUtilSaveDataMount]] ||
| 0xC8 || ur0:temp/sqlite || tdXXXXXXXXXXXX: || mounted by some system apps ||
|-
|-
| 0x3EF || vs0:sys/external || sdXXXXXXXXXXXX: || automounted ||
| 0xC9 || ur0:temp/attach || tdXXXXXXXXXXXX: || mounted by some games ||
|-
|-
| 0x3F0 || vs0:data/external || sdXXXXXXXXXXXX: || automounted ||
| 0xCA || ux0:pspemu || ms0: || [[SceAppMgr#sceAppMgrPspSaveDataRootMount|sceAppMgrPspSaveDataRootMount]] || mounted by NPXS19999 (SceShell) when asked by CMA or PspEmu or SceGameManual or Store
|}
|-
 
| 0xCB || ? || tdXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrWorkDirMount|sceAppMgrWorkDirMount]] ||
=== Types ===
|-
 
| 0xCC || ur0:temp/checkout || tdXXXXXXXXXXXX: || mounted by NPXS10002 (SceStoreBrowser or SceCheckoutBrowser) ||
<source lang="C">
|-
// Linked list of these items is controlled by common function that is responsible for PFS mounting.
| 0xCD || ux0:cache/<TITLEID> || cache0: || [[SceAppUtil#sceAppUtilCacheMount|sceAppUtilCacheMount]] <br>or [[SceAppMgr#sceAppMgrWorkDirMountById|sceAppMgrWorkDirMountById]] ||
// 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.
| 0xCE || ur0:temp/webbrowser || tdXXXXXXXXXXXX: || mounted by NPXS10003 (SceWebBrowser) ||
 
|-
// Pointer of address of first entry is : on 3.60, segment 1, offset 0x3470C.
| 0xCF || ? || tdXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrWorkDirMountById|sceAppMgrWorkDirMountById]] || ?
// size is 0x1D0 (known)
|-
struct pfs_mount_t {
| ? || ux0:mtp || ? || ? || ?MTP?
  int mount_id;
|-
  char path[0x124]; // path used for PFS mount (like ux0:app/<TITLEID>)
| 0x12C || ? || ? || [[SceAppMgr#sceAppMgrTrophyMount|sceAppMgrTrophyMount]]<br>[[SceAppMgr#sceAppMgrTrophyMountForDriver|sceAppMgrTrophyMountForDriver]] || ?
  char pfs_rnd_drive_id[0x10]; // PFS mount drive name - used for PFS mount - used internally by iofilemgr to connect to vfs_nodes through vfs_node_info?
|-
  char title_id[0x10];
| 0x12E || ur0:user/XX/trophy/data/sce_trop || trophy_sys0: || ?sceNpTrophyCreateContext?<br>[[SceAppMgr#sceAppMgrTrophyMount|sceAppMgrTrophyMount]]<br>[[SceAppMgr#sceAppMgrTrophyMountForDriver|sceAppMgrTrophyMountForDriver]] || mounted by NPXS19999 (SceShell) when asked by app or games
  SceUInt64 auth_ids[0x10]; // array of auth ids
|-
  pfs_mount_t *prev; //pointer to prev item in the list or 0
| 0x12F || ur0:user/XX/trophy/data/<COMMID> || trophy_dat0: || [[SceAppMgr#sceAppMgrTrophyMountById|sceAppMgrTrophyMountById]] ||
  pfs_mount_t *next; //pointer to next item in the list or 0
|-
};
| 0x130 || ?ur0:user/XX/trophy/data/db? || trophy_dbk0: || [[SceAppMgr#sceAppMgrTrophyMountById|sceAppMgrTrophyMountById]] ||
 
|-
// size is 0x24 (known)
| 0x190 || ux0:mms/photo || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrMmsMount|sceAppMgrMmsMount]]<br>[[SceAppMgr#sceAppMgrMmsMountForDriver|sceAppMgrMmsMountForDriver]] || mounted by NPXS10004, by NPXS10036
struct appmgr_mount_t {
|-
  pfs_mount_t *this_pfs_mount;
| 0x191 || ux0:mms/music || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrMmsMount|sceAppMgrMmsMount]]<br>[[SceAppMgr#sceAppMgrMmsMountForDriver|sceAppMgrMmsMountForDriver]] || ?mounted by NPXS10009?
  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 )
| 0x192 || ux0:mms/video || adXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrMmsMount|sceAppMgrMmsMount]]<br>[[SceAppMgr#sceAppMgrMmsMountForDriver|sceAppMgrMmsMountForDriver]] || mounted by NPXS10010, by NPXS10036
                                // or <mctx->prev_pfs_mount->path> to <this_pfs_mount->path>
|-
 
| 0x1F4 || ? || ? || ||
  char appmgr_rnd_drive_id[0x10]; //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
| 0x1F8 || ? || sdimport0: || ||
  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
| 0x1F9 || ? || sdimport_tmp0: || ||
};
|-
 
| 0x258 || ? || ? || [[SceAppMgr#sceAppMgrLoopBackMount|sceAppMgrLoopBackMount]] ||
struct appmgr_mount_holder_t {
|-
  int unk0;
| 0x384 || ? || ? || ||
  appmgr_mount_t *first_virt_mount; //start of the list for appmgr mounts
|-
};
| 0x3E8 || ux0:temp/fakepkg/expand/<TITLEID> (PKG installer promoting),<br> ux0:bgdl/t/XXXXXXXX/<TITLEID>/0000 (bgdl promoting), <br>vs0:app/<TITLEID> || gpXXXXXXXXXXXX:,<br> app0: || automounted ? ||
 
|-
struct titleId_item {
| 0x3E8 || <br>ux0:app/<TITLEID>, <br>gro0:app/<TITLEID> || gpXXXXXXXXXXXd: || [[SceAppMgr#sceAppMgrGameDataMountForDriver|sceAppMgrGameDataMountForDriver]] ||
  char titleId[16];
|-
};
| 0x3E9 || ux0:temp/fakepkg/expand/<TITLEID> (PKG installer promoting), <br>ux0:bgdl/t/XXXXXXXX/<TITLEID>/0000 (bgdl promoting) || gpXXXXXXXXXXXX:,<br>app0: (mounted over /app/ app0:) || ||
 
|-
// most importantly contains rif_info and keystone
| 0x3E9 || ux0:patch/<TITLEID>, <br>grw0:patch/<TITLEID> || gpXXXXXXXXXXXd: || [[SceAppMgr#sceAppMgrGameDataMountForDriver|sceAppMgrGameDataMountForDriver]] ||
// size is 0x508 (known)
|-
struct phys_ctx_t {
| 0x3EA || ux0:temp/fakepkg/expand/<TITLEID> (PKG installer promoting), <br>ux0:bgdl/t/XXXXXXXX/<TITLEID>/0000 (bgdl promoting) || gpXXXXXXXXXXXX:,<br>addcont0: - addcont1: || automounted by [[SceAppMgr]] <br>or [[SceAppUtil#sceAppUtilAddcontMount|sceAppUtilAddcontMount]] <br>or [[SceAppUtil#sceAppUtilDrmOpen|sceAppUtilDrmOpen]] <br>or [[SceAppUtil#sceAppUtilAddcontForceAddcontMount|sceAppUtilAddcontForceAddcontMount]] ||
  int unk0[88];
|-
  int flag_160;
| 0x3EA || gro0:addcont/<TITLEID> || ? || [[SceAppMgr#sceAppMgrAddContMount|sceAppMgrAddContMount]] ||
  int unk164;
|-
  int unk168;
| 0x3EA || ux0:addcont/<TITLEID>, <br>grw0:addcont/<TITLEID> || ? || [[SceAppMgr#sceAppMgrAddContAddMount|sceAppMgrAddContAddMount]]<br>[[SceAppMgr#sceAppMgrAddContMount|sceAppMgrAddContMount]] ||
  int unk16C;
|-
  int unk170;
| 0x3EA || gro0:acinst/<titleid> || ? || [[SceAppMgr#sceAppMgrAcInstGetAcdirParamForDriver|sceAppMgrAcInstGetAcdirParamForDriver]] ||
  char physical_mountpoint[12];
|-
  int unk180[70];
| 0x3EB || ux0:addcont/<TITLEID>, <br>grw0:addcont/<TITLEID> || ? || [[SceAppMgr#sceAppMgrAddContMount|sceAppMgrAddContMount]] ||
  char prefix_298[4];
|-
  int flag_29C;
| 0x3EC || ux0:theme/<CONTENTID> || tmXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrThemeDataMount|sceAppMgrThemeDataMount]] ||
  int unk2A0;
|-
  int unk2A4;
| 0x3ED || ? || savedata0: of ux0: or grw0: || automounted by [[SceAppMgr]] (writable mount with pfs mount) ||
  rif_info rif;
|-
  char keystone_318[96];
| 0x3ED || ux0:user/XX/savedata/<TITLEID> || savedata0: <br>?savedata1:? || automounted by [[SceAppMgr]] ||
  char titleId_378[16];
|-
  char titleid_388[16];
| 0x3ED || ?any path? || tsXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrFakeSaveDataCreateMountForDriver|sceAppMgrFakeSaveDataCreateMountForDriver]]<br>[[SceAppMgr#sceAppMgrGetSaveDataInfoForSpecialExport|sceAppMgrGetSaveDataInfoForSpecialExport]] || ?fake_package_installer?<br>?SceContentManager?
  titleId_item addContTitleIds[8];
|-
  titleId_item saveDataTitleIds[8];
| 0x3ED || ?any path? || ? || [[SceAppMgr#sceAppMgrLoadSaveDataSystemFile|sceAppMgrLoadSaveDataSystemFile]] || ?fake_package_installer?
  char unk498[112];
|-
};
| 0x3ED || ux0:user/XX/savedata_plus/work/<TITLEID> || tsXXXXXXXXXXXX: || [[SceAppMgr#sceAppMgrCloudDataDstCreateMountForDriver|sceAppMgrCloudDataDstCreateMountForDriver]] ||
 
|-
struct sub_ctx_23C2960_C {
| 0x3ED || ux0:/user/XX/savedata/<TITLEID> || tsXXXXXXXXXXXX:<br>tsXXXXXXXXXXXXd || [[SceAppMgr#sceAppMgrCloudDataSrcMountForDriver|sceAppMgrCloudDataSrcMountForDriver]]<br>[[SceAppMgr#sceAppMgrUpdateSaveDataParam|sceAppMgrUpdateSaveDataParam]] ||
  char unk0[296];
|-
  int unk128;
| 0x3ED || grw0:savedata/<titleid> || tsXXXXXXXXXXXX:<br>tsXXXXXXXXXXXXd || [[SceAppMgr#sceAppMgrCloudDataSrcMountForDriver|sceAppMgrCloudDataSrcMountForDriver]]<br>[[SceAppMgr#sceAppMgrUpdateSaveDataParam|sceAppMgrUpdateSaveDataParam]] ||
  int unk12C;
|-
  int unk130;
| 0x3ED || ux0:/user/XX/savedata_vc/<titleid>,<br>ux0:/user/XX/savedata/<titleid> || ? || [[SceAppMgr#sceAppMgrSaveDataAddMount|sceAppMgrSaveDataAddMount]] ||
  int unk134;
|-
  int unk138;
| 0x3EE || ? || savedata0: of not ux0: and grw0: || automounted by [[SceAppMgr]] (writable mount without pfs mount) ||
  int unk13C;
|-
  char unk140[1016];
| 0x3EE || ur0:user/XX/savedata/<TITLEID> || savedata0: <br>?savedata1:? || [[SceAppMgr#sceAppMgrSaveDataAddMount|sceAppMgrSaveDataAddMount]] <br>or [[SceAppUtil#sceAppUtilSaveDataMount|sceAppUtilSaveDataMount]] ||
  int unk538;
|-
  int unk53C;
| 0x3EF || vs0:sys/external || sdXXXXXXXXXXXX: || automounted ||
  char unk540;
|-
  char unk541;
| 0x3F0 || vs0:data/external || sdXXXXXXXXXXXX: || automounted ||
  char unk542;
|}
  char unk543;
  int unk544;
  int unk548;
};


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


// most importantly holds appmgr_mount_holder_t
<source lang="C">
// which is a root for appmgr mountpoints
// invalid category (not gd) or invalid TITLE ID (e.g. "VITASHELL")
struct sub_ctx_23C2960_558 {
#define SCE_APPMGR_ERROR_INVALID_PARAM_SFO (0x80800015)
  char titleId[32];
  SceUID pid;
  int unk24;
  appmgr_mount_holder_t mctx_hldr_28;
  phys_ctx_t phys_ctx_30;
  sub_ctx_23C2960_558_548 unk548;
};


struct sub_ctx_23C2960_AFC_10A4 {
typedef char[0x10] SceTitleId;
  int unk0;
  int unk4;
  char unk8;
  char unk9;
  char unkA;
  char unkB;
  char unkC;
  char unkD;
  char unkE;
  char unkF;
};


struct sub_ctx_23C2960_AFC {
typedef struct SceAppMgrLaunchParam { // size is 0x34
   char unk_0[4260];
    SceSize size;   // Size of this structure
  sub_ctx_23C2960_AFC_10A4 unk_10A4;
    SceUInt32 attr; // set to 0x80000000 to break on launch
};
    SceUInt32 initPriority;
    SceUInt32 unk_C;
    SceUInt32 unk_10;
    SceUInt32 unk_14;
    SceUInt32 budgetId;
    SceUInt32 unk_1C;
    SceUInt32 unk_20;
    SceUInt32 unk_24;
    SceUInt32 unk_28;
    SceUInt32 unk_2C;
    SceUInt32 unk_30;
} SceAppMgrLaunchParam;


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


struct sub_ctx_23C2960_1BC0_14 {
struct appmgr_mount_t { // size is 0x24 (known)
   char unk0[2028];
   pfs_mount_t *this_pfs_mount;
   sub_ctx_23C2960_1BC0_14_7EC unk7EC;
   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>


struct sub_ctx_23C2960_1BC0 {
   ScePfsRndDriveId appmgr_rnd_drive_id; // used for appmgr mount - returned when executing appmgr mount function
  __int16 unk0;
   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
  __int16 unk2;
   appmgr_mount_t* prev; // pointer to prev item in the list or 0
  int unk4;
   appmgr_mount_t* next; // pointer to next item in the list or 0
   int unk8;
} appmgr_mount_t;
   SceUID SceAppMgrAppMutex_uid;
   SceUID current_thread_10;
   sub_ctx_23C2960_1BC0_14 unk14;
};


struct sub_ctx_23C2960_2400 {
typedef struct appmgr_mount_holder_t {
   int unk0;
   int unk0;
   int unk4;
   appmgr_mount_t *first_virt_mount; // start of the list for appmgr mounts
  int unk8;
} appmgr_mount_holder_t;
   char unkC[4];
 
};
typedef struct titleId_item {
   SceTitleId titleId;
} titleId_item;


// size is 0x2410 (known)
// most importantly contains rif_info and keystone
struct ctx_23C2960 {
typedef struct phys_ctx_t { // size is 0x508 (known)
   int appId;
  int unk0[0x58];
   int unk4;
  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 unk8;
   sub_ctx_23C2960_C unkC;
   int unkC;
  sub_ctx_23C2960_558 unk_558;
   int unk10;
  int flags_AC0;
   int unk14;
  int unk_AC4;
   int unk18;
  int is_this_process_AC8;
   int unk1C;
  int unk_ACC;
   int unk20;
  int appmgr_0x10000001_event_indicator_AD0;
   int unk24;
  int appmgr_0x10000002_event_indicator_AD4;
   int unk28;
  int appmgr_0x10000003_event_indicator_AD8;
   int unk2C;
  int appmgr_0x20000001_event_indicator_ADC;
} sub_ctx_23C2960_558_548;
  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;
};


typedef ctx_23C2960 global_ctx_item;
// 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;


struct generic_mount_ctx {
typedef struct sub_ctx_23C2960_AFC_10A4 {
  char titleId[16];
  int unk0;
  char passCode[32];
  int unk4;
  char mountDrive[16];
  char unk8;
};
  char unk9;
  char unkA;
  char unkB;
  char unkC;
  char unkD;
  char unkE;
  char unkF;
} sub_ctx_23C2960_AFC_10A4;


#define SCE_APPMGR_MAX_APP_NAME_LENGTH (31) /* Maximum app name length */
typedef struct sub_ctx_23C2960_AFC {
  char unk_0[4260];
  sub_ctx_23C2960_AFC_10A4 unk_10A4;
} sub_ctx_23C2960_AFC;


/* Event ID */
typedef struct sub_ctx_23C2960_1BC0_14_7EC {
#define SCE_APPMGR_SYSTEMEVENT_ON_ACTIVATE (0x10000001)
  int unk0;
#define SCE_APPMGR_SYSTEMEVENT_ON_DEACTIVATE (0x10000002)
  int unk4;
#define SCE_APPMGR_SYSTEMEVENT_ON_RESUME (0x10000003)
  int unk8;
#define SCE_APPMGR_SYSTEMEVENT_ON_STORE_PURCHASE (0x10000004)
  int unkC;
#define SCE_APPMGR_SYSTEMEVENT_ON_NP_MESSAGE_ARRIVED (0x10000005)
  int unk10;
#define SCE_APPMGR_SYSTEMEVENT_ON_STORE_REDEMPTION (0x10000006)
  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;


/* Error number */
typedef struct sub_ctx_23C2960_1BC0_14 {
#define SCE_APPMGR_ERROR_BUSY (0x80802000) /* Busy */
  char unk0[2028];
#define SCE_APPMGR_ERROR_INTERNAL (0x80802001) /* Internal error */
  sub_ctx_23C2960_1BC0_14_7EC unk7EC;
#define SCE_APPMGR_ERROR_PARAM (0x80802002) /* The parameter is invalid. It is necessary to deal with it by the time of application development */
} sub_ctx_23C2960_1BC0_14;
#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 */
struct sub_ctx_23C2960_1BC0 {
typedef enum SceAppMgrInfoBarVisibility {
  __int16 unk0;
SCE_APPMGR_INFOBAR_VISIBILITY_INVISIBLE = 0,
  __int16 unk2;
SCE_APPMGR_INFOBAR_VISIBILITY_VISIBLE  = 1
  int unk4;
} SceAppMgrInfoBarVisibility;
  int unk8;
  SceUID SceAppMgrAppMutex_uid;
  SceUID current_thread_10;
  sub_ctx_23C2960_1BC0_14 unk14;
} sub_ctx_23C2960_1BC0;


typedef enum SceAppMgrInfoBarColor {
typedef struct sub_ctx_23C2960_2400 {
SCE_APPMGR_INFOBAR_COLOR_BLACK  = 0,
  int unk0;
SCE_APPMGR_INFOBAR_COLOR_WHITE  = 1
  int unk4;
} SceAppMgrInfoBarColor;
  int unk8;
  char unkC[4];
} sub_ctx_23C2960_2400;


typedef enum SceAppMgrInfoBarTransparency {
typedef struct ctx_23C2960_SceAppInfoInternal360 { // size is 0x2410 (known)
SCE_APPMGR_INFOBAR_TRANSPARENCY_OPAQUE      = 0,
  int appId;
SCE_APPMGR_INFOBAR_TRANSPARENCY_TRANSLUCENT = 1
  int unk4;
} SceAppMgrInfoBarTransparency;
  int unk8;
 
  sub_ctx_23C2960_C unkC;
#define SCE_APP_MGR_MAX_EVENT_PARM_LENGTH (56) /* Maximum event parameter length */
  sub_ctx_23C2960_558 unk_558;
 
  int flags_AC0;
/* Event structure */
  int unk_AC4;
typedef struct SceAppMgrEvent { // size is 0x64
  int is_this_process_AC8;
int event; /* Event ID */
  int unk_ACC;
SceUID appId; /* Application ID. Added when required by the event */
  int appmgr_0x10000001_event_indicator_AD0;
char  param[SCE_APP_MGR_MAX_EVENT_PARM_LENGTH]; /* Parameters to pass with the event */
  int appmgr_0x10000002_event_indicator_AD4;
} SceAppMgrEvent;
  int appmgr_0x10000003_event_indicator_AD8;
 
  int appmgr_0x20000001_event_indicator_ADC;
/* System event structure */
  int appmgr_0x20000004_event_indicator_AE0;
typedef struct SceAppMgrSystemEvent { // size is 0x64
  int appmgr_0x10000101_0x10000102_event_indicator_AE4;
int systemEvent; /* Event ID */
  int appmgr_0x10000004_event_indicator_AE8;
union {
  int appmgr_0x10000006_event_indicator_AEC;
SceUInt8 reserved[60];
  int appmgr_0x10000005_event_indicator_AF0;
} data;
  int appmgr_0x20000010_event_indicator_AF4;
} SceAppMgrSystemEvent;
  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 struct SceAppMgrAppState { // size is 128 bytes
typedef ctx_23C2960 global_ctx_item;
SceUInt32 systemEventNum;
SceUInt32 appEventNum;
SceBool isSystemUiOverlaid;


SceUInt8 reserved[128 - sizeof(SceUInt32)*2 - sizeof(SceBool)];
typedef struct generic_mount_ctx {
} SceAppMgrAppState;
  SceTitleId titleId;
  char passCode[32];
  char mountDrive[16];
} generic_mount_ctx;


typedef struct SceAppMgrAppInfo { // size is 128 bytes
#define SCE_APPMGR_MAX_APP_NAME_LENGTH (31) /* Maximum app name length */
char appName[32];


SceUInt8 reserved[128 - 32];
/* System event ID */
} SceAppMgrAppInfo;
#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)


typedef struct SceAppMgrNetworkDisconnectionWarningDialogStateOptParam {
/* Event ID (old SDK) */
SceUInt8 reserved[128];
#define SCE_APP_EVENT_UNK0 (0x00000003)
} SceAppMgrNetworkDisconnectionWarningDialogStateOptParam;
#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)


typedef struct SceAppMgrLoadExecOptParam {
/* Error number */
int reserved[256/4];
#define SCE_APPMGR_ERROR_BUSY (0x80802000) /* Busy */
} SceAppMgrLoadExecOptParam;
#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 */


// First element is at offset 0x22110 on FW 0.990
/* Infobar state */
typedef struct SceAppInfo_internal { // (size is 0xADC, 4 elements max) on FW 0.990
typedef enum SceAppMgrInfoBarVisibility {
SceUID appId; // 0x0 - Application ID
SCE_APPMGR_INFOBAR_VISIBILITY_INVISIBLE = 0,
char appName[32]; // 0x4
SCE_APPMGR_INFOBAR_VISIBILITY_VISIBLE  = 1
char appPath[256]; // 0x24
} SceAppMgrInfoBarVisibility;
SceSize budgetSize; // 0x124
SceSize phycontSize; // 0x128
SceUInt32 unk_12C; // 0x12C
SceUInt32 launchMode; // 0x130
SceUInt32 budgetType; // 0x134
SceUInt32 processAttr; // 0x138
SceUInt32 unk_13C; // 0x13C
SceUInt32 unk_140; // 0x140
SceUID processId; // 0x144 - Process ID
SceUInt32 state; // 0x148
char unk_14C[0x278 - 0x14C]; // 0x14C
SceUInt32 bgm_priority; // 0x278
char unk_27C[0x29C - 0x27C]; // 0x27C
SceUInt32 systemEvent0; // 0x29C
SceUInt32 systemEvent1; // 0x2A0
SceUInt32 systemEvent2; // 0x2A4
SceUInt32 appEventNum; // 0x2A8
char unk_27C[0xADC - 0x2AC]; // 0x2AC
} SceAppInfo_internal;


typedef struct SceAppMgrAppStatus { // size is 0x40 on FW 0.990
typedef enum SceAppMgrInfoBarColor {
SceUInt32 unk_0; // 0x0
SCE_APPMGR_INFOBAR_COLOR_BLACK  = 0,
SceUInt32 launchMode; // 0x4
SCE_APPMGR_INFOBAR_COLOR_WHITE  = 1
SceUInt32 bgm_priority; // 0x8
} SceAppMgrInfoBarColor;
char appName[32]; // 0xC
SceUInt32 unk_2C; // 0x2C
SceUID appId; // 0x30 - Application ID
SceUID processId; // 0x34 - Process ID
SceUInt32 bgm_priority_related_1; // 0x38
SceUInt32 bgm_priority_related_2; // 0x3C
} SceAppMgrAppStatus;


</source>
typedef enum SceAppMgrInfoBarTransparency {
SCE_APPMGR_INFOBAR_TRANSPARENCY_OPAQUE      = 0,
SCE_APPMGR_INFOBAR_TRANSPARENCY_TRANSLUCENT = 1
} SceAppMgrInfoBarTransparency;


== Data segment layout ==
#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;


On 3.60 :
SceUInt8 reserved[128 - sizeof(SceUInt32)*2 - sizeof(SceBool)];
{| class="wikitable"
} SceAppMgrAppState;
|-
 
! Address !! Size !! Description
typedef struct SceAppMgrAppInfo { // size is 128 bytes
|-
char appName[32];
| 0x00000 || 0x4 || SceUID <code>SceAppMgrApp</code> pool if size 0x1000
 
|-
SceUInt8 reserved[128 - 32];
| 0x00004 || 0x4 || SceUID <code>SceAppMgrApp</code> mutex
} SceAppMgrAppInfo;
|-
 
| 0x00008 || 0x4 || SceUID <code>SceAppMgrMount</code> pool if size 0x10000
typedef struct SceAppMgrNetworkDisconnectionWarningDialogStateOptParam {
|-
SceUInt8 reserved[128];
| 0x0000C || 0x4 || SceUID <code>SceAppMgrMount</code> mutex
} SceAppMgrNetworkDisconnectionWarningDialogStateOptParam;
|-
 
| 0x00010 || 0x4 || SceUID <code>SceAppMgrSaveData</code> pool if size 0xA000
typedef struct SceAppMgrLoadExecOptParam {
|-
int reserved[256/4];
| 0x00014 || 0x4 || SceUID <code>SceAppMgrSaveData</code> mutex
} SceAppMgrLoadExecOptParam;
|-
 
| 0x00018 || 0x4 || SceUID <code>SceAppMgrPhoto</code> mutex
// First element is at offset 0x22110 on FW 0.990
|-
typedef struct SceAppInfo_internal { // (size is 0xADC, 4 elements max) on FW 0.990
| 0x0001C || 0x4 || int process local storage <code>SceAppMgrSafeMemory</code> of size 0x10000
SceUID appId; // 0x0 - Application ID - (-1)
|-
char appName[32]; // 0x4
| 0x00020 || 0x4 || SceUID <code>SceAppMgrSafeMemory</code> mutex
char appPath[256]; // 0x24
|-
SceSize budgetSize; // 0x124
| 0x00024 || 0x4 || int process local storage <code>SceAppMgrAppInfoCache</code> of size 0x400
SceSize phycontSize; // 0x128
|-
SceUInt32 budget_related; // 0x12C
| 0x00028 || 0x4 || unknown
SceUInt32 launchMode; // 0x130 - (0)
|-
SceUInt32 budgetType; // 0x134 - (0)
| 0x0002C || 0x4 || unknown
SceUInt32 processAttr; // 0x138 - (0)
|-
SceUInt32 unk_13C; // 0x13C
| 0x00030 || 0x4 || SceUID <code>SceAppMgrDbgShellEventCount</code> sema
SceUInt32 unk_140; // 0x140 - (0)
|-
SceUID processId; // 0x144 - Process ID - (0)
| 0x00034 || 0x4 || SceUID <code>SceAppMgrBottomSema</code> sema
SceUInt32 state; // 0x148 - (-1)
|-
SceUID evfId; // 0x14C - Specify the identifier of the event flag. - (-1)
| 0x00038 || 0x4 || SceUID <code>SceAppMgrLiveAreaOperation</code> mutex
SceUInt32 unk_150; // 0x150 - (0)
|-
appmgr_mount_t *mount // 0x154
| 0x0003C || 0x4 || SceUID <code>SceAppMgrLiveAreaOpeResultMx</code> mutex
char buf_158[0x114]; // 0x158
|-
SceUInt32 unk_26C; // 0x26C - (0)
| 0x00040 || 0x4 || SceUID <code>SceAppMgrLiveAreaOpeResultCd</code> mutex
SceUInt32 unk_270; // 0x270 - (0)
|-
SceUInt32 unk_274; // 0x274
| 0x00044 || 0x4 || unknown
SceUInt32 status; // 0x278 - bgm_priority (& ?), runStatus (& 0xf), activeness (& ff0) - (0x101)
|-
SceUInt32 unk_27C; // 0x27C - (0)
| 0x00048 || 0x4 || unknown
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;
 
</source>
 
== Data segment layout ==
 
On 3.60 :
{| class="wikitable"
|-
|-
| 0x0004C || 0x4 || unknown
! Address !! Size !! Description
|-
|-
| 0x00050 || 0x4 || unknown
| 0x00000 || 0x4 || SceUID <code>SceAppMgrApp</code> pool if size 0x1000
|-
|-
| 0x00054 || 0x4 || unknown
| 0x00004 || 0x4 || SceUID <code>SceAppMgrApp</code> mutex
|-
|-
| 0x00058 || 0x4 || unknown
| 0x00008 || 0x4 || SceUID <code>SceAppMgrMount</code> pool if size 0x10000
|-
|-
| 0x0005C || 0x4 || unknown
| 0x0000C || 0x4 || SceUID <code>SceAppMgrMount</code> mutex
|-
|-
| 0x00060 || 0x4 || unknown
| 0x00010 || 0x4 || SceUID <code>SceAppMgrSaveData</code> pool if size 0xA000
|-
|-
| 0x00064 || 0x4 || SceUID <code>SceAppMgrUpdtNtfy</code> sema
| 0x00014 || 0x4 || SceUID <code>SceAppMgrSaveData</code> mutex
|-
|-
| 0x00068 || 0x4 || SceUID <code>SceAppMgrProcessStateUpdater</code> thread
| 0x00018 || 0x4 || SceUID <code>SceAppMgrPhoto</code> mutex
|-
| 0x0001C || 0x4 || int process local storage <code>SceAppMgrSafeMemory</code> of size 0x10000
|-
| 0x00020 || 0x4 || SceUID <code>SceAppMgrSafeMemory</code> mutex
|-
| 0x00024 || 0x4 || int process local storage <code>SceAppMgrAppInfoCache</code> of size 0x400
|-
| 0x00028 || 0x4 || unknown
|-
| 0x0002C || 0x4 || unknown
|-
| 0x00030 || 0x4 || SceUID <code>SceAppMgrDbgShellEventCount</code> sema
|-
| 0x00034 || 0x4 || SceUID <code>SceAppMgrBottomSema</code> sema
|-
| 0x00038 || 0x4 || SceUID <code>SceAppMgrLiveAreaOperation</code> mutex
|-
| 0x0003C || 0x4 || SceUID <code>SceAppMgrLiveAreaOpeResultMx</code> mutex
|-
| 0x00040 || 0x4 || SceUID <code>SceAppMgrLiveAreaOpeResultCd</code> 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 <code>SceAppMgrUpdtNtfy</code> sema
|-
| 0x00068 || 0x4 || SceUID <code>SceAppMgrProcessStateUpdater</code> thread
|-
|-
| 0x0006C || 0x4 || SceUID <code>SceAppMgrGcListener</code> thread
| 0x0006C || 0x4 || SceUID <code>SceAppMgrGcListener</code> thread
Line 730: Line 1,037:
It is located in segment 0 at offset 0x19B51 on 3.60.
It is located in segment 0 at offset 0x19B51 on 3.60.


<source lang="C">int create_mountpoint_base(SceUID pid, appmgr_mount_holder_t *mount_ctx_holder, unsigned int mount_id, char *title_id, char *physical_path, char *mount_drive, char *klicensee, char *mount_point_result);</source>
<source lang="C">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);</source>


* pid - current process pid.
* pid - current process pid.
Line 823: Line 1,130:


<source lang="C">
<source lang="C">
struct acinst_res
typedef struct acinst_res {
{
   char keystone[0x60];
   char keystone[0x60];
   char game_title[0x80];
   char game_title[0x80];
};
} acinst_res;


int sceAppMgrAcInstGetAcdirParamForDriver(const char *titleId, const char *dlc_folder, acinst_res *outputData);
int sceAppMgrAcInstGetAcdirParamForDriver(SceTitleId *titleId, const char *dlc_folder, acinst_res *outputData);
</source>
</source>


Line 842: Line 1,148:
Only valid appmgr mount ids are: <code>0x68</code>, <code>0x6A</code>, <code>0x6B</code>, <code>0x6E</code>
Only valid appmgr mount ids are: <code>0x68</code>, <code>0x6A</code>, <code>0x6B</code>, <code>0x6E</code>


<source lang="C">int sceAppMgrAppDataMountByIdForDriver(int mountId, char *titleId, char *mountPoint);</source>
<source lang="C">int sceAppMgrAppDataMountByIdForDriver(int mountId, SceTitleId *titleId, char *mountPoint);</source>


=== sceAppMgrAppDataMountForDriver ===
=== sceAppMgrAppDataMountForDriver ===
Line 887: Line 1,193:
| 3.60 || 0x193784A9
| 3.60 || 0x193784A9
|}
|}
<source lang="C">int sceAppMgrCheckContentInstallPeriodForDriver(int a1);</source>


=== sceAppMgrCheckPfsMountedForDriver ===
=== sceAppMgrCheckPfsMountedForDriver ===
Line 895: Line 1,203:
| 3.60 || 0x0B1BEEE0
| 3.60 || 0x0B1BEEE0
|}
|}
<source lang="C">int sceAppMgrCheckPfsMountedForDriver(int *result);</source>


=== sceAppMgrCloudDataClearMcIdForDriver ===
=== sceAppMgrCloudDataClearMcIdForDriver ===
Line 903: Line 1,213:
| 3.60 || 0xEC408FEF
| 3.60 || 0xEC408FEF
|}
|}
<source lang="C">int sceAppMgrCloudDataClearMcIdForDriver(int a1);</source>


=== sceAppMgrCloudDataCreateHeaderForDriver ===
=== sceAppMgrCloudDataCreateHeaderForDriver ===
Line 909: Line 1,221:
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0xED87F191
| 0.931.010-1.81 || not present
|-
| 2.000.081-3.740.011 || 0xED87F191
|}
|}


Line 931: Line 1,245:
* mount PFS tsXXXXXXXXXXXX: mountpoint to ux0:user/XX/savedata_plus/work/<TITLEID> path with mountid 0x3ED
* mount PFS tsXXXXXXXXXXXX: mountpoint to ux0:user/XX/savedata_plus/work/<TITLEID> path with mountid 0x3ED


<source lang="C">int sceAppMgrCloudDataDstCreateMountForDriver(const char* titleId, char* mountPoint);</source>
<source lang="C">int sceAppMgrCloudDataDstCreateMountForDriver(SceTitleId *titleId, char *mountPoint);</source>


=== sceAppMgrCloudDataGetMcIdForDriver ===
=== sceAppMgrCloudDataGetMcIdForDriver ===
Line 971: Line 1,285:


<source lang="C">
<source lang="C">
//mode probably allows values 1,2,3
// mode probably allows values 1,2,3
//1 probably selects ux0:
// 1 probably selects ux0:
//2,3 probably selects grw0:
// 2, 3 probably selects grw0:
int sceAppMgrCloudDataSrcMountForDriver(int mode, const char *titleId, char *mountPoint);
int sceAppMgrCloudDataSrcMountForDriver(int mode, SceTitleId *titleId, char *mountPoint);
</source>
</source>


Line 992: Line 1,306:
| 3.60 || 0x7554330F
| 3.60 || 0x7554330F
|}
|}
<source lang="C">int sceAppMgrDebugSettingNotifyUpdateForDriver(int a1);</source>


=== sceAppMgrDrmCloseForDriver ===
=== sceAppMgrDrmCloseForDriver ===
Line 1,061: Line 1,377:
* override with another mount PFS gpXXXXXXXXXXXd: mountpoint to ux0:patch/<TITLEID> or grw0:patch/<TITLEID> path with 0x3E9 if path exists
* override with another mount PFS gpXXXXXXXXXXXd: mountpoint to ux0:patch/<TITLEID> or grw0:patch/<TITLEID> path with 0x3E9 if path exists


<source lang="c">
<source lang="C">int sceAppMgrGameDataMountForDriver(const char *app_path, const char *patch_path, const char *rif_path, char *mount_point);</source>
//derived from _sceAppMgrGameDataMount
int sceAppMgrGameDataMountForDriver(char *app_path, char *patch_path, char *rif_file_path, char *mount_point)</source>


=== sceAppMgrGetBootParamForDriver ===
=== sceAppMgrGetBootParamForDriver ===
Line 1,096: Line 1,410:
| 3.60 || 0xA888C2DC
| 3.60 || 0xA888C2DC
|}
|}
<source lang="C">
// titleId: 10 bytes null-terminated string
int sceAppMgrIsExclusiveProcessRunningForDriver(const char* titleId);
</source>


=== sceAppMgrLaunchAppByPathForDriver ===
=== sceAppMgrLaunchAppByPathForDriver ===
Line 1,133: Line 1,452:
| -usecdlg || none || Use CDRAM large
| -usecdlg || none || Use CDRAM large
|-
|-
| -port || "1" || Unknown
| -port || "1" || Unknown, maybe BGM port
|}
|}
Maybe <code>type</code> is of type SceKernelProcessType like in [[SceProcessmgr#sceKernelStartProcessForKernel]].


<source lang="C">
<source lang="C">
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
  * @brief      Launch an application for debugging
Line 1,165: Line 1,470:
  * @return  pid on success, else < 0.
  * @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);
int sceAppMgrLaunchAppByPathForDriver(const char *path, const char *args, unsigned arg_size, unsigned int type, const SceAppMgrLaunchParam *pParam, void *unk);
</source>
</source>


Line 1,222: Line 1,527:
|}
|}


call [[SceAppMgr#sceAppMgrAppDataMountForDriver|sceAppMgrAppDataMountForDriver]] with mount_id 0x64
Call [[SceAppMgr#sceAppMgrAppDataMountForDriver|sceAppMgrAppDataMountForDriver]] with mount_id 0x64.


<source lang="C">
<source lang="C">
struct sceAppMgrPhotoMountParam
typedef struct sceAppMgrPhotoMountParam {
{
   SceSize size;
   int size;
   char unk4[128];
   char unk4[128];
};
} sceAppMgrPhotoMountParam;


int sceAppMgrPhotoMountForDriver(sceAppMgrPhotoMountParam *opt);
int sceAppMgrPhotoMountForDriver(sceAppMgrPhotoMountParam *opt);
Line 1,416: Line 1,720:
<source lang="C">int sceAppMgrWorkDirMountForDriver(int mountId, char *mountPoint);</source>
<source lang="C">int sceAppMgrWorkDirMountForDriver(int mountId, char *mountPoint);</source>


=== SceAppMgrForDriver_0813AFCA ===
=== sceAppMgrGetUserDirPathForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,423: Line 1,727:
| 0.990-3.60 || 0x0813AFCA
| 0.990-3.60 || 0x0813AFCA
|}
|}
derived from _sceAppMgrGetUserDirPath


<source lang="C">
<source lang="C">
// partition_id: 1 (ur0:) or 2 (ux0:)
// partition_id: 1 (ur0:) or 2 (ux0:)
int SceAppMgrForDriver_0813AFCA(int partition_id, char *path, SceSize maxlen);
int sceAppMgrGetUserDirPathForDriver(int partition_id, char *userDirPath, SceSize path_maxlen);
</source>
</source>


Line 1,437: Line 1,743:
|}
|}


=== SceAppMgrForDriver_2FEACA9F ===
=== sceAppMgrGetShellPidForDriverForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,445: Line 1,751:
|}
|}


=== sceAppMgrSpawnProcessExt_2ForDriver ===
=== sceAppMgrSpawnProcessForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,453: Line 1,759:
|}
|}


=== SceAppMgrForDriver_unk_0C5D65F1 ===
This is a guessed name.
 
<source lang="C">SceUID sceAppMgrSpawnProcessForDriver(const char *name, SceKernelProcessType type, const char *path, SceSize argSize, const void *pArgBlock, void *pOpt);</source>
 
=== sceAppMgrKillAppByNameForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 3.60 || 0x0C5D65F1
| 3.60-3.65 || 0x0C5D65F1
|}
|}


=== SceAppMgrForDriver_unk_1574E1A4 ===
=== sceAppMgrRdrfpMountForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,469: Line 1,779:
|}
|}


=== SceAppMgrForDriver_unk_1B6C2FED ===
<source lang="C">int sceAppMgrRdrfpMountForDriver(SceUInt32 id, const char *path, const void *passcode, char *mountpoint);</source>
 
=== sceAppMgrLaunchAppByNameForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,477: Line 1,789:
|}
|}


=== SceAppMgrForDriver_unk_21BE167A ===
=== sceAppMgrGetPidByNameForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,485: Line 1,797:
|}
|}


=== sceAppMgrSuspendAppForDebugger ===
=== sceAppMgrSuspendAppForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,493: Line 1,805:
|}
|}


<source lang="C">int sceAppMgrSuspendAppForDebugger(uint32_t appId);</source>
<source lang="C">int sceAppMgrSuspendAppForDebuggerForDriver(SceUID id);</source>


=== SceAppMgrForDriver_unk_30947DF4 ===
=== sceAppMgrSaveDataDataSaveForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,503: Line 1,815:
|}
|}


=== SceAppMgrForDriver_unk_3B4F305B ===
=== sceAppMgrLiveAreaOperationByNameForLoadpForDriver_1 ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,511: Line 1,823:
|}
|}


=== SceAppMgrForDriver_unk_4FA62A46 ===
=== sceAppMgrLiveAreaOperationByNameForLoadpForDriver_2 ===
{| class="wikitable"
|-
! Version !! NID
|-
| 3.60 || 0xDD5BEEE3
|}
 
=== sceAppMgrGetAppIdByNameForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,519: Line 1,839:
|}
|}


=== SceAppMgrForDriver_unk_504023C8 ===
=== sceAppMgrLaunchAppForTest2ForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,527: Line 1,847:
|}
|}


=== SceAppMgrForDriver_unk_99AA37C1 ===
Used by [[SceDeci4pLoadp]].
 
Requires [[SceSblACMgr#sceSblACMgrHasUserDebugFlagForDriver|sceSblACMgrHasUserDebugFlagForDriver]] to return true.
 
=== sceAppMgrLaunchAppByNameInternalForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,547: Line 1,871:
<source lang="C">int sceAppMgrSpawnProcessExtForDriver(int a1, int a2, int a3, int a4, int a5, int a6, int a7);</source>
<source lang="C">int sceAppMgrSpawnProcessExtForDriver(int a1, int a2, int a3, int a4, int a5, int a6, int a7);</source>


=== sceAppMgrKillAppForDebugger ===
=== sceAppMgrKillAppForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,560: Line 1,884:
/**
/**
  * @brief      Kill an app process.
  * @brief      Kill an app process.
  * @param[in]  appId The app to kill.
  * @param[in]  id The app to kill.
  * @return      Zero on success, else < 0.
  * @return      Zero on success, else < 0.
  */
  */
int sceAppMgrKillAppForDebugger(SceUID appId);
int sceAppMgrKillAppForDebuggerForDriver(SceUID id);
</source>
</source>


=== SceAppMgrForDriver_unk_DC13160A ===
=== SceAppMgrForDriver_DC13160A ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,574: Line 1,898:
|}
|}


=== SceAppMgrForDriver_unk_DD5BEEE3 ===
Gets App Status by App Id.
{| class="wikitable"
 
|-
<source lang="C">int SceAppMgrForDriver_DC13160A(SceInt32 appId, void* pAppStatus);</source>
! Version !! NID
|-
| 3.60 || 0xDD5BEEE3
|}


=== SceAppMgrForDriver_unk_E8DB7942 ===
=== sceAppMgrRdrfpUmountForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,590: Line 1,910:
|}
|}


=== SceAppMgrForDriver_unk_EBFE1BE2 ===
=== sceAppMgrSaveDataDataRemoveForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,598: Line 1,918:
|}
|}


=== SceAppMgrForDriver_unk_EE6047CA ===
=== sceAppMgrResumeAppByNameForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,606: Line 1,926:
|}
|}


=== SceAppMgrForDriver_unk_F3B1D42E ===
=== sceAppMgrSuspendAppByNameForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,614: Line 1,934:
|}
|}


=== sceAppMgrResumeAppForDebugger ===
=== sceAppMgrResumeAppForDebuggerForDriver ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 1,622: Line 1,942:
|}
|}


<source lang="C">int sceAppMgrResumeAppForDebugger(uint32_t appId);</source>
<source lang="C">int sceAppMgrResumeAppForDebuggerForDriver(SceUID id);</source>


=== sceAppMgrDestroyOtherAppByPidForDriver ===
=== sceAppMgrDestroyOtherAppByPidForDriver ===
Line 1,765: Line 2,085:


<source lang="C">
<source lang="C">
struct sceAppMgrAppDataMountByIdOpt
typedef struct sceAppMgrAppDataMountByIdOpt {
{
   int reserved1;
   int reserved1;
   int reserved2;
   int reserved2;
};
} sceAppMgrAppDataMountByIdOpt;


int _sceAppMgrAppDataMountById(int mountId, generic_mount_ctx *mctx, char *mountPoint, sceAppMgrAppDataMountByIdOpt *opt);
int _sceAppMgrAppDataMountById(int mountId, generic_mount_ctx *mctx, char *mountPoint, sceAppMgrAppDataMountByIdOpt *opt);
Line 1,825: Line 2,144:


<source lang="c">
<source lang="c">
typedef struct sceAppMgrAppParamGetString_opt {
typedef struct sceAppMgrAppParamGetString_opt { // size is 0x10 on 3.60
   SceSize size;
   SceSize size;
   int32_t unk_4;
   int32_t unk_4;
Line 1,837: Line 2,156:
// sceAppMgrAppParamGetString(pid, 0xC, &buffer, &opt);
// sceAppMgrAppParamGetString(pid, 0xC, &buffer, &opt);


int _sceAppMgrAppParamGetString(int pid, int param, char *string, sceAppMgrAppParamGetString_opt* buf_size);
int _sceAppMgrAppParamGetString(int pid, int param, char *string, sceAppMgrAppParamGetString_opt *opt);
</source>
</source>


Line 1,928: Line 2,247:
exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>


checks game data rif from \license\app\
Checks game data rif from \license\app\.


<source lang="C">
<source lang="C">
typedef struct _sceAppMgrCheckRifGD_opt //size is 0x08
typedef struct _sceAppMgrCheckRifGD_opt { // size is 0x8 on FW 3.60
{
   uint32_t unk_0;
   uint32_t unk_0;
   uint32_t unk_4;
   uint32_t unk_4;
}_sceAppMgrCheckRifGD_opt
} _sceAppMgrCheckRifGD_opt;


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


</source>
=== _sceAppMgrContentInstallPeriodStart ===
=== _sceAppMgrContentInstallPeriodStart ===
{| class="wikitable"
{| class="wikitable"
Line 1,989: Line 2,306:


<source lang="c">
<source lang="c">
// example: _sceMgrConvertVs0userDrivePath("vs0:sys/external", mountname, length)
// example:
// char sys_external_path[16];
// memset(sys_external_path, 0, sizeof(sys_external_path));
// _sceMgrConvertVs0userDrivePath("vs0:sys/external", &sys_external_path, 1024);.


int _sceAppMgrConvertVs0UserDrivePath(const char *path, char outpath[length], int length);
// path_maxlen must be <= 1024
int _sceAppMgrConvertVs0UserDrivePath(const char *path, char *converted_path, SceSize path_maxlen);
</source>
</source>


Line 2,002: Line 2,323:
|}
|}


exported to user by <code>SceDriverUser</code>
Exported to user by [[SceDriverUser]].


<source lang="C">
<source lang="C">
int _sceAppMgrDeclareShellProcess2 (char (*str)[32], char (*buf)[8]);
// name: 32 bytes null-terminated string, maybe process name
// unused: 8 bytes buffer, unused on FW 3.60
int _sceAppMgrDeclareShellProcess2(const char* name, void* unused);
</source>
</source>


Line 2,047: Line 2,370:


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
<source lang="C">
// id: seen 600
int _sceAppMgrForceUmount(int id);
</source>


=== _sceAppMgrGameDataMount ===
=== _sceAppMgrGameDataMount ===
Line 2,059: Line 2,387:


<source lang="C">
<source lang="C">
typedef struct _sceAppMgrGameDataMount_opt //size is 0x18
typedef struct _sceAppMgrGameDataMount_opt { // size is 0x18 on FW 3.60
{
   char* mount_point;
   char* mount_point;
   uint32_t unk_4;
   uint32_t unk_4;
Line 2,067: Line 2,394:
   uint32_t unk_10;
   uint32_t unk_10;
   uint32_t unk_14;
   uint32_t unk_14;
}_sceAppMgrGameDataMount_opt;
} _sceAppMgrGameDataMount_opt;


int _sceAppMgrGameDataMount(char *app_path, char *patch_path, char *rif_file_path, _sceAppMgrGameDataMount_opt* opt)
int _sceAppMgrGameDataMount(char *app_path, char *patch_path, char *rif_file_path, _sceAppMgrGameDataMount_opt *opt)
</source>
</source>


=== _sceAppMgrGetAppInfo ===
=== __sceAppMgrGetAppInfo ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 2,078: Line 2,405:
|-
|-
| 0.990 || 0xCA7AF469
| 0.990 || 0xCA7AF469
|}
=== _sceAppMgrGetAppInfo ===
{| class="wikitable"
|-
! Version !! NID
|-
|-
| 1.69-3.60 || 0x6E65D746
| 1.69-3.60 || 0x6E65D746
Line 2,084: Line 2,417:
exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>


<source lang="C">int _sceAppMgrGetAppInfo(SceAppMgrAppInfo *appInfo, SceUInt32 sizeofSceAppMgrAppInfo, SceUInt32 buildVersion);</source>
<source lang="C">int _sceAppMgrGetAppInfo(SceAppMgrAppInfo *pAppInfo, SceUInt32 infoSize, SceUInt32 buildVersion);</source>


=== _sceAppMgrGetAppMgrState ===
=== _sceAppMgrGetAppMgrState ===
Line 2,113: Line 2,446:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x258C3E3C
| 0.990-3.60 || 0x258C3E3C
|}
|}


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
<source lang="C">
typedef struct _sceAppMgrGetAppParam_opt { // size is 0x8 on FW 0.990
SceSize appParamSize;
SceUint32 reserved0;
} _sceAppMgrGetAppParam_opt;
int _sceAppMgrGetAppParam(SceAppMgrAppParam *appParam, _sceAppMgrGetAppParam_opt *opt);
</source>


=== _sceAppMgrGetBootParam ===
=== _sceAppMgrGetBootParam ===
Line 2,123: Line 2,465:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xEEFBC756
| 0.990-3.60 || 0xEEFBC756
|}
|}


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
<source lang="C">
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);</source>


=== _sceAppMgrGetBudgetInfo ===
=== _sceAppMgrGetBudgetInfo ===
Line 2,140: Line 2,490:
Example from webcore
Example from webcore


<source lang="C">SceAppMgrUser_5F00F261(&struct_of_size_0x88)</source>
<source lang="C">SceAppMgrUser_5F00F261(&struct_of_size_0x88);</source>


=== _sceAppMgrGetCoredumpStateForShell ===
=== _sceAppMgrGetCoredumpStateForShell ===
Line 2,167: Line 2,517:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x81569A58
| 0.990-3.60 || 0x81569A58
|}
|}


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
<source lang="C">int _sceAppMgrGetCurrentBgmState(void **currentBgmId, void **currentBgmState);</source>


=== _sceAppMgrGetDevInfo ===
=== _sceAppMgrGetDevInfo ===
Line 2,184: Line 2,536:
Example from store_checkout_plugin.
Example from store_checkout_plugin.


<source lang="C">_sceAppMgrGetDevInfo("ux0:", buffer, resultbuf)</source>
<source lang="C">_sceAppMgrGetDevInfo("ux0:", buffer, resultbuf);</source>


=== _sceAppMgrGetFgAppInfo ===
=== _sceAppMgrGetFgAppInfo ===
Line 2,201: Line 2,553:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xC311CC17
| 0.990-3.60 || 0xC311CC17
|}
|}


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
<source lang="C">
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);
</source>


=== _sceAppMgrGetMediaTypeFromDriveByPid ===
=== _sceAppMgrGetMediaTypeFromDriveByPid ===
Line 2,241: Line 2,602:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x08E93582
| 0.990-3.60 || 0x08E93582
|}
|}


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
<source lang="C">
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);
</source>


=== _sceAppMgrGetPfsDrive ===
=== _sceAppMgrGetPfsDrive ===
Line 2,311: Line 2,681:


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
Resolve a path to the corresponding actual path (uses sceFiosKernelOverlayResolveSyncForDriver underneath).


<source lang="C">
<source lang="C">
/**
/**
  * Resolve a path to the corresponding true path (uses ::ksceFiosKernelOverlayResolveSync underneath).  
  * Resolve a path to the corresponding true path (uses ::sceFiosKernelOverlayResolveSyncForDriver underneath).  
  *
  *
  * @param[in] path - Path to convert (e.g. app0:)
  * @param[in] path - Path to convert (e.g. app0:)
Line 2,357: Line 2,725:
exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>


* check auth id SceContentManager(0x280000000000002D)
* check that current app auth id is SceContentManager (0x280000000000002D)
* check some flag set by SceSblPostSsMgrForDriver (related to utoken_sm.self F00D commands)
* check some flag set by [[SceSblPostSsMgr#SceSblPostSsMgrForDriver]] (related to [[Secure_Modules_Functions#utoken_sm.self|utoken_sm.self]])
* read sealedkey from <path>/sce_sys/sealedkey to restore klicensee
* read sealedkey from <path>/sce_sys/sealedkey to restore klicensee
* mount PFS tsXXXXXXXXXXXX: mountpoint to <path> path with mountid 0x3ED
* mount PFS tsXXXXXXXXXXXX: mountpoint to <path> path with mount ID 0x3ED
* get ACCOUNT_ID from <path>/sce_sys/param.sfo
* get ACCOUNT_ID from <path>/sce_sys/param.sfo


<source lang="C">
<source lang="C">
struct sceAppMgrGetSaveDataInfoForSpecialExportOpt
typedef struct _sceAppMgrGetSaveDataInfoForSpecialExport_opt { // size is 0x8 on FW 3.60
{
   int reserved0;
   int reserved0;
   int reserved1;
   int reserved1;
};
} _sceAppMgrGetSaveDataInfoForSpecialExport_opt;


int _sceAppMgrGetSaveDataInfoForSpecialExport(char *path, char *account_id, sceAppMgrGetSaveDataInfoForSpecialExportOpt *opt);
int _sceAppMgrGetSaveDataInfoForSpecialExport(char *path, char *account_id, _sceAppMgrGetSaveDataInfoForSpecialExport_opt *opt);
</source>
</source>


Line 2,384: Line 2,751:


<source lang="C">
<source lang="C">
struct sceAppMgrGetSaveDataInfo_res
typedef struct _sceAppMgrGetSaveDataInfo_res {
{
   int enum_flag_0;
   int enum_flag_0;
   int enum_flag_4;
   int enum_flag_4;
Line 2,393: Line 2,759:
   int open_psid_related_14;
   int open_psid_related_14;
   int ioctl_related_18;
   int ioctl_related_18;
};
} _sceAppMgrGetSaveDataInfo_res;


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


int _sceAppMgrGetSaveDataInfo(char *path, char *titleid, int force_mount_ux, sceAppMgrGetSaveDataInfoOpt *opt);
int _sceAppMgrGetSaveDataInfo(char *path, SceTitleId *titleid, int force_mount_ux, _sceAppMgrGetSaveDataInfo_opt *opt);
</source>
</source>


Line 2,416: Line 2,781:
exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>


<source lang="C">int _sceAppMgrGetStatusByAppId(int app_id, char *status_buffer);</source>
<source lang="C">int _sceAppMgrGetStatusByAppId(int appId, SceAppMgrAppStatus *appStatus);</source>


=== _sceAppMgrGetStatusById ===
=== _sceAppMgrGetStatusById ===
Line 2,429: Line 2,794:


<source lang="C">
<source lang="C">
typedef struct _sceAppMgrGetStatusById_opt { // size is 8 on FW 0.990
typedef struct _sceAppMgrGetStatusById_opt { // size is 0x8 on FW 0.990
SceSize appStatusSize;
SceSize appStatusSize;
uint32_t reserved1;
uint32_t reserved1;
} _sceAppMgrGetStatusById_opt;
} _sceAppMgrGetStatusById_opt;


int _sceAppMgrGetStatusById(uint32_t id, void *appStatus, _sceAppMgrGetStatusById_opt *opt);</source>
int _sceAppMgrGetStatusById(SceUID id, SceAppMgrAppStatus *appStatus, _sceAppMgrGetStatusById_opt *opt);</source>


=== _sceAppMgrGetStatusByName ===
=== _sceAppMgrGetStatusByName ===
Line 2,454: Line 2,819:
} _sceAppMgrGetStatusByName_opt;
} _sceAppMgrGetStatusByName_opt;


int _sceAppMgrGetStatusByName(const char* appName, void *appStatus, sceAppMgrGetStatus_opt *opt);
int _sceAppMgrGetStatusByName(const char* appName, SceAppMgrAppStatus *appStatus, sceAppMgrGetStatus_opt *opt);
</source>
</source>


Line 2,482: Line 2,847:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x84B138BF
| 0.990-3.60 || 0x84B138BF
|}
|}


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
<source lang="C">
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);
</source>


=== _sceAppMgrGetVs0UserDataDrive ===
=== _sceAppMgrGetVs0UserDataDrive ===
Line 2,492: Line 2,867:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xC361C084
| 0.990-3.60 || 0xC361C084
|}
|}


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
Get drive for mountId 0x3EF.
<source lang="C">int _sceAppMgrGetVs0UserDataDrive(ScePfsRndDriveId *rnd_drive_id);</source>


=== _sceAppMgrGetVs0UserModuleDrive ===
=== _sceAppMgrGetVs0UserModuleDrive ===
Line 2,502: Line 2,881:
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0x85589E87
| 0.990-3.60 || 0x85589E87
|}
|}


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
 
Get drive for mountId 0x3EE.
 
<source lang="C">int _sceAppMgrGetVs0UserModuleDrive(ScePfsRndDriveId *rnd_drive_id);</source>
 
=== _sceAppMgrInitSafeMemoryById ===
=== _sceAppMgrInitSafeMemoryById ===
{| class="wikitable"
{| class="wikitable"
Line 2,606: Line 2,989:


exported to user by <code>SceDriverUser</code>
exported to user by <code>SceDriverUser</code>
<source lang="C">
typedef struct SceAppMgrLaunchAppByUri2Param { // Size is 0x40 on FW 3.60
  SceSize size; // Size of this structure
  SceUInt32 unk_4; // ex: 0
  SceUInt32 unk_8; // ex: -1
  SceUInt32 unk_C;
  SceUInt32 unk_10;
  SceUInt32 unk_14; // ex: -1
  SceUInt8 reserved[0x28];
} SceAppMgrLaunchAppByUri2Param;
int _sceAppMgrLaunchAppByUri2(const char *uri, SceAppMgrLaunchAppByUri2Param *pParam);
</source>


=== _sceAppMgrLaunchAppByUri ===
=== _sceAppMgrLaunchAppByUri ===
Line 2,654: Line 3,051:
int _sceAppMgrLoadExec(const char *appPath, /* Path of SELF file. SELF file must be put immediatly under app0: */
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 */
char *const argv[], /* Array of arguments pass the entry function of new SELF */
const SceAppMgrLoadExecOptParam *optParam /* Not used in userland. Must be NULL */
const SceAppMgrLoadExecOptParam *optParam /* Not used in usermode. Must be NULL */
);
);
</source>
</source>
Line 2,706: Line 3,103:


* check that mountId is 0x258
* check that mountId is 0x258
* calls non exported function equal to kernel level of [[SceAppMgr#sceAppMgrWorkDirMountById|sceAppMgrWorkDirMountById]]
* calls non exported function equal to kernel level of [[#sceAppMgrWorkDirMountById]]


<source lang="C">
<source lang="C">
struct sceAppMgrLoopBackMountOpt
typedef struct sceAppMgrLoopBackMountOpt {
{
   int reserved0;
   int reserved0;
   int reserved1;
   int reserved1;
};
} sceAppMgrLoopBackMountOpt;


int _sceAppMgrLoopBackMount(int mountId, char *titleId, char *mountPoint, sceAppMgrLoopBackMountOpt *opt);
// part_name: name of the emulated partition image
int _sceAppMgrLoopBackMount(int mountId, char *part_name, char *mountPoint, sceAppMgrLoopBackMountOpt *opt);
</source>
</source>


Line 3,269: Line 3,666:
};
};


int _sceAppMgrThemeDataMount(const char *titleid, const char *theme_path, const char *rif_file_path, sceAppMgrThemeDataMountOpt *opt);
int _sceAppMgrThemeDataMount(SceTitleId *titleid, const char *theme_path, const char *rif_file_path, sceAppMgrThemeDataMountOpt *opt);
</source>
</source>


Line 3,292: Line 3,689:
};
};


int _sceAppMgrTrophyMountById(int mountId, char *titleId, char *mountPoint, sceAppMgrTrophyMountByIdOpt *opt);
int _sceAppMgrTrophyMountById(int mountId, SceTitleId *titleId, char *mountPoint, sceAppMgrTrophyMountByIdOpt *opt);
</source>
</source>


Line 3,474: Line 3,871:
|}
|}


appid is [[SceAppMgr#AppId|AppId]]
<source lang="C">int sceAppMgrActivateApp(int appId);</source>
 
<source lang="C">
int sceAppMgrActivateApp(int appid);
</source>


=== sceAppMgrDeactivateApp ===
=== sceAppMgrDeactivateApp ===
Line 4,098: Line 4,491:
|}
|}


=== sceAppMgrAssignVoicePortByPid ===
=== _sceAppMgrAssignVoicePortByPid ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 4,106: Line 4,499:
|}
|}


=== sceAppMgrAssignVoicePortByAppId ===
=== _sceAppMgrAssignVoicePortByAppId ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 4,114: Line 4,507:
|}
|}


=== sceAppMgrGetRunStatus ===
=== _sceAppMgrGetRunStatus ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 4,122: Line 4,515:
|}
|}


=== sceAppMgrDump ===
<source lang="C">int _sceAppMgrGetRunStatus(void);</source>
 
=== _sceAppMgrDump ===
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 4,130: Line 4,525:
|}
|}


<source lang="C">int sceAppMgrDump(void);</source>
<source lang="C">int _sceAppMgrDump(void);</source>


== SceSharedFb ==
=== _sceAppMgrIsGameProgram ===
 
=== sceSharedFbOpen ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990 || 0xD2B27255
| 0.990 || 0x13C5CB3D
|}
|}


=== _sceSharedFbOpen ===
=== _sceAppMgrActivateApp ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 1.69-3.60 || 0xB358E1B6
| 0.990 || 0x86B07AD5
|}
|}


=== sceSharedFbBegin ===
<source lang="C">int _sceAppMgrActivateApp(SceUID appId);</source>
 
=== _sceAppMgrDestroyApp ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x72067C6B
| 0.990 || 0x14945ECE
|}
|}
 
=== sceSharedFbClose ===
Returns 0 on success.
 
<source lang="C">int _sceAppMgrDestroyApp(SceUID appId);</source>
 
=== _sceAppMgrInfoBarClose ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x33DA3428
| 0.990 || 0x1819E285
|}
|}


=== sceSharedFbCreate ===
<source lang="C">int _sceAppMgrInfoBarClose(void);</source>
 
== SceSharedFb ==
 
=== sceSharedFbOpen ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xD6C643B5
| 0.990 || 0xD2B27255
|}
|}


=== sceSharedFbDelete ===
=== _sceSharedFbOpen ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xBE5A1A81
| 1.69-3.60 || 0xB358E1B6
|}
|}


=== sceSharedFbEnd ===
<source lang="C">
 
a1 - set 1
 
SceUID _sceSharedFbOpen(int a1, int sysver);
 
</source>
 
=== sceSharedFbBegin ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xFC5A62B6
| 0.990-3.60 || 0x72067C6B
|}
|}


=== sceSharedFbGetInfo ===
note : If do not call sceSharedFbEnd after calling sceSharedFbBegin, you cannot return to the home
 
<source lang="C">
 
int sceSharedFbBegin(SceUID shared_fb_id, SceSharedFbInfo *info);
 
</source>
 
=== sceSharedFbClose ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x819954FB
| 0.990-3.60 || 0x33DA3428
|}
|}


=== sceSharedFbGetRenderingInfo ===
<source lang="C">
 
int sceSharedFbClose(SceUID shared_fb_id);
 
</source>
 
=== sceSharedFbCreate ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0x61FEEDFA
| 0.990-3.60 || 0xD6C643B5
|}
|}


=== sceSharedFbGetShellRenderPort ===
<source lang="C">
 
a1 - set 1
 
SceUID sceSharedFbCreate(int a1, SceSharedFbCreate *create_param);
 
</source>
 
=== sceSharedFbDelete ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xAC49FC1D
| 0.990-3.60 || 0xBE5A1A81
|}
|}


=== sceSharedFbUpdateProcessBegin ===
=== sceSharedFbEnd ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! NID
! Version !! NID
|-
|-
| 0.990-3.60 || 0xF9754AD9
| 0.990-3.60 || 0xFC5A62B6
|}
|}
 
 
=== sceSharedFbUpdateProcessEnd ===
<source lang="C">
{| class="wikitable"
 
|-
int sceSharedFbEnd(SceUID shared_fb_id);
! Version !! NID
 
|-
</source>
| 0.990-3.60 || 0x565A9AB6
 
|}
=== sceSharedFbGetInfo ===
 
{| class="wikitable"
=== sceSharedFbUpdateProcess ===
|-
{| class="wikitable"
! Version !! NID
|-
|-
! Version !! NID
| 0.990-3.60 || 0x819954FB
|-
|}
| 0.990-3.60 || 0x3889ACF8
 
|}
<source lang="C">
 
 
=== sceSharedFbSetShellRenderPort ===
int sceSharedFbGetInfo(SceUID shared_fb_id, SceSharedFbInfo *info);
{| class="wikitable"
 
|-
</source>
! Version !! NID
 
|-
=== sceSharedFbGetRenderingInfo ===
| 0.990-1.69 || 0x0B81B10F
{| class="wikitable"
|}
|-
 
! Version !! NID
=== sceSharedFbSetRenderingOrderForTest ===
|-
{| class="wikitable"
| 0.990-3.60 || 0x61FEEDFA
|-
|}
! Version !! NID
 
|-
=== sceSharedFbGetShellRenderPort ===
| 0.990-1.69 || 0x0D2B21AE
{| class="wikitable"
|}
|-
 
! Version !! NID
== SceSharedFbForDriver ==
|-
 
| 0.990-3.60 || 0xAC49FC1D
 
|}
 
<source lang="C">
 
int sceSharedFbGetShellRenderPort(void);
 
</source>
 
=== sceSharedFbUpdateProcessBegin ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0xF9754AD9
|}
 
<source lang="C">
 
a2 buf size is 0x40
a3 buf size is 4?
 
int sceSharedFbUpdateProcessBegin(SceUID shared_fb_id, void *a2, void *a3);
 
</source>
 
=== sceSharedFbUpdateProcessEnd ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x565A9AB6
|}
 
<source lang="C">
 
int sceSharedFbUpdateProcessEnd(SceUID shared_fb_id);
 
</source>
 
=== sceSharedFbUpdateProcess ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-3.60 || 0x3889ACF8
|}
 
<source lang="C">
 
int sceSharedFbUpdateProcess(void);
 
</source>
 
=== sceSharedFbSetShellRenderPort ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-1.69 || 0x0B81B10F
|}
 
=== sceSharedFbSetRenderingOrderForTest ===
{| class="wikitable"
|-
! Version !! NID
|-
| 0.990-1.69 || 0x0D2B21AE
|}
 
== SceSharedFbForDriver ==
 
[[Category:ARM]]
[[Category:Kernel]]
[[Category:Modules]]
[[Category:Modules]]
[[Category:Kernel]]
[[Category:Library]]

Latest revision as of 05:03, 6 December 2023

Module

Version World Privilege
1.69-3.60 Non-secure Kernel

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

sceAppMgrPhotoMount
	0x64

sceAppMgrAppDataMount
	0x64
	0x65
	0x66
	0x67
	0x69
	0x6C
	0x6D
	0x6F
	0x70

sceAppMgrAppDataMountById
	0x68
	0x6A
	0x6B
	0x6E

sceAppMgrAppMount
	direct scePfsMount

sceAppMgrPspSaveDataRootMount
	0xCA

sceAppMgrWorkDirMount
	0xC8
	0xC9
	0xCA
	0xCB
	0xCC
	0xCE

sceAppMgrWorkDirMountById
	0xCD
	0xCF

sceAppMgrTrophyMount
	0x12C
	0x12D
	0x12E

sceAppMgrTrophyMountById
	0x12F
	0x130

sceAppMgrMmsMount
	0x190
	0x191
	0x192

sceAppMgrInstallDirMount
	0x1F4
	0x1F5
	0x1F8
	0x1F9

sceAppMgrLoopBackMount
	0x258

sceAppMgrGameDataMount
	0x3E8
	0x3E9

sceAppMgrAddContAddMount
	0x3EA

sceAppMgrAddContMount
	0x3EA
	0x3EB

sceAppMgrSaveDataAddMount
	0x3EC

sceAppMgrSaveDataMount
	direct scePfsMount
id src pfs mount mode key type default mount point
0x64 - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x65 - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x66 - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x67 - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x68 - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x69 - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x6A - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x6B - 0x15 - ad%02x%02x%02x%02x%02x%02xd0:
0x6C - 0x15 - ad%02x%02x%02x%02x%02x%02xd0:
0x6D - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x6E - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x6F - 0x15 - ad%02x%02x%02x%02x%02x%02xd0:
0x70 - 0x15 - ad%02x%02x%02x%02x%02x%02xd0:
0xC8 - 0x15 - td%02x%02x%02x%02x%02x%02xd0:
0xC9 - 0x15 - td%02x%02x%02x%02x%02x%02xd0:
0xCA - 0x15 - sceSblACMgrIsNotSandboxed(0) != 0 ? ms0: : ms%s%02x%02x%02x%02x%02x%02xd0:
0xCB - 0x15 - td%02x%02x%02x%02x%02x%02xd0:
0xCC - 0x15 - td%02x%02x%02x%02x%02x%02xd0:
0xCD - 0x15 - cache0:
0xCE - 0x15 - td%02x%02x%02x%02x%02x%02xd0:
0xCF - 0x15 - td%02x%02x%02x%02x%02x%02xd0:
0x12D - 6 Sealedkey trophy_dst0:
0x12E - 6 Sealedkey trophy_sys0:
0x12F - 6 Sealedkey trophy_dat0:
0x130 - 6 Sealedkey trophy_dbk0:
0x190 - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x191 - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x192 - 0x16 - ad%02x%02x%02x%02x%02x%02xd0:
0x1F4 - 4 Sealedkey ad%02x%02x%02x%02x%02x%02xd0:
0x1F5 - 4 Sealedkey ad%02x%02x%02x%02x%02x%02xd0:
0x1F8 - 6 Sealedkey sdimport0:
0x1F9 - 6 Sealedkey sdimport_tmp0:
0x258 - 6 Sealedkey lm%02x%02x%02x%02x%02x%02xd0:
0x3E8 - 2 (0x14 for external path) klicensee (none for external path) app0:
0x3E9 - 2 (0x14 for external path) klicensee (none for external path) app0:
0x3EA - 4 (0xC for gro0:) Sealedkey addcont0:
0x3EB - 4 (0xC for gro0:) Sealedkey addcont0:
0x3EC - 5 Sealedkey savedata0:
0x3ED - 0x15 - savedata0:
0x3EE - 0x14 - sd%02x%02x%02x%02x%02x%02xd0:
0x3EF - 0x14 - sd%02x%02x%02x%02x%02x%02xd0:
0x3F0 - 0x15 - ud%02x%02x%02x%02x%02x%02xd0:
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 ? savedata0: of ux0: or grw0: automounted by SceAppMgr (writable mount with pfs mount)
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 ? savedata0: of not ux0: and grw0: automounted by SceAppMgr (writable mount without pfs mount)
0x3EE ur0:user/XX/savedata/<TITLEID> savedata0:
?savedata1:?
sceAppMgrSaveDataAddMount
or sceAppUtilSaveDataMount
0x3EF vs0:sys/external sdXXXXXXXXXXXX: automounted
0x3F0 vs0:data/external sdXXXXXXXXXXXX: automounted

Types

// invalid category (not gd) or invalid TITLE ID (e.g. "VITASHELL")
#define SCE_APPMGR_ERROR_INVALID_PARAM_SFO (0x80800015)

typedef char[0x10] SceTitleId;

typedef struct SceAppMgrLaunchParam { // size is 0x34
    SceSize size;    // Size of this structure
    SceUInt32 attr; // set to 0x80000000 to break on launch
    SceUInt32 initPriority;
    SceUInt32 unk_C;
    SceUInt32 unk_10;
    SceUInt32 unk_14;
    SceUInt32 budgetId;
    SceUInt32 unk_1C;
    SceUInt32 unk_20;
    SceUInt32 unk_24;
    SceUInt32 unk_28;
    SceUInt32 unk_2C;
    SceUInt32 unk_30;
} SceAppMgrLaunchParam;

// Linked list of these items is controlled by common function that is responsible for PFS mounting.
// This function (on FW 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
int sceAppMgrCheckContentInstallPeriodForDriver(int a1);

sceAppMgrCheckPfsMountedForDriver

Version NID
3.60 0x0B1BEEE0
int sceAppMgrCheckPfsMountedForDriver(int *result);

sceAppMgrCloudDataClearMcIdForDriver

Version NID
3.60 0xEC408FEF
int sceAppMgrCloudDataClearMcIdForDriver(int a1);

sceAppMgrCloudDataCreateHeaderForDriver

Version NID
0.931.010-1.81 not present
2.000.081-3.740.011 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
int sceAppMgrDebugSettingNotifyUpdateForDriver(int a1);

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
int sceAppMgrGameDataMountForDriver(const char *app_path, const char *patch_path, const char *rif_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
// titleId: 10 bytes null-terminated string
int sceAppMgrIsExclusiveProcessRunningForDriver(const char* titleId);

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, maybe BGM port

Maybe type is of type SceKernelProcessType like in SceProcessmgr#sceKernelStartProcessForKernel.

/**
 * @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 *pParam, 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

sceAppMgrGetShellPidForDriverForDriver

Version NID
0.990-3.60 0x2FEACA9F

sceAppMgrSpawnProcessForDriver

Version NID
0.990-3.60 0x324DD34E

This is a guessed name.

SceUID sceAppMgrSpawnProcessForDriver(const char *name, SceKernelProcessType type, const char *path, SceSize argSize, const void *pArgBlock, void *pOpt);

sceAppMgrKillAppByNameForDebuggerForDriver

Version NID
3.60-3.65 0x0C5D65F1

sceAppMgrRdrfpMountForDriver

Version NID
3.60 0x1574E1A4
int sceAppMgrRdrfpMountForDriver(SceUInt32 id, const char *path, const void *passcode, char *mountpoint);

sceAppMgrLaunchAppByNameForDebuggerForDriver

Version NID
3.60 0x1B6C2FED

sceAppMgrGetPidByNameForDebuggerForDriver

Version NID
3.60 0x21BE167A

sceAppMgrSuspendAppForDebuggerForDriver

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

sceAppMgrSaveDataDataSaveForDriver

Version NID
3.60 0x30947DF4

sceAppMgrLiveAreaOperationByNameForLoadpForDriver_1

Version NID
3.60 0x3B4F305B

sceAppMgrLiveAreaOperationByNameForLoadpForDriver_2

Version NID
3.60 0xDD5BEEE3

sceAppMgrGetAppIdByNameForDebuggerForDriver

Version NID
3.60 0x4FA62A46

sceAppMgrLaunchAppForTest2ForDriver

Version NID
3.60 0x504023C8

Used by SceDeci4pLoadp.

Requires sceSblACMgrHasUserDebugFlagForDriver to return true.

sceAppMgrLaunchAppByNameInternalForDriver

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);

sceAppMgrKillAppForDebuggerForDriver

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 sceAppMgrKillAppForDebuggerForDriver(SceUID id);

SceAppMgrForDriver_DC13160A

Version NID
3.60 0xDC13160A

Gets App Status by App Id.

int SceAppMgrForDriver_DC13160A(SceInt32 appId, void* pAppStatus);

sceAppMgrRdrfpUmountForDriver

Version NID
3.60 0xE8DB7942

sceAppMgrSaveDataDataRemoveForDriver

Version NID
3.60 0xEBFE1BE2

sceAppMgrResumeAppByNameForDebuggerForDriver

Version NID
3.60 0xEE6047CA

sceAppMgrSuspendAppByNameForDebuggerForDriver

Version NID
3.60 0xF3B1D42E

sceAppMgrResumeAppForDebuggerForDriver

Version NID
0.990-3.60 0xF9A61E94
int sceAppMgrResumeAppForDebuggerForDriver(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.

// name: 32 bytes null-terminated string, maybe process name
// unused: 8 bytes buffer, unused on FW 3.60
int _sceAppMgrDeclareShellProcess2(const char* name, void* unused);

_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

// id: seen 600
int _sceAppMgrForceUmount(int id);

_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

_sceAppMgrGetAppInfo

Version NID
1.69-3.60 0x6E65D746

exported to user by SceDriverUser

int _sceAppMgrGetAppInfo(SceAppMgrAppInfo *pAppInfo, SceUInt32 infoSize, 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 true path (uses ::sceFiosKernelOverlayResolveSyncForDriver 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 SceSblPostSsMgr#SceSblPostSsMgrForDriver (related to utoken_sm.self)
  • 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

typedef struct SceAppMgrLaunchAppByUri2Param { // Size is 0x40 on FW 3.60
   SceSize size; // Size of this structure
   SceUInt32 unk_4; // ex: 0
   SceUInt32 unk_8; // ex: -1
   SceUInt32 unk_C;
   SceUInt32 unk_10;
   SceUInt32 unk_14; // ex: -1
   SceUInt8 reserved[0x28];
} SceAppMgrLaunchAppByUri2Param;

int _sceAppMgrLaunchAppByUri2(const char *uri, SceAppMgrLaunchAppByUri2Param *pParam);

_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 usermode. 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

typedef struct sceAppMgrLoopBackMountOpt {
  int reserved0;
  int reserved1;
} sceAppMgrLoopBackMountOpt;

// part_name: name of the emulated partition image
int _sceAppMgrLoopBackMount(int mountId, char *part_name, 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);

_sceAppMgrIsGameProgram

Version NID
0.990 0x13C5CB3D

_sceAppMgrActivateApp

Version NID
0.990 0x86B07AD5
int _sceAppMgrActivateApp(SceUID appId);

_sceAppMgrDestroyApp

Version NID
0.990 0x14945ECE

Returns 0 on success.

int _sceAppMgrDestroyApp(SceUID appId);

_sceAppMgrInfoBarClose

Version NID
0.990 0x1819E285
int _sceAppMgrInfoBarClose(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