feat(libSceSysmodule): register libSceProprietaryVoiceChatHelperPrx module id 0x132

This commit is contained in:
pushkarreddyy authored and Adrià Franch committed 2026-10-19 01:22:53 +02:00
1 parent 64b57d1b02
commit 16df3d1536
3 files changed
+13

No files matched your search

@@ -160,6 +160,7 @@ inline const std::unordered_map<std::uint32_t, const char*> kModuleTable = {
{0x0000011a, "libSceNpPartner001"},
{0x00000120, "libSceAudioPropagation"},
{0x0000012f, "libSceFontGs"},
{0x00000132, "libSceProprietaryVoiceChatHelperPrx"},
{0x00000135, "libSceFontGsm"},
{0x00000137, "libScePsml"},
{0x00000138, "libSceNpPartnerSubscription"},
+8
View File
@@ -52,6 +52,7 @@ constexpr std::uint32_t kInternalFlag = 0x80000000u;
constexpr std::uint16_t kAcmModuleId = 0x010b;
constexpr std::uint16_t kTrophy2ModuleId = 0x0110;
constexpr std::uint16_t kVoiceChatModuleId = 0x0114;
constexpr std::uint16_t kProprietaryVoiceChatHelperModuleId = 0x0132;
constexpr std::uint16_t kPsmlModuleId = 0x0137;
constexpr std::uint32_t kAgcModuleId = 0x80000094;
@@ -264,6 +265,13 @@ int main() {
Require(sceSysmoduleUnloadModule(kPsmlModuleId) == 0);
Require(sceSysmoduleIsLoaded(kPsmlModuleId) == kModuleUnloaded);
Require(sceSysmoduleIsLoaded(kProprietaryVoiceChatHelperModuleId) == kModuleUnloaded);
Require(sceSysmoduleUnloadModule(kProprietaryVoiceChatHelperModuleId) == kModuleUnloaded);
Require(sceSysmoduleLoadModule(kProprietaryVoiceChatHelperModuleId) == 0);
Require(sceSysmoduleIsLoaded(kProprietaryVoiceChatHelperModuleId) == 0);
Require(sceSysmoduleUnloadModule(kProprietaryVoiceChatHelperModuleId) == 0);
Require(sceSysmoduleIsLoaded(kProprietaryVoiceChatHelperModuleId) == kModuleUnloaded);
Require(sceSysmoduleUnloadModuleInternal(kAgcModuleId) == kModuleUnloaded);
Require(sceSysmoduleLoadModuleInternal(kAgcModuleId) == 0);
Require(sceSysmoduleLoadModuleInternal(kAgcModuleId) == 0);
+4
View File
@@ -4,6 +4,10 @@
- [sceSysmoduleIsLoaded, sceSysmoduleLoadModule, sceSysmoduleUnloadModule](../../../core/libs/prx/libSceSysmodule/Export.cpp) (libSceSysmodule) accept a module id missing from the module table: they log it and return 0 without loading anything, so `sceSysmoduleIsLoaded` reports an unknown module as loaded and unloading it succeeds, because titles that load or unload such an id aborted otherwise. The internal variants (`sceSysmoduleLoadModuleInternal`, `sceSysmoduleUnloadModuleInternal`, `sceSysmoduleLoadModuleInternalWithArg`, `sceSysmoduleGetModuleHandleInternal`) throw for an unknown id. What the console returns for an id it does not know is not verified.
### Known modules
- [kModuleTable](../../../core/libs/prx/libSceSysmodule/ModuleTable.hpp) (libSceSysmodule) - module ID 0x00000132 maps to `libSceProprietaryVoiceChatHelperPrx` as verified in [#5017](https://github.com/boykopovar/AnyPS5/pull/5017) and reported in Discussion [#6344](https://github.com/boykopovar/AnyPS5/discussions/6344) for EA SPORTS FC 27 (PPSA34015).
### Functional
- [sceSysmoduleGetModuleInfoForUnwind](../../../core/libs/prx/libSceSysmodule/Export.cpp) (libSceSysmodule) - on Windows the region and file name of an address inside a loaded image are cached after the first lookup, because `VirtualQuery` on a large image section is slow. An entry is used only while the loader still reports the same image for the address (same base, time stamp and size). A page protection change inside the image after the first lookup, which would split or merge the region `VirtualQuery` reports, is not noticed. Addresses outside loaded images are queried every time