Files
AnyPS5/docs/dev/debt/libSceUserService.md
T
KernelPanicNTandClaude Opus 5.5 1fbbad7c55 fix(libSceUserService): check the thread priority on initialization
sceUserServiceInitialize reads the thread priority from the first int
of its parameters, and sceUserServiceInitialize2 takes it as its
argument. A PS5 returns 0x80960005 for a priority outside 0x100 to
0x2FF, and 0x80960003 when Initialize2 is called on an initialized
service, where this returned success.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:37:19 +00:00

2.9 KiB

libSceUserService technical debt

Unknown function info

  • sceUserServiceGetNpAccountId (libSceUserService) - the account id for a user with no linked PSN account is assumed to be 0 with success; libSceNpManager's sceNpGetAccountIdA answers the same question with SCE_NP_ERROR_SIGNED_OUT
  • sceUserServiceInitialize, sceUserServiceTerminate (libSceUserService) - not measured: whether an invalid thread priority leaves an uninitialized service uninitialized (it does here), the parameters after their first int, and any second argument of sceUserServiceInitialize2. Measured on a PS5: before initialization and after sceUserServiceTerminate, GetLoginUserIdList, GetEvent and Terminate return 0x80960002; a second initialization returns 0x80960003 and a new one reports the initial user's login again; a priority outside 0x100 to 0x2FF, from the first int of the parameters or the sceUserServiceInitialize2 argument, returns 0x80960005 before the initialized check. The other calls do not check initialization
  • sceUserServiceGetUserColor (libSceUserService) - the default profile colour is assumed to be blue (0)
  • sceUserServiceGetUserName (libSceUserService) - 0x80960105, which a PS5 (firmware 13.60) returns for a user id it does not know, has no known name; it is USER_SERVICE_ERROR_UNKNOWN_USER here. On the console a registered user who is not logged in still gets their name; here only the initial user exists
  • sceUserServiceGetAgeLevel (libSceUserService) - on a PS5 (firmware 13.60) the value is the age set in the user's parental restriction (0, 7, 12 and 15 were measured) and 0xFFFFFFFF without one; a user who is not logged in returns 0x80960009 with or without an output. Parental restrictions are not modelled, so the initial user is always reported as unrestricted. PPSA12544 (Unity) only stores the value for its user profile
  • sceUserServiceGetAccessibilityChatTranscription, PressAndHoldDelay, TriggerEffect, Vibration, ZoomEnabled, ZoomFollowFocus (libSceUserService) - report 0, 0, 1, 1, 0 and 1, what a PS5 (firmware 13.60) reports for a user whose accessibility settings are all at their defaults; the console reports the user's own settings (a changed vibration intensity read 3), which are not modelled. What each number means is unknown. A user who is not logged in returns 0x80960009 with or without an output
  • sceUserServiceGetAccessibilityKeyremapEnable, sceUserServiceGetAccessibilityZoom (libSceUserService) - declared without parameters as throwing stubs calling NotImplemented_nid_no_patch. Their signatures and values remain unverified on hardware