Shared Database services: Difference between revisions
No edit summary |
No edit summary |
||
| (15 intermediate revisions by 2 users not shown) | |||
| Line 35: | 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 99: | 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 169: | Line 175: | ||
|- | |- | ||
| 26 || [10.2.0+] Append | | 26 || [10.2.0+] Append | ||
|- | |||
| 27 || [19.0.0-19.0.1] ImportMigrationData | |||
|} | |} | ||
| Line 199: | 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 213: | 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 228: | Line 244: | ||
| 4 || [[#NotifyClearAllEvent]] | | 4 || [[#NotifyClearAllEvent]] | ||
|- | |- | ||
| 5 || [[#NotifyEventForDebug]] | | 5 || [2.0.0+] [[#NotifyEventForDebug]] | ||
|- | |- | ||
| 6 || [4.0.0+] SuspendUserAccountEventService | | 6 || [4.0.0+] SuspendUserAccountEventService | ||
| Line 237: | 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 248: | 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 277: | 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 287: | 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 311: | 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 338: | Line 362: | ||
| 9 || [[#GetAvailablePlayEventRange]] | | 9 || [[#GetAvailablePlayEventRange]] | ||
|- | |- | ||
| 10 || [[#QueryAccountEvent]] | | 10 || [3.0.0+] [[#QueryAccountEvent]] | ||
|- | |- | ||
| 11 || [4.0.0+] [[#QueryAccountPlayEvent]] | | 11 || [4.0.0+] [[#QueryAccountPlayEvent]] | ||
| Line 357: | 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 418: | 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 566: | 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 574: | Line 608: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 || 0x8 || | | 0x0 || 0x8 || ProgramId | ||
|- | |- | ||
| 0x8 || 0x4 || entryindex | | 0x8 || 0x4 || entryindex | ||
| Line 588: | 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 = | ||
| Line 657: | 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 665: | 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 671: | 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 763: | 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 776: | 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 804: | 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 816: | 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 835: | 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 854: | Line 967: | ||
| 0x0 || 0x4 || ? | | 0x0 || 0x4 || ? | ||
|- | |- | ||
| 0x4 || 0x8 || | | 0x4 || 0x8 || ProgramId, with the u32 low/high words swapped. | ||
|- | |- | ||
| 0xC || 0xC || ? | | 0xC || 0xC || ? | ||
| Line 874: | 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. | ||
|} | |} | ||