NS services: Difference between revisions
Masagrator (talk | contribs) No edit summary |
|||
| (18 intermediate revisions by 3 users not shown) | |||
| Line 359: | Line 359: | ||
== GetApplicationContentPath == | == GetApplicationContentPath == | ||
Takes a 0x16-type output buffer, an u8 [[NCM_services# | Takes a 0x16-type output buffer, an u8 [[NCM_services#ContentType|ContentType]], and an [[NCM_services#ApplicationId|ApplicationId]]. | ||
The input [[NCM_services#ApplicationId|ApplicationId]] is used with the application-title table like various other cmds, anything not in that table can't be used with this. | The input [[NCM_services#ApplicationId|ApplicationId]] is used with the application-title table like various other cmds, anything not in that table can't be used with this. | ||
| Line 406: | Line 406: | ||
These are "nn::ns::detail::IServiceGetterInterface". | These are "nn::ns::detail::IServiceGetterInterface". | ||
These commands check a state field for a command-specific bit and returns an error if not set, this is | These commands check a state field for a command-specific bit and returns an error if not set, this is a permissions check for service+command. | ||
[11.0.0+] ns:ro was added. | [11.0.0+] ns:ro was added. | ||
| Line 414: | Line 414: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name || Permission bit | ||
|- | |||
| 7988 || [6.0.0+] [[#IDynamicRightsInterface|GetDynamicRightsInterface]] || 10 | |||
|- | |||
| 7989 || [5.1.0+] [[#IReadOnlyApplicationControlDataInterface|GetReadOnlyApplicationControlDataInterface]] || 9 | |||
|- | |||
| 7991 || [5.0.0+] [[#IReadOnlyApplicationRecordInterface|GetReadOnlyApplicationRecordInterface]] || 8 | |||
|- | |||
| 7992 || [4.0.0+] [[#IECommerceInterface|GetECommerceInterface]] || 7 | |||
|- | |||
| 7993 || [4.0.0+] [[#IApplicationVersionInterface|GetApplicationVersionInterface]] || 6 | |||
|- | |||
| 7994 || [[#IFactoryResetInterface|GetFactoryResetInterface]] || 5 | |||
|- | |||
| 7995 || [[#IAccountProxyInterface|GetAccountProxyInterface]] || 4 | |||
|- | |||
| 7996 || [[#IApplicationManagerInterface|GetApplicationManagerInterface]] || 3 | |||
|- | |- | ||
| | | 7997 || [[#IDownloadTaskInterface|GetDownloadTaskInterface]] || 1 | ||
|- | |- | ||
| | | 7998 || [[#IContentManagementInterface|GetContentManagementInterface]] || 0 | ||
|- | |- | ||
| | | 7999 || [[#IDocumentInterface|GetDocumentInterface]] || 2 | ||
|} | |||
Permissions state field with each service: | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Service || Permissions | ||
|- | |- | ||
| | | ns:web || 0x304 | ||
|- | |- | ||
| | | ns:ec || 0x83 | ||
|- | |- | ||
| | | ns:sweb || 0x387 | ||
|- | |- | ||
| | | ns:rid || 0x10 | ||
|- | |- | ||
| | | ns:rt || 0x20 | ||
|- | |- | ||
| | | ns:ro || 0x301 | ||
|- | |- | ||
| | | ns:am2 || 0x7FF | ||
|} | |} | ||
| Line 649: | Line 670: | ||
|- | |- | ||
| 307 || TerminateOverlayApplet | | 307 || TerminateOverlayApplet | ||
|- | |||
| 308 || [S2] | |||
|- | |||
| 309 || [S2] | |||
|- | |- | ||
| 400 || [[#GetApplicationControlData]] | | 400 || [[#GetApplicationControlData]] | ||
| Line 667: | Line 692: | ||
|- | |- | ||
| 408 || [8.0.0+] [[#ListApplicationIcon]] | | 408 || [8.0.0+] [[#ListApplicationIcon]] | ||
|- | |||
| 409 || [S2] | |||
|- | |||
| 410 || [S2] | |||
|- | |- | ||
| 411 || [19.0.0+] | | 411 || [19.0.0+] | ||
| Line 701: | Line 730: | ||
|- | |- | ||
| 427 || [20.0.0+] | | 427 || [20.0.0+] | ||
|- | |||
| 428 || [21.0.0+] | |||
|- | |||
| 429 || [21.0.0+] | |||
|- | |||
| 430 || [21.0.0+] | |||
|- | |- | ||
| 502 || [[#RequestCheckGameCardRegistration]] | | 502 || [[#RequestCheckGameCardRegistration]] | ||
| Line 729: | Line 764: | ||
|- | |- | ||
| 515 || [20.0.0+] | | 515 || [20.0.0+] | ||
|- | |||
| 516 || [21.0.0+] | |||
|- | |||
| 517 || [21.0.0+] | |||
|- | |||
| 518 || [21.0.0+] | |||
|- | |||
| 519 || [21.0.0+] | |||
|- | |- | ||
| 600 || [[#CountApplicationContentMeta]] | | 600 || [[#CountApplicationContentMeta]] | ||
| Line 817: | Line 860: | ||
|- | |- | ||
| 923 || [20.0.0+] | | 923 || [20.0.0+] | ||
|- | |||
| 924 || [S2] | |||
|- | |||
| 925 || [S2] | |||
|- | |||
| 926 || [S2] | |||
|- | |||
| 927 || [S2] | |||
|- | |- | ||
| 928 || [20.0.0+] | | 928 || [20.0.0+] | ||
| Line 827: | Line 878: | ||
|- | |- | ||
| 933 || [20.1.0+] | | 933 || [20.1.0+] | ||
|- | |||
| 934 || [21.0.0+] | |||
|- | |||
| 935 || [21.0.0+] | |||
|- | |||
| 936 || [21.0.0+] | |||
|- | |- | ||
| 1000 || [[#RequestVerifyApplicationDeprecated]] | | 1000 || [[#RequestVerifyApplicationDeprecated]] | ||
| Line 1,053: | Line 1,110: | ||
|- | |- | ||
| 2368 || [20.0.0+] | | 2368 || [20.0.0+] | ||
|- | |||
| 2369 || [21.0.0+] | |||
|- | |- | ||
| 2400 || [8.0.0+] [[#GetPromotionInfo]] | | 2400 || [8.0.0+] [[#GetPromotionInfo]] | ||
| Line 1,132: | Line 1,191: | ||
| 3050 || [14.0.0+] ListAssignELicenseTaskResult | | 3050 || [14.0.0+] ListAssignELicenseTaskResult | ||
|- | |- | ||
| 3100 || [17.0.0+] GetSafeSystemVersionCheckInfo | | 3100 || [17.0.0+] [[#GetSafeSystemVersionCheckInfo|GetSafeSystemVersionCheckInfo]] | ||
|- | |- | ||
| 3101 || [17.0.0+] RequestUpdateSafeSystemVersionCheckInfo | | 3101 || [17.0.0+] [[#RequestUpdateSafeSystemVersionCheckInfo|RequestUpdateSafeSystemVersionCheckInfo]] | ||
|- | |- | ||
| 3102 || [17.0.0+] ResetSafeSystemVersionCheckInfo | | 3102 || [17.0.0+] [[#ResetSafeSystemVersionCheckInfo|ResetSafeSystemVersionCheckInfo]] | ||
|- | |- | ||
| 3104 || [18.0.0+] GetApplicationNintendoLogo | | 3104 || [18.0.0+] GetApplicationNintendoLogo | ||
|- | |- | ||
| 3105 || [18.0.0+] GetApplicationStartupMovie | | 3105 || [18.0.0+] GetApplicationStartupMovie | ||
|- | |||
| 3150 || [S2] | |||
|- | |- | ||
| 4000 || [20.0.0+] | | 4000 || [20.0.0+] | ||
| Line 1,315: | Line 1,376: | ||
|- | |- | ||
| 4097 || [20.0.0+] | | 4097 || [20.0.0+] | ||
|- | |||
| 4099 || [21.0.0+] | |||
|- | |- | ||
| 5000 || [18.0.0+] | | 5000 || [18.0.0+] | ||
| Line 1,393: | Line 1,456: | ||
==== GetRequestServerStopper ==== | ==== GetRequestServerStopper ==== | ||
No input, returns an output [[#IRequestServerStopper]]. | No input, returns an output [[#IRequestServerStopper]]. | ||
This increfs a state ref-count, with decref being handled when the object is closed. This ref-count is checked by [[#GetApplicationDeliveryInfo|GetApplicationDeliveryInfo]] and related cmds. | |||
==== CancelApplicationApplyDelta ==== | ==== CancelApplicationApplyDelta ==== | ||
| Line 1,528: | Line 1,593: | ||
This is essentially an async wrapper for [[#GetApplicationControlData]], with support for multiple ApplicationIds. | This is essentially an async wrapper for [[#GetApplicationControlData]], with support for multiple ApplicationIds. | ||
==== Cmd421 ==== | |||
Takes an input TransferMemory handle, a type-0x5 input buffer containing an array of u64 [[NCM_services#ApplicationId|ApplicationIds]], an u8 [[#ApplicationControlSource]], an u64 size, returns an output Event handle and an [[#IAsyncValue]]. | |||
This is essentially the same as [[#ListApplicationTitle|ListApplicationTitle]] except the ApplicationControlSource is used here (ListApplicationTitle ignores it and uses 0xF0 instead). | |||
The TransferMemory size must be at least: count*sizeof(u64) + count*[[NACP#ApplicationTitle|0x300]] + [[#GetApplicationControlData|0x1d000]]. | |||
The async task impl code eventually compares ApplicationControlSource with 0xF0, with a separate code-path being used when it doesn't match (which also handles [[NACP|compression]] when needed). | |||
==== RequestCheckGameCardRegistration ==== | ==== RequestCheckGameCardRegistration ==== | ||
| Line 1,694: | Line 1,768: | ||
An error is thrown if any bit is set in ApplicationDeliveryAttributeTag besides bit1, this must also be <=0x3. The output array-count must be at least 1: only 1 entry will be written to this array (hence on success total_out will also only be 1 on success). | An error is thrown if any bit is set in ApplicationDeliveryAttributeTag besides bit1, this must also be <=0x3. The output array-count must be at least 1: only 1 entry will be written to this array (hence on success total_out will also only be 1 on success). | ||
[7.0.0+] An error is thrown if | [7.0.0+] An error is thrown if the state ref-count for [[#GetRequestServerStopper|RequestServerStopper]] is zero. [7.0.0-7.0.1] The func which checks this would also return success when a field prior to the previously mentioned field is 0 (checked before the ref-count). | ||
An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task. | An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task. | ||
| Line 2,239: | Line 2,313: | ||
|- | |- | ||
| 607 || [[#IsAnyApplicationRunning]] | | 607 || [[#IsAnyApplicationRunning]] | ||
|- | |||
| 608 || [21.0.0+] | |||
|} | |} | ||
| Line 2,268: | Line 2,344: | ||
|- | |- | ||
| 92 || [5.0.0+] GetRunningApplicationProgramId | | 92 || [5.0.0+] GetRunningApplicationProgramId | ||
|- | |||
| 100 || [S2] | |||
|- | |||
| 101 || [S2] | |||
|- | |- | ||
| 2524 || [19.0.0+] | | 2524 || [19.0.0+] | ||
|} | |} | ||
==== Cmd100 ==== | |||
Takes a type-0x16 output buffer containing a 0x300-byte struct, an input u8, an u64. Returns two output u8s. | |||
==== Cmd101 ==== | |||
Takes a type-0x16 output buffer containing a 0x300-byte struct, an input u8, an u64. Returns an output u8, an u8 [[Filesystem_services|ContentAttributes]], and a [[NCM_services#ProgramId|ProgramId]]. | |||
This is similar to Cmd2524. On [S2] this is used instead of Cmd2524. | |||
==== Cmd2524 ==== | |||
Takes a type-0x16 output buffer containing a 0x300-byte struct, an input u8, an u64. Returns an output u8 [[Filesystem_services|ContentAttributes]] and a [[NCM_services#ProgramId|ProgramId]]. | |||
The user-process uses the output from this as the input for [[Filesystem_services|OpenFileSystemWithId]] (out-buffer is used as the [[Filesystem_services|FspPath]]). | |||
=== IDownloadTaskInterface === | === IDownloadTaskInterface === | ||
| Line 2,341: | Line 2,434: | ||
| 2 || [10.0.0+] IsDataCorruptedResult || | | 2 || [10.0.0+] IsDataCorruptedResult || | ||
|- | |- | ||
| 3 || [20.0.0+] || | | 3 || [20.0.0+] [[#ListApplicationRecord|ListApplicationRecord]] || | ||
|} | |} | ||
| Line 2,363: | Line 2,456: | ||
| 4 || [9.0.0+] SelectApplicationDesiredLanguage || | | 4 || [9.0.0+] SelectApplicationDesiredLanguage || | ||
|- | |- | ||
| 5 || [19.0.0+] || | | 5 || [19.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 411 | ||
|- | |- | ||
| 6 || [19.0.0+] || | | 6 || [19.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 416 | ||
|- | |- | ||
| 7 || [20.0.0+] || | | 7 || [20.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 921 | ||
|- | |- | ||
| 8 || [20.0.0+] || | | 8 || [20.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 922 | ||
|- | |- | ||
| 9 || [20.0.0+] || | | 9 || [20.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 923 | ||
|- | |- | ||
| 10 || [20.0.0+] || | | 10 || [20.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 421 | ||
|- | |- | ||
| 11 || [20.0.0+] || | | 11 || [20.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 422 | ||
|- | |- | ||
| 12 || [20.0.0+] || | | 12 || [20.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 423 | ||
|- | |- | ||
| 13 || [20.0.0+] || | | 13 || [20.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 407 | ||
|- | |- | ||
| 14 || [20.0.0+] || | | 14 || [20.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 408 | ||
|- | |- | ||
| 15 || [20.0.0+] || | | 15 || [20.0.0+] || Same as [[#IApplicationManagerInterface]] cmd 415 | ||
|- | |- | ||
| 16 || [20.0.0+] || | | 16 || [20.0.0+] || | ||
|- | |- | ||
| 17 || [20.1.0+] || | | 17 || [20.1.0+] || Same as [[#IApplicationManagerInterface]] cmd 933 | ||
|- | |||
| 18 || [21.0.0+] || | |||
|- | |||
| 19 || [21.0.0+] || | |||
|- | |||
| 20 || [21.0.0+] || | |||
|- | |||
| 21 || [21.0.0+] || | |||
|- | |||
| 22 || [21.0.0+] || | |||
|} | |} | ||
| Line 2,452: | Line 2,555: | ||
|- | |- | ||
| 28 || [20.0.0+] | | 28 || [20.0.0+] | ||
|- | |||
| 29 || [21.0.0+] | |||
|- | |||
| 30 || [21.0.0+] | |||
|} | |} | ||
| Line 2,547: | Line 2,654: | ||
|- | |- | ||
| 13 || [20.0.0+] | | 13 || [20.0.0+] | ||
|- | |||
| 14 || [21.0.0+] | |||
|} | |} | ||
| Line 2,674: | Line 2,783: | ||
| 1202 || [4.0.0+] [[#GetSafeSystemVersion]] | | 1202 || [4.0.0+] [[#GetSafeSystemVersion]] | ||
|- | |- | ||
| 3100 || [18.0.0+] | | 3100 || [18.0.0+] [[#GetSafeSystemVersionCheckInfo|GetSafeSystemVersionCheckInfo]] | ||
|- | |- | ||
| 3101 || [18.0.0+] | | 3101 || [18.0.0+] [[#RequestUpdateSafeSystemVersionCheckInfo|RequestUpdateSafeSystemVersionCheckInfo]] | ||
|- | |- | ||
| 3102 || [18.0.0+] | | 3102 || [18.0.0+] [[#ResetSafeSystemVersionCheckInfo|ResetSafeSystemVersionCheckInfo]] | ||
|} | |} | ||
| Line 2,684: | Line 2,793: | ||
No input, returns an output u8 bool flag. | No input, returns an output u8 bool flag. | ||
Web-applets use this command to check if the system needs an update. | [S1] Web-applets use this command to check if the system needs an update. | ||
== UpdateSafeSystemVersionForDebug == | == UpdateSafeSystemVersionForDebug == | ||
Takes an input [[NCM_services#ApplicationId|ApplicationId]] | Takes an input u32 '''version''' and an [[NCM_services#ApplicationId|ApplicationId]]. | ||
This command is not available for retail units. On a debug unit, if the [[System_Settings|system setting]] <code>vulnerability!enable_debug</code> is set, this mounts the system savegame [[Flash_Filesystem#System_Savegames|0x8000000000000049]] as "ns_ssversion:/", opens the file "ns_ssversion:/entry" and writes the supplied [[NCM_services#ApplicationId|ApplicationId]] and '''version''' in it. | This command is not available for retail units. On a debug unit, if the [[System_Settings|system setting]] <code>vulnerability!enable_debug</code> is set, this mounts the system savegame [[Flash_Filesystem#System_Savegames|0x8000000000000049]] as "ns_ssversion:/", opens the file "ns_ssversion:/entry" and writes the supplied [[NCM_services#ApplicationId|ApplicationId]] and '''version''' in it. | ||
| Line 2,697: | Line 2,806: | ||
== GetSafeSystemVersion == | == GetSafeSystemVersion == | ||
No input, returns an output [[NCM_services#ContentMetaKey|ContentMetaKey]] with the cached contents of "ns_ssversion:/entry" ([[NCM_services#ApplicationId|ApplicationId]], u32 '''version''' and u32 '''policy''' from <code>vulnerability!needs_update_vulnerability_policy</code>). | No input, returns an output [[NCM_services#ContentMetaKey|ContentMetaKey]] with the cached contents of "ns_ssversion:/entry" ([[NCM_services#ApplicationId|ApplicationId]], u32 '''version''' and u32 '''policy''' from <code>vulnerability!needs_update_vulnerability_policy</code>). | ||
== GetSafeSystemVersionCheckInfo == | |||
No input, returns 0x10-bytes of output. | |||
[S2] Used by web-applets via ns:vm. | |||
== RequestUpdateSafeSystemVersionCheckInfo == | |||
No input, returns an output Event handle and an [[#IAsyncResult|IAsyncResult]]. | |||
[S2] Used by web-applets via ns:vm. | |||
The async task thread uses [[NIM_services|nim]] RequestCheckSafeSystemVersion, etc. | |||
== ResetSafeSystemVersionCheckInfo == | |||
No input/output. | |||
This throws an error if [[Settings_services|GetDebugModeFlag]] returns false. | |||
= ns:su = | = ns:su = | ||
| Line 2,738: | Line 2,864: | ||
|- | |- | ||
| 18 || [4.0.0+] [[#GetSendSystemUpdateProgress]] | | 18 || [4.0.0+] [[#GetSendSystemUpdateProgress]] | ||
|- | |||
| 19 || [S2] | |||
|- | |||
| 20 || [S2] | |||
|} | |} | ||
| Line 2,827: | Line 2,957: | ||
Same as [[#GetReceiveProgress]] except this uses nim ListLocalCommunicationSendSystemUpdateTask and GetLocalCommunicationSendSystemUpdateTaskInfo. The data copied to output is also swapped: u64 nim_out+0x8 is copied to out+0x8, and u64 nim_out+0x10 is copied to out+0x0. | Same as [[#GetReceiveProgress]] except this uses nim ListLocalCommunicationSendSystemUpdateTask and GetLocalCommunicationSendSystemUpdateTaskInfo. The data copied to output is also swapped: u64 nim_out+0x8 is copied to out+0x8, and u64 nim_out+0x10 is copied to out+0x0. | ||
== Cmd19 == | |||
This is exclusive to S2. | |||
No input/output. | |||
== Cmd20 == | |||
This is exclusive to S2. | |||
No input, returns an output u8. | |||
== ISystemUpdateControl == | == ISystemUpdateControl == | ||
| Line 4,724: | Line 4,864: | ||
| 0x21 || 0x1 || [20.0.0+] ProperProgramExists. Set to whether the bit for ProperProgramExists is set from [[NCM_services|ncm]] IContentMetaDatabase GetAttributes. | | 0x21 || 0x1 || [20.0.0+] ProperProgramExists. Set to whether the bit for ProperProgramExists is set from [[NCM_services|ncm]] IContentMetaDatabase GetAttributes. | ||
|- | |- | ||
| 0x22 || | | 0x22 || 0x1 || [S2] | ||
|- | |||
| 0x23 || 0xBD || Reserved | |||
|- | |- | ||
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes. Uses a different key than [[#SystemDeliveryInfo]]. | | 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes. Uses a different key than [[#SystemDeliveryInfo]]. | ||