mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-30 12:25:49 +00:00
docs(libSceNpEntitlementAccess): note how two titles call sceNpEntitlementAccessGetEntitlementKey
4.0 KiB
4.0 KiB
libSceNpEntitlementAccess technical debt
Silent stubs
- sceNpEntitlementAccessInitialize (libSceNpEntitlementAccess) - returns 0 without reading the init parameter or writing the boot parameter, so the boot parameter keeps what the caller put there. Both are 32 reserved bytes here, and PPSA01494 (at both of its calls), PPSA02225, PPSA03984, PPSA30839, PPSA31162 and PPSA34502 zero exactly 32 bytes of each right before the call. PPSA03984 and PPSA31162 test the result for a negative value. What the console writes into the boot parameter is unknown
Unknown function info
- sceNpEntitlementAccessGetAddcontEntitlementInfoIndividual, sceNpEntitlementAccessPollConsumableEntitlementInfo, sceNpEntitlementAccessRequestConsumableEntitlementInfo, sceNpEntitlementAccessRequestConsumeEntitlement (libSceNpEntitlementAccess) - their names and NIDs are in the PS5 3.20 export inventory, but no credible prototypes were found. They are declared without parameters solely to resolve known imports; this is not an ABI claim
- sceNpEntitlementAccessGetEntitlementKey - the three-argument signature, 16-byte key and errors
0x817D0002/0x817D0007follow KytyPS5; PPSA01521 passes a service label, entitlement label and output pointer. Only the no-key path is implemented: local entitlement labels carry no keys, and the output is untouched on failure. Console error precedence and key provisioning are unverified. PPSA03984 01.020.000 (at 0x5949837) and PPSA30839 01.003.000 (0x4505EC5), disassembled for this entry, pass service label 0, a pointer into an array of their own with 28-byte elements and a stack output, one call per element in a loop; after a failure (a negative result in PPSA03984, any nonzero one in PPSA30839) they go on with the next element, and on success PPSA03984 reads 16 bytes of the output - Entitlement requests and polls: native argument lists are restored for single-item, list and consume operations, plus abort/delete. Request IDs are 64-bit, labels occupy 20 bytes and transaction IDs occupy 72 bytes. List options occupy 32 bytes and results have a 64-byte stride; their field semantics and three list-result scalars remain unresolved. The existing signed-out responses do not reproduce native initialization, validation or asynchronous request handling; abort and delete go through
NotImplemented_nid_no_patchuntil request tracking is implemented, as the library keeps no request table.
Functional
- sceNpEntitlementAccessGetGameTrialsFlag, sceNpEntitlementAccessGetPftFlag (libSceNpEntitlementAccess) - reports a full game, not a game trial or Play First Trial: writes 0 to the
uint32_toutput and returns 0, and a null pointer returns0x817D0002. The single-pointer signature, the value, the one-word write and the error ofsceNpEntitlementAccessGetGameTrialsFlagfollow sharpemu, which has nosceNpEntitlementAccessGetPftFlag; those ofsceNpEntitlementAccessGetPftFlagfollow dlc_emu, which takes the sameSceNpEntitlementAccessGameTrialsFlag*as the trials flag, writes the OFF value 0 and returns the parameter error for null;0x817D0002is the parameter error of KytyPS5, prosper andsceNpEntitlementAccessGetEntitlementKey, whilesceNpEntitlementAccessGetSkuFlaghere returns0x80558003. None of this is a console measurement, and PRAGMATA (PPSA02530) shows four live registers at the call, so further arguments are not ruled out