From d06ac398f7dcb06aeb902341d752689e1bacc75d Mon Sep 17 00:00:00 2001 From: Pavel <68122101+red-prig@users.noreply.github.com> Date: Thu, 29 Dec 2022 17:20:46 +0300 Subject: [PATCH] sceSysmoduleLoadModuleInternal --- kernel/libsysmodule.inc | 72 +++++++++++++++++++++++++++++++++++++++- kernel/ps4_libkernel.pas | 28 ++++++++++++---- 2 files changed, 92 insertions(+), 8 deletions(-) diff --git a/kernel/libsysmodule.inc b/kernel/libsysmodule.inc index a8303c52..e2430752 100644 --- a/kernel/libsysmodule.inc +++ b/kernel/libsysmodule.inc @@ -142,6 +142,38 @@ const SCE_SYSMODULE_CES_CS =$010c; SCE_SYSMODULE_PLAYER_INVITATION_DIALOG =$010d; + // Internal + SCE_SYSMODULE_INTERNAL_AUDIOOUT =$80000001; //libSceAudioOut + SCE_SYSMODULE_INTERNAL_AUDIOIN =$80000002; //libSceAudioIn + SCE_SYSMODULE_INTERNAL_AV_CAPTURE =$80000003; //libSceAvcap + SCE_SYSMODULE_INTERNAL_SYSCORE =$80000004; //libSceSysCore + SCE_SYSMODULE_INTERNAL_CDLG_UTILITY_SERVER=$80000007; //libSceCdlgUtilServer + SCE_SYSMODULE_INTERNAL_KEYBOARD =$80000008; //libSceKeyboard + SCE_SYSMODULE_INTERNAL_NETCTL =$80000009; //libSceNetCtl + SCE_SYSMODULE_INTERNAL_HTTP =$8000000A; //libSceHttp + SCE_SYSMODULE_INTERNAL_SSL =$8000000B; //libSceSsl + SCE_SYSMODULE_INTERNAL_NP_COMMON =$8000000C; //libSceNpCommon + SCE_SYSMODULE_INTERNAL_NP_MANAGER =$8000000D; //libSceNpManager + SCE_SYSMODULE_INTERNAL_NP_WEB_API =$8000000E; //libSceNpWebApi + SCE_SYSMODULE_INTERNAL_SAVE_DATA =$8000000F; //libSceSaveData + SCE_SYSMODULE_INTERNAL_SYSTEM_SERVICE =$80000010; //libSceSystemService + SCE_SYSMODULE_INTERNAL_USER_SERVICE =$80000011; //libSceUserService + SCE_SYSMODULE_INTERNAL_VISION_MANAGER =$80000012; //libSceVisionManager + SCE_SYSMODULE_INTERNAL_AC3_ENC =$80000013; //libSceAc3Enc + SCE_SYSMODULE_INTERNAL_APP_INST_UTIL =$80000014; //libSceAppInstUtil + SCE_SYSMODULE_INTERNAL_VDECCORE =$80000015; //libSceVdecCore + SCE_SYSMODULE_INTERNAL_VENCCORE =$80000016; //libSceVencCore + SCE_SYSMODULE_INTERNAL_HID_CONTROL =$80000017; //libSceHidControl + SCE_SYSMODULE_INTERNAL_COMMON_DIALOG =$80000018; //libSceCommonDialog + SCE_SYSMODULE_INTERNAL_PERF =$80000019; //libScePerf + SCE_SYSMODULE_INTERNAL_CAMERA =$8000001A; //libSceCamera + SCE_SYSMODULE_INTERNAL_NET =$8000001C; //libSceNet + SCE_SYSMODULE_INTERNAL_IPMI =$8000001D; //libSceIpmi + SCE_SYSMODULE_INTERNAL_VIDEO_OUT =$80000022; //libSceVideoOut + SCE_SYSMODULE_INTERNAL_BGFT =$8000002A; //libSceBgft + SCE_SYSMODULE_INTERNAL_PRECOMPILED_SHADERS=$80000064; //libScePrecompiledShaders + SCE_SYSMODULE_INTERNAL_PAD =$80000024; //libScePad + SCE_SYSMODULE_ERROR_INVALID_VALUE=-2141581312; // 0x805A1000 SCE_SYSMODULE_ERROR_UNLOADED =-2141581311; // 0x805A1001 SCE_SYSMODULE_ERROR_FATAL =-2141581057; // 0x805A10FF @@ -284,8 +316,46 @@ begin SCE_SYSMODULE_CES_CS :Result:='SCE_SYSMODULE_CES_CS'; SCE_SYSMODULE_PLAYER_INVITATION_DIALOG :Result:='SCE_SYSMODULE_PLAYER_INVITATION_DIALOG'; else - Result:=HexStr(id,4); + Result:='0x'+HexStr(id,4); end; end; +function GetSysmoduleInternalName(id:DWord):RawByteString; +begin + Case id of + SCE_SYSMODULE_INTERNAL_AUDIOOUT :Result:='SCE_SYSMODULE_INTERNAL_AUDIOOUT'; + SCE_SYSMODULE_INTERNAL_AUDIOIN :Result:='SCE_SYSMODULE_INTERNAL_AUDIOIN'; + SCE_SYSMODULE_INTERNAL_AV_CAPTURE :Result:='SCE_SYSMODULE_INTERNAL_AV_CAPTURE'; + SCE_SYSMODULE_INTERNAL_SYSCORE :Result:='SCE_SYSMODULE_INTERNAL_SYSCORE'; + SCE_SYSMODULE_INTERNAL_CDLG_UTILITY_SERVER:Result:='SCE_SYSMODULE_INTERNAL_CDLG_UTILITY_SERVER'; + SCE_SYSMODULE_INTERNAL_KEYBOARD :Result:='SCE_SYSMODULE_INTERNAL_KEYBOARD'; + SCE_SYSMODULE_INTERNAL_NETCTL :Result:='SCE_SYSMODULE_INTERNAL_NETCTL'; + SCE_SYSMODULE_INTERNAL_HTTP :Result:='SCE_SYSMODULE_INTERNAL_HTTP'; + SCE_SYSMODULE_INTERNAL_SSL :Result:='SCE_SYSMODULE_INTERNAL_SSL'; + SCE_SYSMODULE_INTERNAL_NP_COMMON :Result:='SCE_SYSMODULE_INTERNAL_NP_COMMON'; + SCE_SYSMODULE_INTERNAL_NP_MANAGER :Result:='SCE_SYSMODULE_INTERNAL_NP_MANAGER'; + SCE_SYSMODULE_INTERNAL_NP_WEB_API :Result:='SCE_SYSMODULE_INTERNAL_NP_WEB_API'; + SCE_SYSMODULE_INTERNAL_SAVE_DATA :Result:='SCE_SYSMODULE_INTERNAL_SAVE_DATA'; + SCE_SYSMODULE_INTERNAL_SYSTEM_SERVICE :Result:='SCE_SYSMODULE_INTERNAL_SYSTEM_SERVICE'; + SCE_SYSMODULE_INTERNAL_USER_SERVICE :Result:='SCE_SYSMODULE_INTERNAL_USER_SERVICE'; + SCE_SYSMODULE_INTERNAL_VISION_MANAGER :Result:='SCE_SYSMODULE_INTERNAL_VISION_MANAGER'; + SCE_SYSMODULE_INTERNAL_AC3_ENC :Result:='SCE_SYSMODULE_INTERNAL_AC3_ENC'; + SCE_SYSMODULE_INTERNAL_APP_INST_UTIL :Result:='SCE_SYSMODULE_INTERNAL_APP_INST_UTIL'; + SCE_SYSMODULE_INTERNAL_VDECCORE :Result:='SCE_SYSMODULE_INTERNAL_VDECCORE'; + SCE_SYSMODULE_INTERNAL_VENCCORE :Result:='SCE_SYSMODULE_INTERNAL_VENCCORE'; + SCE_SYSMODULE_INTERNAL_HID_CONTROL :Result:='SCE_SYSMODULE_INTERNAL_HID_CONTROL'; + SCE_SYSMODULE_INTERNAL_COMMON_DIALOG :Result:='SCE_SYSMODULE_INTERNAL_COMMON_DIALOG'; + SCE_SYSMODULE_INTERNAL_PERF :Result:='SCE_SYSMODULE_INTERNAL_PERF'; + SCE_SYSMODULE_INTERNAL_CAMERA :Result:='SCE_SYSMODULE_INTERNAL_CAMERA'; + SCE_SYSMODULE_INTERNAL_NET :Result:='SCE_SYSMODULE_INTERNAL_NET'; + SCE_SYSMODULE_INTERNAL_IPMI :Result:='SCE_SYSMODULE_INTERNAL_IPMI'; + SCE_SYSMODULE_INTERNAL_VIDEO_OUT :Result:='SCE_SYSMODULE_INTERNAL_VIDEO_OUT'; + SCE_SYSMODULE_INTERNAL_BGFT :Result:='SCE_SYSMODULE_INTERNAL_BGFT'; + SCE_SYSMODULE_INTERNAL_PRECOMPILED_SHADERS:Result:='SCE_SYSMODULE_INTERNAL_PRECOMPILED_SHADERS'; + SCE_SYSMODULE_INTERNAL_PAD :Result:='SCE_SYSMODULE_INTERNAL_PAD'; + else + Result:='0x'+HexStr(id,8); +end; + +end; diff --git a/kernel/ps4_libkernel.pas b/kernel/ps4_libkernel.pas index 679d764b..476acd80 100644 --- a/kernel/ps4_libkernel.pas +++ b/kernel/ps4_libkernel.pas @@ -442,11 +442,14 @@ const type PSCE_APP_ENV=^TSCE_APP_ENV; TSCE_APP_ENV=packed record - unk1:array[0..15] of Byte; //16 - ustr:array[0.. 9] of char; //10 - unk2:array[0..37] of Byte; //38 - flags:Byte; //1 eLoadOptions - unk3:array[0.. 6] of Byte; //7 + AppId:Integer; //4 + unk1:Integer; //4 + unk2:Integer; //4 + AppType:Integer; //4 + TitleId:array[0.. 9] of char; //10 + unk3:array[0..37] of Byte; //38 + flags:Byte; //1 eLoadOptions + unk4:array[0.. 6] of Byte; //7 end; //sysctl to KERN_PROC_ENV @@ -460,6 +463,7 @@ begin end; env^:=Default(TSCE_APP_ENV); + env^.AppId:=pid; _set_errno(0); Result:=0; @@ -880,10 +884,19 @@ function ps4_sceSysmoduleIsLoadedInternal(id:DWord):Integer; SysV_ABI_CDecl; begin if ((id or $80000000)=$80000000) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); - Writeln('sceSysmoduleIsLoadedInternal:',GetSysmoduleName(id)); + Writeln('sceSysmoduleIsLoadedInternal:',GetSysmoduleInternalName(id)); Result:=0; //0 -> loaded ; SCE_SYSMODULE_ERROR_UNLOADED -> not loaded end; +function ps4_sceSysmoduleLoadModuleInternal(id:DWord):Integer; SysV_ABI_CDecl; +begin + if ((id or $80000000)=$80000000) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); + if ((Word(id)=$80) and (SDK_VERSION>=$3000000)) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); + + Writeln('sceSysmoduleLoadModuleInternal:',GetSysmoduleInternalName(id)); + Result:=0; +end; + function ps4_sceSysmoduleLoadModuleInternalWithArg(id:Word; argc:size_t; argp:PPointer; @@ -893,7 +906,7 @@ begin if ((id or $80000000)=$80000000) or (flags<>0) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); if ((Word(id)=$80) and (SDK_VERSION>=$3000000)) then Exit(SCE_SYSMODULE_ERROR_INVALID_VALUE); - Writeln('sceSysmoduleLoadModuleInternalWithArg:',GetSysmoduleName(id)); + Writeln('sceSysmoduleLoadModuleInternalWithArg:',GetSysmoduleInternalName(id)); if (pRes<>nil) then pRes^:=0; Result:=0; end; @@ -915,6 +928,7 @@ begin lib^.set_proc($7CC3F934750E68C9,@ps4_sceSysmoduleIsLoaded); lib^.set_proc($CA714A4396DF1A4B,@ps4_sceSysmoduleIsLoadedInternal); + lib^.set_proc($DFD895E44D47A029,@ps4_sceSysmoduleLoadModuleInternal); lib^.set_proc($847AC6A06A0D7FEB,@ps4_sceSysmoduleLoadModuleInternalWithArg); lib^.set_proc($E1F539CAF3A4546E,@ps4_sceSysmoduleGetModuleInfoForUnwind);