Files
AnyPS5/docs/dev/debt/libSceNpEntitlementAccess.md
KernelPanicNT b08d773dd0 feat(libSceNpEntitlementAccess): implement sceNpEntitlementAccessGetAddcontEntitlementInfoIndividual
Take the user ID, service label, entitlement label and info of the
runtime declaration in dlc_emu. A user ID of -1 returns the parameter
error before any other check; any other ID returns what
sceNpEntitlementAccessGetAddcontEntitlementInfo returns for the label,
including the not-found error for a label the entitlements file does
not list. Record the unverified prototype, the error order and the
label checks dlc_emu makes that this export does not in the debt.
2026-10-30 15:35:01 +00:00

5.5 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

  • sceNpEntitlementAccessAbortRequest, sceNpEntitlementAccessDeleteRequest - no request exists while signed out, so there is nothing to abort or delete; both ignore the request ID and return 0, following sharpemu (Gen4|Gen5, asserted by its lifecycle test) and the RAGE title that treats a negative cleanup result as log-only. Aborting or deleting an ID a signed-in console's table would still hold is unmeasured

Unknown function info

  • sceNpEntitlementAccessGetAddcontEntitlementInfoIndividual - the prototype is not from the SDK and no title call site was read: the user ID, service label, entitlement label and info follow the runtime declaration of dlc_emu, a replacement module. The user ID is not checked against the signed-in users: only -1 returns the parameter error 0x80558003, before the null checks, as in dlc_emu; any other ID gets the result of sceNpEntitlementAccessGetAddcontEntitlementInfo, which ignores the service label and the initialization state and returns 0x80558007 for an unlisted label where dlc_emu returns its no-entitlement error. dlc_emu also returns the parameter error for an empty or unterminated label or nonzero padding; here the first two give 0x80558007 and padding is ignored. None of this is measured
  • sceNpEntitlementAccessPollConsumableEntitlementInfo, sceNpEntitlementAccessRequestConsumableEntitlementInfo, sceNpEntitlementAccessRequestConsumeEntitlement (libSceNpEntitlementAccess) - their names and NIDs come from the export inventory cited by the entry on main, 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/0x817D0007 follow 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; no request can be created while signed out, so 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_t output and returns 0, and a null pointer returns 0x817D0002. The single-pointer signature, the value, the one-word write and the error of sceNpEntitlementAccessGetGameTrialsFlag follow sharpemu, which has no sceNpEntitlementAccessGetPftFlag; those of sceNpEntitlementAccessGetPftFlag follow dlc_emu, which takes the same SceNpEntitlementAccessGameTrialsFlag* as the trials flag, writes the OFF value 0 and returns the parameter error for null; 0x817D0002 is the parameter error of KytyPS5, prosper and sceNpEntitlementAccessGetEntitlementKey, while sceNpEntitlementAccessGetSkuFlag here returns 0x80558003. None of this is a console measurement, and PRAGMATA (PPSA02530) shows four live registers at the call, so further arguments are not ruled out