Shared Database services: Difference between revisions
No edit summary |
No edit summary |
||
(18 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
= pl:s = | = pl:s = | ||
This is "nn::pl::detail::IPlatformServiceManagerForSystem". | This is "nn::pl::detail::IPlatformServiceManagerForSystem". With [16.0.0+] "pl:u" was moved from here to [[Glue_services|glue]]. | ||
"pl:s" has max_sessions 2 (5 with [16.0.0+]). | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 33: | Line 35: | ||
|- | |- | ||
| 106 || [11.0.0+] GetFunctionBlackListVersion | | 106 || [11.0.0+] GetFunctionBlackListVersion | ||
|- | |||
| 107 || [17.0.0+] RequestApplicationFunctionAuthorizationByApplicationIdAndProgramId | |||
|- | |||
| 108 || [20.0.0+] GetRequiredApplicationVersion | |||
|- | |- | ||
| 1000 || [9.0.0+] LoadNgWordDataForPlatformRegionChina | | 1000 || [9.0.0+] LoadNgWordDataForPlatformRegionChina | ||
Line 97: | Line 103: | ||
= mii:u, mii:e = | = mii:u, mii:e = | ||
This is "nn::mii::detail::IStaticService". | This is "nn::mii::detail::IStaticService". | ||
These were moved from [[NS_services|ns]] with [3.0.0+]. | |||
These are only available when the output from [[Process_Manager_services|pm:bm]] GetBootMode is not Maintenance. | These are only available when the output from [[Process_Manager_services|pm:bm]] GetBootMode is not Maintenance. | ||
Line 167: | Line 175: | ||
|- | |- | ||
| 26 || [10.2.0+] Append | | 26 || [10.2.0+] Append | ||
|- | |||
| 27 || [19.0.0-19.0.1] ImportMigrationData | |||
|} | |} | ||
Line 197: | Line 207: | ||
|- | |- | ||
| 17 || DeleteImages | | 17 || DeleteImages | ||
|- | |||
| 18 || [19.0.0+] AddImageForMigration | |||
|- | |||
| 19 || [20.0.0+] ClearHeaderForMigration | |||
|- | |||
| 20 || [20.0.0+] SaveHeaderForMigration | |||
|- | |- | ||
| 100 || DeleteFile | | 100 || DeleteFile | ||
Line 211: | Line 227: | ||
= pdm:ntfy = | = pdm:ntfy = | ||
This is "nn::pdm::detail::INotifyService". | This is "nn::pdm::detail::INotifyService". | ||
This was moved from [[NS_services|ns]] with [3.0.0+]. | |||
This is only available when the output from [[Process_Manager_services|pm:bm]] GetBootMode is not Maintenance. | This is only available when the output from [[Process_Manager_services|pm:bm]] GetBootMode is not Maintenance. | ||
Line 226: | Line 244: | ||
| 4 || [[#NotifyClearAllEvent]] | | 4 || [[#NotifyClearAllEvent]] | ||
|- | |- | ||
| 5 || [[#NotifyEventForDebug]] | | 5 || [2.0.0+] [[#NotifyEventForDebug]] | ||
|- | |- | ||
| 6 || [4.0.0+] SuspendUserAccountEventService | | 6 || [4.0.0+] SuspendUserAccountEventService | ||
Line 235: | Line 253: | ||
|- | |- | ||
| 9 || [8.0.0+] | | 9 || [8.0.0+] | ||
|- | |||
| 20 || [20.0.0+] | |||
|- | |||
| 100 || [20.0.0+] | |||
|- | |||
| 101 || [20.0.0+] | |||
|} | |} | ||
== NotifyAppletEvent == | == NotifyAppletEvent == | ||
Takes an input u8 [[#AppletEventType]], an u8 [[Applet_Manager_services#AppletId|AppletId]], an u8 [[Filesystem_services#StorageId|StorageId]], an u8 [[#PlayLogPolicy]], an u32 '''event_x8''', and an u64 ''' | Takes an input u8 [[#AppletEventType]], an u8 [[Applet_Manager_services#AppletId|AppletId]], an u8 [[Filesystem_services#StorageId|StorageId]], an u8 [[#PlayLogPolicy]], an u32 '''event_x8''', and an u64 '''ProgramId'''. Returns no output. | ||
When [[#PlayLogPolicy]] is 2 ("None") this will immediately return 0. | When [[#PlayLogPolicy]] is 2 ("None") this will immediately return 0. | ||
Line 246: | Line 270: | ||
* u8 +0xF = [[#AppletEventType]]. | * u8 +0xF = [[#AppletEventType]]. | ||
* Sets the 3 timestamps. | * Sets the 3 timestamps. | ||
* Converts ''' | * Converts '''ProgramId''' and writes it to +0x0. | ||
* u32 +0x8 = '''event_x8'''. | * u32 +0x8 = '''event_x8'''. | ||
* u8 +0xC = [[Applet_Manager_services#AppletId|AppletId]], u8 +0xD = [[Filesystem_services#StorageId|StorageId]], and u8 +0xE = [[#PlayLogPolicy]]. | * u8 +0xC = [[Applet_Manager_services#AppletId|AppletId]], u8 +0xD = [[Filesystem_services#StorageId|StorageId]], and u8 +0xE = [[#PlayLogPolicy]]. | ||
Line 275: | Line 299: | ||
== Cmd8 == | == Cmd8 == | ||
Takes an input u8 [[#AppletEventType]], an u8 [[Applet_Manager_services#LibraryAppletMode|LibraryAppletMode]], an u8 [[Applet_Manager_services#AppletId|AppletId]], an u8 [[Filesystem_services#StorageId|StorageId]], an u8 [[#PlayLogPolicy]], and an u64 ''' | Takes an input u8 [[#AppletEventType]], an u8 [[Applet_Manager_services#LibraryAppletMode|LibraryAppletMode]], an u8 [[Applet_Manager_services#AppletId|AppletId]], an u8 [[Filesystem_services#StorageId|StorageId]], an u8 [[#PlayLogPolicy]], and an u64 '''ProgramId'''. Returns no output. | ||
This is similar to [[#NotifyAppletEvent]]. | This is similar to [[#NotifyAppletEvent]]. | ||
Line 285: | Line 309: | ||
* u8 +0xF = [[#AppletEventType]]. | * u8 +0xF = [[#AppletEventType]]. | ||
* Sets the 3 timestamps. | * Sets the 3 timestamps. | ||
* Converts ''' | * Converts '''ProgramId''' and writes it to +0x0. | ||
* u8 +0x9 = [[Applet_Manager_services#LibraryAppletMode|LibraryAppletMode]]. | * u8 +0x9 = [[Applet_Manager_services#LibraryAppletMode|LibraryAppletMode]]. | ||
* u8 +0x8 = 1. | * u8 +0x8 = 1. | ||
Line 309: | Line 333: | ||
= pdm:qry = | = pdm:qry = | ||
This is "nn::pdm::detail::IQueryService". | This is "nn::pdm::detail::IQueryService". | ||
This was moved from [[NS_services|ns]] with [3.0.0+]. | |||
This is only available when the output from [[Process_Manager_services|pm:bm]] GetBootMode is not Maintenance. | This is only available when the output from [[Process_Manager_services|pm:bm]] GetBootMode is not Maintenance. | ||
Line 336: | Line 362: | ||
| 9 || [[#GetAvailablePlayEventRange]] | | 9 || [[#GetAvailablePlayEventRange]] | ||
|- | |- | ||
| 10 || [[#QueryAccountEvent]] | | 10 || [3.0.0+] [[#QueryAccountEvent]] | ||
|- | |- | ||
| 11 || [4.0.0+] [[#QueryAccountPlayEvent]] | | 11 || [4.0.0+] [[#QueryAccountPlayEvent]] | ||
Line 355: | Line 381: | ||
|- | |- | ||
| 19 || [10.0.0+] [[#QueryApplicationPlayStatisticsByUserAccountIdForSystem]] | | 19 || [10.0.0+] [[#QueryApplicationPlayStatisticsByUserAccountIdForSystem]] | ||
|- | |||
| 100 || [20.0.0+] | |||
|- | |||
| 110 || [20.0.0+] | |||
|- | |||
| 118 || [20.0.0+] | |||
|- | |||
| 119 || [20.0.0+] | |||
|} | |} | ||
Line 416: | Line 450: | ||
Takes ([10.0.0+] an input u8 bool), an input u128 '''Uid''', a type-0x6 output buffer containing an array of u64 '''ApplicationId''', and returns an output s32 for actual total output entries. | Takes ([10.0.0+] an input u8 bool), an input u128 '''Uid''', a type-0x6 output buffer containing an array of u64 '''ApplicationId''', and returns an output s32 for actual total output entries. | ||
Returns a list of | Returns a list of applications played by the specified user. | ||
== GetRecentlyPlayedApplicationUpdateEvent == | == GetRecentlyPlayedApplicationUpdateEvent == | ||
Line 564: | Line 598: | ||
This is "nn::pdm::AppletEvent" ([1.0.0-7.0.1] "nn::pdm::ApplicationEvent"). | This is "nn::pdm::AppletEvent" ([1.0.0-7.0.1] "nn::pdm::ApplicationEvent"). | ||
This is a 0x18-byte struct. | This is a 0x28-byte ([1.0.0-15.0.1] 0x18-byte) struct. | ||
Pre-16.0.0: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 572: | Line 608: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 || 0x8 || | | 0x0 || 0x8 || ProgramId | ||
|- | |- | ||
| 0x8 || 0x4 || entryindex | | 0x8 || 0x4 || entryindex | ||
Line 586: | Line 622: | ||
Timestamp format, converted from PosixTime: total minutes since epoch UTC 1999/12/31 00:00. | Timestamp format, converted from PosixTime: total minutes since epoch UTC 1999/12/31 00:00. | ||
[16.0.0+]: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x8 || ProgramId | |||
|- | |||
| 0x8 || 0x4 || entryindex | |||
|- | |||
| 0xC || 0x4 || Padding | |||
|- | |||
| 0x10 || 0x8 || timestamp0 in PosixTime | |||
|- | |||
| 0x18 || 0x8 || timestamp1 in PosixTime | |||
|- | |||
| 0x20 || 0x1 || [[#PlayEvent]] +0xF | |||
|- | |||
| 0x21 || 0x7 || Padding | |||
|} | |||
= PlayStatistics = | = PlayStatistics = | ||
This is "nn::pdm::PlayStatistics". | This is "nn::pdm::PlayStatistics". | ||
This is a 0x28-byte struct. | This is a 0x48-byte ([1.0.0-15.0.1] 0x28-byte) struct. | ||
Pre-16.0.0: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 598: | Line 659: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 || 0x8 || | | 0x0 || 0x8 || ProgramId | ||
|- | |- | ||
| 0x8 || 0x4 || First entryindex | | 0x8 || 0x4 || First entryindex | ||
Line 614: | Line 675: | ||
| 0x20 || 0x4 || Total play-time in minutes. | | 0x20 || 0x4 || Total play-time in minutes. | ||
|- | |- | ||
| 0x24 || 0x4 || Total times the | | 0x24 || 0x4 || Total times the program was launched. | ||
|} | |||
[16.0.0+]: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x8 || ProgramId | |||
|- | |||
| 0x8 || 0x4 || First entryindex | |||
|- | |||
| 0xC || 0x4 || Padding | |||
|- | |||
| 0x10 || 0x8 || First timestamp0. Same as the first [[#AppletEvent]] timestamp except in PosixTime. | |||
|- | |||
| 0x18 || 0x8 || First timestamp1. Same as the second [[#AppletEvent]] timestamp except in PosixTime. | |||
|- | |||
| 0x20 || 0x4 || Last entryindex | |||
|- | |||
| 0x24 || 0x4 || Padding | |||
|- | |||
| 0x28 || 0x8 || Last timestamp0. Same as the first [[#AppletEvent]] timestamp except in PosixTime. | |||
|- | |||
| 0x30 || 0x8 || Last timestamp1. Same as the second [[#AppletEvent]] timestamp except in PosixTime. | |||
|- | |||
| 0x38 || 0x8 || Total play-time in nanoseconds. | |||
|- | |||
| 0x40 || 0x4 || Total times the program was launched. | |||
|- | |||
| 0x44 || 0x4 || Padding | |||
|} | |} | ||
Line 620: | Line 714: | ||
This is "nn::pdm::LastPlayTime". | This is "nn::pdm::LastPlayTime". | ||
This is a 0x18-byte struct and contains data from the last time the | This is a 0x18-byte struct and contains data from the last time the program was played. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 628: | Line 722: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 || 0x8 || | | 0x0 || 0x8 || ApplicationId | ||
|- | |- | ||
| 0x8 || 0x4 || Same as the first [[#AppletEvent]] timestamp. | | 0x8 || 0x4 || Same as the first [[#AppletEvent]] timestamp. | ||
Line 634: | Line 728: | ||
| 0xC || 0x4 || Same as the second [[#AppletEvent]] timestamp. | | 0xC || 0x4 || Same as the second [[#AppletEvent]] timestamp. | ||
|- | |- | ||
| 0x10 || 0x4 || Total minutes since the | | 0x10 || 0x4 || Total minutes since the program was last played. | ||
|- | |- | ||
| 0x14 || 0x1 || Flag indicating whether the above field is set. | | 0x14 || 0x1 || Flag indicating whether the above field is set. | ||
Line 726: | Line 820: | ||
* [[#QueryAppletEvent]], [[#QueryLastPlayTime]], and [[#QueryApplicationPlayStatisticsForSystem]]: PlayEvent +0x1C must be 0, and [[#PlayLogPolicy]] must be 0. [10.0.0+] These will also allow [[#PlayLogPolicy]] value 3, if the input flag is set. | * [[#QueryAppletEvent]], [[#QueryLastPlayTime]], and [[#QueryApplicationPlayStatisticsForSystem]]: PlayEvent +0x1C must be 0, and [[#PlayLogPolicy]] must be 0. [10.0.0+] These will also allow [[#PlayLogPolicy]] value 3, if the input flag is set. | ||
** With [[#QueryLastPlayTime]]/[[#QueryApplicationPlayStatisticsForSystem]] the [[Applet_Manager_services#AppletId|AppletId]] must be 1. [10.0.0+] These now also allow [[Applet_Manager_services#AppletId|AppletId]] 0x1F/0x20. | ** With [[#QueryLastPlayTime]]/[[#QueryApplicationPlayStatisticsForSystem]] the [[Applet_Manager_services#AppletId|AppletId]] must be 1. [10.0.0+] These now also allow [[Applet_Manager_services#AppletId|AppletId]] 0x1F/0x20. | ||
* [[#QueryPlayStatisticsByApplicationId]]: PlayEvent +0x1C must be 0, +0xC must be 1 ([10.0.0+] or 0x1F/0x20), and the | * [[#QueryPlayStatisticsByApplicationId]]: PlayEvent +0x1C must be 0, +0xC must be 1 ([10.0.0+] or 0x1F/0x20), and the ProgramId must match. [10.0.0+] [[#PlayLogPolicy]] must be 0. Value 3 is allowed if the input flag is set. | ||
* [[#QueryAccountEvent]]: PlayEvent +0x1C must be 1 and PlayEvent +0x18 must be <=1. | * [[#QueryAccountEvent]]: PlayEvent +0x1C must be 1 and PlayEvent +0x18 must be <=1. | ||
* [[#QueryApplicationPlayStatisticsForSystem]]: In addition to the above, this also handles [[#PlayEventType]] PowerStateChange, where PlayEvent +0x0 is value 0 or 1. | * [[#QueryApplicationPlayStatisticsForSystem]]: In addition to the above, this also handles [[#PlayEventType]] PowerStateChange, where PlayEvent +0x0 is value 0 or 1. | ||
The structure of the first 0x1C-bytes are determined by [[#PlayEventType]]. For | The structure of the first 0x1C-bytes are determined by [[#PlayEventType]]. For ProgramIds/userIDs, the low/high u32 in each u64 is swapped. | ||
Applet: | Applet: | ||
Line 739: | Line 833: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 || 0x8 || | | 0x0 || 0x8 || ProgramId | ||
|- | |- | ||
| 0x8 || 0x4 || Title version, set by pdm:ntfy [[#NotifyAppletEvent]] and [[#Cmd9]]. | | 0x8 || 0x4 || Title version, set by pdm:ntfy [[#NotifyAppletEvent]] and [[#Cmd9]]. | ||
Line 767: | Line 861: | ||
| 0x0 || 0x10 || userID | | 0x0 || 0x10 || userID | ||
|- | |- | ||
| 0x10 || 0x8 || | | 0x10 || 0x8 || ProgramId, when u8 +0x18 = 2. | ||
|- | |- | ||
| 0x18 || 0x1 || Type. 0-1 to be listed by [[#QueryAccountEvent]], or 2 to include the above | | 0x18 || 0x1 || Type. 0-1 to be listed by [[#QueryAccountEvent]], or 2 to include the above ProgramId. | ||
|- | |- | ||
| 0x19 || 0x3 || Padding | | 0x19 || 0x3 || Padding | ||
Line 779: | Line 873: | ||
This is "nn::pdm::AccountEvent". | This is "nn::pdm::AccountEvent". | ||
This is a 0x38-byte struct. | This is a 0x38-byte ([10.0.0-15.0.1] 0x40-byte [3.0.0-9.2.0] 0x38-byte) struct. | ||
This was added with [3.0.0+]. | |||
[3.0.0-9.2.0]: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 798: | Line 896: | ||
|- | |- | ||
| 0x28 || 0x8 || [[#PlayEvent]] +0x30 | | 0x28 || 0x8 || [[#PlayEvent]] +0x30 | ||
|- | |||
| 0x30 || 0x1 || [[#PlayEvent]] +0x18 | |||
|- | |||
| 0x31 || 0x7 || Padding | |||
|} | |||
[10.0.0-15.0.1]: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x10 || userID | |||
|- | |||
| 0x10 || 0x8 || ProgramId | |||
|- | |||
| 0x18 || 0x4 || entryindex | |||
|- | |||
| 0x1C || 0x4 || Padding | |||
|- | |||
| 0x20 || 0x8 || [[#PlayEvent]] +0x20 | |||
|- | |||
| 0x28 || 0x8 || [[#PlayEvent]] +0x28 | |||
|- | |||
| 0x30 || 0x8 || [[#PlayEvent]] +0x30 | |||
|- | |||
| 0x38 || 0x1 || [[#PlayEvent]] +0x18 | |||
|- | |||
| 0x39 || 0x7 || Padding | |||
|} | |||
[16.0.0+]: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x10 || userID | |||
|- | |||
| 0x10 || 0x8 || ProgramId | |||
|- | |||
| 0x18 || 0x4 || entryindex | |||
|- | |||
| 0x1C || 0x4 || Padding | |||
|- | |||
| 0x20 || 0x8 || [[#PlayEvent]] +0x20 | |||
|- | |||
| 0x28 || 0x8 || [[#PlayEvent]] +0x28 | |||
|- | |- | ||
| 0x30 || 0x1 || [[#PlayEvent]] +0x18 | | 0x30 || 0x1 || [[#PlayEvent]] +0x18 | ||
Line 817: | Line 967: | ||
| 0x0 || 0x4 || ? | | 0x0 || 0x4 || ? | ||
|- | |- | ||
| 0x4 || 0x8 || | | 0x4 || 0x8 || ProgramId, with the u32 low/high words swapped. | ||
|- | |- | ||
| 0xC || 0xC || ? | | 0xC || 0xC || ? | ||
Line 837: | Line 987: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 || 0x8 || | | 0x0 || 0x8 || ApplicationId | ||
|- | |- | ||
| 0x8 || 0x8 || Total play-time in nanoseconds. | | 0x8 || 0x8 || Total play-time in nanoseconds. | ||
|- | |- | ||
| 0x10 || 0x8 || Total times the | | 0x10 || 0x8 || Total times the program was launched. | ||
|} | |} | ||