Filesystem services: Difference between revisions
→CreateSaveDataFileSystem: info about struct |
|||
(13 intermediate revisions by 2 users not shown) | |||
Line 15: | Line 15: | ||
== OpenCodeFileSystem == | == OpenCodeFileSystem == | ||
Takes an [[NCM_services#ProgramId|ProgramId]] and a [[#ContentPath]]. Returns an [[#IFileSystem]]. | Takes an [[NCM_services#ProgramId|ProgramId]] and a [[#ContentPath]]. Returns an [[#IFileSystem]]. | ||
[10.0.0+] This now takes an additional type-0x1A output buffer. | |||
== IsArchivedProgram == | == IsArchivedProgram == | ||
Line 35: | Line 37: | ||
| 2 || [4.0.0+] [[#SetCurrentProcess]] | | 2 || [4.0.0+] [[#SetCurrentProcess]] | ||
|- | |- | ||
| 256 || [[#SetEnabledProgramVerification]] | | 256 || [1.0.0-9.2.0] [[#SetEnabledProgramVerification]] | ||
|} | |} | ||
Line 50: | Line 52: | ||
When the flag is zero, it will set ret=0 instead of ret={error} when verifying the fixed-key [[NPDM]] ACID signature fails. This also skips verifying the [[NCA_Format|NCA Header]] signature using the ACID key. Note that if verifying the fixed-key ACID signature is successful, and verifying the ACID-key NCA header signature fails, it will throw an error and abort. | When the flag is zero, it will set ret=0 instead of ret={error} when verifying the fixed-key [[NPDM]] ACID signature fails. This also skips verifying the [[NCA_Format|NCA Header]] signature using the ACID key. Note that if verifying the fixed-key ACID signature is successful, and verifying the ACID-key NCA header signature fails, it will throw an error and abort. | ||
[10.0.0+] This was moved to [[Loader_services|Loader]]. | |||
= fsp-srv = | = fsp-srv = | ||
Line 116: | Line 120: | ||
| 52 || [[#OpenSaveDataFileSystemBySystemSaveDataId]] | | 52 || [[#OpenSaveDataFileSystemBySystemSaveDataId]] | ||
|- | |- | ||
| 53 || [2.0.0+] OpenReadOnlySaveDataFileSystem | | 53 || [2.0.0+] [[#OpenReadOnlySaveDataFileSystem]] | ||
|- | |- | ||
| 57 || [3.0.0+] [[#ReadSaveDataFileSystemExtraDataBySaveDataSpaceId]] | | 57 || [3.0.0+] [[#ReadSaveDataFileSystemExtraDataBySaveDataSpaceId]] | ||
Line 142: | Line 146: | ||
| 69 || [8.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataAttribute | | 69 || [8.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataAttribute | ||
|- | |- | ||
| 70 || [8.0.0+] | | 70 || [8.0.0+] WriteSaveDataFileSystemExtraDataWithMaskBySaveDataAttribute | ||
|- | |||
| 71 || [10.0.0+] ReadSaveDataFileSystemExtraDataWithMaskBySaveDataAttribute | |||
|- | |- | ||
| 80 || OpenSaveDataMetaFile | | 80 || OpenSaveDataMetaFile | ||
Line 155: | Line 161: | ||
|- | |- | ||
| 85 || [9.0.0+] [[#OpenSaveDataTransferManagerForSaveDataRepair]] | | 85 || [9.0.0+] [[#OpenSaveDataTransferManagerForSaveDataRepair]] | ||
|- | |||
| 86 || [10.0.0+] [[#OpenSaveDataMover]] | |||
|- | |- | ||
| 100 || OpenImageDirectoryFileSystem | | 100 || OpenImageDirectoryFileSystem | ||
Line 160: | Line 168: | ||
| 110 || [[#OpenContentStorageFileSystem]] | | 110 || [[#OpenContentStorageFileSystem]] | ||
|- | |- | ||
| 120 || [6.0.0 | | 120 || [6.0.0-9.2.0] [[#OpenCloudBackupWorkStorageFileSystem]] | ||
|- | |- | ||
| 130 || [7.0.0+] [[#OpenCustomStorageFileSystem]] | | 130 || [7.0.0+] [[#OpenCustomStorageFileSystem]] | ||
Line 246: | Line 254: | ||
| 810 || [7.0.0+] RegisterProgramIndexMapInfo | | 810 || [7.0.0+] RegisterProgramIndexMapInfo | ||
|- | |- | ||
| 1000 || SetBisRootForHost | | 1000 || [1.0.0-9.2.0] SetBisRootForHost | ||
|- | |- | ||
| 1001 || [[#SetSaveDataSize]] | | 1001 || [[#SetSaveDataSize]] | ||
Line 273: | Line 281: | ||
|- | |- | ||
| 1013 || [9.0.0+] UnsetSaveDataRootPath | | 1013 || [9.0.0+] UnsetSaveDataRootPath | ||
|- | |||
| 1014 || [10.0.0+] OutputMultiProgramTagAccessLog | |||
|- | |- | ||
| 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey | | 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey | ||
Line 279: | Line 289: | ||
|- | |- | ||
| 1200 || [6.0.0+] [[#OpenMultiCommitManager]] | | 1200 || [6.0.0+] [[#OpenMultiCommitManager]] | ||
|- | |||
| 1300 || [10.0.0+] [[#OpenBisWiper]] | |||
|} | |} | ||
Line 295: | Line 307: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! AccessibilityType || | ! AccessibilityType || Name || Mask || Permission || Used by | ||
|- | |||
| 0x0 || CanMountLogo || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | |||
|- | |||
| 0x1 || CanMountContentMeta || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | |||
|- | |||
| 0x2 || CanMountContentControl || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | |||
|- | |||
| 0x3 || CanMountContentManual || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | |||
|- | |||
| 0x4 || CanMountContentData || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | |||
|- | |||
| 0x5 || CanMountApplicationPackage || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | |||
|- | |||
| 0x6 || CanMountSaveDataStorage || 0x8000000000000000 || RW || | |||
|- | |||
| 0x7 || CanMountContentStorage || 0x8000000000000800 || RW || [[#OpenContentStorageFileSystem]] | |||
|- | |- | ||
| | | 0x8 || CanMountImageAndVideoStorage ||0x8000000000001000 || RW || [[#OpenImageDirectoryFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-5.1.0] 0x9) || || 0x8000000000000084 || || | ||
|- | |- | ||
| | | ([6.0.0-9.2.0] 0x9) || CanMountCloudBackupWorkStorage || 0x8000000200000000 || RW || OpenCloudBackupWorkStorageFileSystem | ||
|- | |- | ||
| | | 0x9 || CanMountCustomStorage0 || 0x8000000000000000 || RW || OpenCustomStorageFileSystem | ||
|- | |- | ||
| | | ([1.0.0-5.1.0] 0xA) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0xA) || || 0x8000000000000084 || || | ||
|- | |- | ||
| | | ([7.0.0-7.0.1] 0xA) || || 0x4000000000000000 || || | ||
|- | |- | ||
| | | ([8.0.0-9.2.0] 0xA) || || 0x8000000000000000 || || | ||
|- | |- | ||
| | | 0xA || CanMountBisCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-5.1.0] 0xB) || || 0x8000000000008080 || || | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0xB) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0xB) || || 0x8000000000000084 || || | ||
|- | |- | ||
| | | 0xB || CanMountBisSafeMode || 0x8000000000000080 || RW || [[#OpenBisFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-6.2.0] 0xC) || || 0x8000000000008080 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0xC) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | 0xC || CanMountBisUser || 0x8000000000008080 || RW || [[#OpenBisFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-5.1.0] 0xD) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | ([6.0.0-9.2.0] 0xD) || || 0x8000000000008080 || || | ||
|- | |- | ||
| | | 0xD || CanMountBisSystem || 0x8000000000008080 || RW || [[#OpenBisFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0xE) || || 0xC000000000200000 || || | ||
|- | |- | ||
| | | ([3.0.0-6.2.0] 0xE) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0xE) || || 0x8000000000008080 || || | ||
|- | |- | ||
| | | 0xE || CanMountBisSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0xF) || || 0x8000000000000010 || || | ||
|- | |- | ||
| | | ([3.0.0-5.1.0] 0xF) || || 0xC000000000200000 || || | ||
|- | |- | ||
| | | ([6.0.0-9.2.0] 0xF) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | 0xF || CanMountBisSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0x10) || || 0x8000000000040020 || || | ||
|- | |- | ||
| | | ([3.0.0-5.1.0] 0x10) || || 0x8000000000000010 || || | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0x10) || || 0xC000000000200000 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0x10) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | 0x10 || CanMountSdCard || 0xC000000000200000 || RW || [[#OpenSdCardFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0x11) || || 0x8000000000000028 || || | ||
|- | |- | ||
| | | ([3.0.0-5.1.0] 0x11) || || 0x8000000000040020 || || | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0x11) || || 0x8000000000000010 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0x11) || || 0xC000000000200000 || || | ||
|- | |- | ||
| | | 0x11 || CanMountGameCard || 0x8000000000000010 || R- || [[#OpenGameCardFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0x12) || || 0x8000000000000020 || || | ||
|- | |- | ||
| | | ([3.0.0-5.1.0] 0x12) || || 0x8000000000000028 || || | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0x12) || || 0x8000000000040020 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0x12) || || 0x8000000000000010 || || | ||
|- | |- | ||
| | | 0x12 || CanMountDeviceSaveData || 0x8000000000040020 || RW || [[#OpenSaveDataFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-5.1.0] 0x13) || || 0x8000000000000020 || || | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0x13) || || 0x8000000000000028 || || | ||
|- | |- | ||
| [7.0.0 | | ([7.0.0-9.2.0] 0x13) || || 0x8000000000040020 || || | ||
|- | |- | ||
| | | 0x13 || CanMountSystemSaveData || 0x8000000000000028 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]] | ||
|- | |- | ||
| ([1.0.0-2.3.0] 0x14) || || 0x8000000000010082 || || | |||
|- | |- | ||
| | | ([3.0.0-6.2.0] 0x14) || || 0x8000000000000020 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0x14) || || 0x8000000000000028 || || | ||
|- | |- | ||
| | | 0x14 || CanMountOthersSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystem]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0x15) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | ([3.0.0-5.1.0] 0x15) || || 0x8000000000010082 || || | ||
|- | |- | ||
| | | ([6.0.0-9.2.0] 0x15) || || 0x8000000000000020 || || | ||
|- | |- | ||
| | | 0x15 || CanMountOthersSystemSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]] | ||
|- | |- | ||
| | | ([1.0.0-5.1.0] 0x16) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0x16) || || 0x8000000000010082 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0x16) || || 0x8000000000000020 || || | ||
|- | |- | ||
| | | 0x16 || CanOpenBisPartitionBootPartition1Root || 0x8000000000010082 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0x17) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | ([3.0.0-5.1.0] 0x17) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0x17) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0x17) || || 0x8000000000010082 || || | ||
|- | |- | ||
| | | 0x17 || CanOpenBisPartitionBootPartition2Root || 0x8000000000010080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-5.1.0] 0x18) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0x18) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0x18) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | 0x18 || CanOpenBisPartitionUserDataRoot || 0x8000000000000080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0x19) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0x19) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | 0x19 || CanOpenBisPartitionBootConfigAndPackage2Part1 || 0x8000000000010080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-9.2.0] 0x1A) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | 0x1A || CanOpenBisPartitionBootConfigAndPackage2Part2 || 0x8000000000010080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-9.2.0] 0x1B) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | 0x1B || CanOpenBisPartitionBootConfigAndPackage2Part3 || 0x8000000000010080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-9.2.0] 0x1C) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | 0x1C || CanOpenBisPartitionBootConfigAndPackage2Part4 || 0x8000000000010080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0x1D) || || 0x8000000000000084 || || | ||
|- | |- | ||
| | | ([3.0.0-9.2.0] 0x1D) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | 0x1D || CanOpenBisPartitionBootConfigAndPackage2Part5 || 0x8000000000010080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-5.1.0] 0x1E) || || 0x8000000000000084 || || | ||
|- | |- | ||
| | | ([6.0.0-9.2.0] 0x1E) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | 0x1E || CanOpenBisPartitionBootConfigAndPackage2Part6 || 0x8000000000010080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-5.1.0] 0x1F) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0x1F) || || 0x8000000000000084 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0x1F) || || 0x8000000000010080 || || | ||
|- | |- | ||
| | | 0x1F || CanOpenBisPartitionCalibrationBinary || 0x8000000000000084 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-5.1.0] 0x20) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | ([6.0.0-9.2.0] 0x20) || || 0x8000000000000084 || || | ||
|- | |- | ||
| | | 0x20 || CanOpenBisPartitionCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([6.0.0-6.2.0] 0x21) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | ([7.0.0-9.2.0] 0x21) || || 0x8000000000000084 || || | ||
|- | |- | ||
| | | 0x21 || CanOpenBisPartitionSafeMode || 0x8000000000000080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-9.2.0] 0x22) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | 0x22 || CanOpenBisPartitionUser || 0x8000000000000080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0x23) || || 0xC000000000200000 || || | ||
|- | |- | ||
| [ | | ([3.0.0-9.2.0] 0x23) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | 0x23 || CanOpenBisPartitionSystem || 0x8000000000000080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| [ | | ([1.0.0-2.3.0] 0x24) || || 0x8000000000000100 || || | ||
|- | |- | ||
| | | ([3.0.0-9.2.0] 0x24) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | 0x24 || CanOpenBisPartitionSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0x25) || || 0x8000000000100008 || || | ||
|- | |- | ||
| | | ([3.0.0-5.1.0] 0x25) || || 0xC000000000200000 || || | ||
|- | |- | ||
| | | ([6.0.0-9.2.0] 0x25) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | 0x25 || CanOpenBisPartitionSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisStorage]] | ||
|- | |- | ||
| | | ([1.0.0-2.3.0] 0x26) || || 0xC000000000400000 || || | ||
|- | |- | ||
| [ | | ([3.0.0-5.1.0] 0x26) || || 0x8000000000000100 || || | ||
|- | |- | ||
| [ | | ([6.0.0-6.2.0] 0x26) || || 0xC000000000200000 || || | ||
|- | |- | ||
| [9. | | ([7.0.0-9.2.0] 0x26) || || 0x8000000000000080 || || | ||
|- | |- | ||
| | | 0x26 || CanOpenSdCardStorage || 0xC000000000200000 || RW || | ||
|- | |- | ||
| [ | | ([3.0.0-5.1.0] 0x27) || || 0x8000000000100008 || || | ||
|- | |- | ||
| [ | | ([6.0.0-6.2.0] 0x27) || || 0x8000000000000100 || || | ||
|- | |- | ||
| [9.0.0+] | | ([7.0.0-9.2.0] 0x27) || || 0xC000000000200000 || || | ||
| | |- | ||
| [3.0.0+] 0x27 || CanOpenGameCardStorage || 0x8000000000000100 || RW || [[#OpenGameCardStorage]], [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1) | |||
|- | |||
| ([3.0.0-5.1.0] 0x28) || || 0xC000000000400000 || || | |||
|- | |||
[2.0.0+] | | ([6.0.0-6.2.0] 0x28) || || 0x8000000000100008 || || | ||
|- | |||
| ([7.0.0-9.2.0] 0x28) || || 0x8000000000000100 || || | |||
|- | |||
| [3.0.0+] 0x28 || CanMountSystemDataPrivate || 0x8000000000100008 || R- || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]] | |||
|- | |||
| ([4.0.0-5.1.0] 0x29) || || 0x8000000000010000 || || | |||
|- | |||
| ([6.0.0-6.2.0] 0x29) || || 0xC000000000400000 || || | |||
|- | |||
| ([7.0.0-9.2.0] 0x29) || || 0x8000000000100008 || || | |||
|- | |||
| [4.0.0+] 0x29 || CanMountHost || 0xC000000000400000 || RW || [[#OpenHostFileSystem]] | |||
|- | |||
| ([5.0.0-5.1.0] 0x2A) || || 0x8000000000000000 || || | |||
|- | |||
| ([6.0.0-6.2.0] 0x2A) || || 0x8000000000010000 || || | |||
|- | |||
| ([7.0.0-9.2.0] 0x2A) || || 0xC000000000400000 || || | |||
|- | |||
| [5.0.0+] 0x2A || CanMountRegisteredUpdatePartition || 0x8000000000010000 || R- || [[#OpenRegisteredUpdatePartition]] | |||
|- | |||
| ([6.0.0-6.2.0] 0x2B) || || 0x8000000000000000 || || | |||
|- | |||
| ([7.0.0-9.2.0] 0x2B) || || 0x8000000000010000 || || | |||
|- | |||
| [6.0.0+] 0x2B || CanOpenSaveDataInternalStorage || 0x8000000000000000 || RW || [[#OpenSaveDataInternalStorageFileSystem]] | |||
|- | |||
| ([7.0.0-9.2.0] 0x2C) || || 0x8000000000000000 || || | |||
|- | |||
| [7.0.0+] 0x2C || CanNotMount || 0x0000000000000000 || -- || OpenCustomStorageFileSystem | |||
|- | |||
| ([7.0.0-9.2.0] 0x2D) || || 0x0000000000000000 || || | |||
|} | |||
== | === Call === | ||
{| class="wikitable" border="1" | |||
|- | |||
! OperationType || Name || Mask || Used by | |||
|- | |||
| 0x0 || CanInvalidateBisCache || 0x8000000000000080 || [[#InvalidateBisCache]] | |||
|- | |||
| 0x1 || CanEraseMmc || 0x8000000000000080 || EraseMmc | |||
|- | |||
| 0x2 || CanGetGameCardDeviceCertificate || 0x8000000000000010 || GetGameCardDeviceCertificate | |||
|- | |||
| 0x3 || CanGetGameCardIdSet || 0x8000000000000010 || GetGameCardIdSet | |||
|- | |||
| 0x4 || CanFinalizeGameCardDriver || 0x8000000000000200 || FinalizeGameCardDriver | |||
|- | |||
| 0x5 || CanGetGameCardAsicInfo || 0x8000000000000200 || GetGameCardAsicInfo | |||
|- | |||
| 0x6 || CanCreateSaveData || 0x8000000000002020 || [[#CreateSaveDataFileSystem]] | |||
|- | |||
| 0x7 || CanDeleteSaveData || 0x8000000000000060 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion | |||
|- | |||
| 0x8 || CanCreateSystemSaveData || 0x8000000000000028 || CreateSaveDataFileSystemBySystemSaveDataId | |||
|- | |||
| 0x9 || CanCreateOthersSystemSaveData || 0x8000000000000020 || CreateSaveDataFileSystemBySystemSaveDataId | |||
|- | |||
| 0xA || CanDeleteSystemSaveData || 0x8000000000004028 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion | |||
|- | |||
| 0xB || CanOpenSaveDataInfoReader || 0x8000000000000060 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | |||
|- | |||
| 0xC || CanOpenSaveDataInfoReaderForSystem || 0x8000000000004020 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | |||
|- | |||
| ([1.0.0-5.1.0] 0xD) || || 0x8000000000020000 || | |||
|- | |||
| 0xD || CanOpenSaveDataInfoReaderForInternal || 0x8000000000000040 || [[#OpenSaveDataInfoReaderWithFilter]] | |||
|- | |||
| ([1.0.0-5.1.0] 0xE) || || 0x8000000000000400 || | |||
|- | |||
| 0xE || CanOpenSaveDataMetaFile || 0x8000000000020000 || OpenSaveDataMetaFile | |||
|- | |||
| ([1.0.0-5.1.0] 0xF) || || 0x8000000000004060 || | |||
|- | |||
| 0xF || CanSetCurrentPosixTime || 0x8000000000000400 || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference | |||
|- | |||
| ([1.0.0-5.1.0] 0x10) || || 0x8000000000080000 || | |||
|- | |||
| 0x10 || CanReadSaveDataFileSystemExtraData || 0x8000000000004060 || [[#ReadSaveDataFileSystemExtraData]] | |||
|- | |||
| 0x11 || CanSetGlobalAccessLogMode || 0x8000000000080000 || [[#SetGlobalAccessLogMode]] | |||
|- | |||
| ([1.0.0-5.1.0] 0x12) || CanDebug || 0xC000000000000000 || | |||
|- | |||
| 0x12 || CanSetSpeedEmulationMode || 0x8000000000080000 || SetSpeedEmulationMode | |||
|- | |||
| ([1.0.0-5.1.0] 0x13) || || 0xC000000000800000 || | |||
|- | |||
| 0x13 || CanDebug || 0xC000000000000000 || | |||
|- | |||
| ([1.0.0-5.1.0] 0x14) || || 0xC000000001000000 || | |||
|- | |||
| 0x14 || CanFillBis || 0xC000000000800000 || CreatePaddingFile, DeleteAllPaddingFiles | |||
|- | |||
| ([1.0.0-4.1.0] 0x15) || || 0xC000000002000000 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x15) || || 0x8000000001000060 || | |||
|- | |||
| 0x15 || CanCorruptSaveData || 0xC000000001000000 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId | |||
|- | |||
| ([2.0.0-4.1.0] 0x16) || || 0x8000000004000000 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x16) || || 0x8000000000000060 || | |||
|- | |||
| [2.0.0+] 0x16 || CanCorruptSystemSaveData || 0x8000000001000060 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId | |||
|- | |||
| ([2.0.0-4.1.0] 0x17) || || 0x8000000008000000 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x17) || || 0xC000000002000000 || | |||
|- | |||
| [2.0.0+] 0x17 || CanVerifySaveData || 0x8000000000000060 || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId | |||
|- | |||
| ([2.0.0-4.1.0] 0x18) || || 0x8000000010000000 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x18) || || 0x8000000004000000 || | |||
|- | |||
| [2.0.0+] 0x18 || CanDebugSaveData || 0xC000000002000000 || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]] | |||
|- | |||
| ([2.0.0-4.1.0] 0x19) || || 0x8000000000000800 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x19) || || 0x8000000008000000 || | |||
|- | |||
| [2.0.0+] 0x19 || CanFormatSdCard || 0x8000000004000000 || FormatSdCardFileSystem | |||
|- | |||
| ([2.0.0-4.1.0] 0x1A) || || 0x8000000000004020 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x1A) || || 0x8000000010000000 || | |||
|- | |||
| [2.0.0+] 0x1A || CanGetRightsId || 0x8000000008000000 || GetRightsId, GetRightsIdAndKeyGenerationByPath, GetRightsIdByPath | |||
|- | |||
| ([3.0.0-4.1.0] 0x1B) || || 0x8000000000002020 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x1B) || || 0x8000000000000800 || | |||
|- | |||
| [3.0.0+] 0x1B || CanRegisterExternalKey || 0x8000000010000000 || RegisterExternalKey, UnregisterAllExternalKey | |||
|- | |||
| ([3.0.0-4.1.0] 0x1C) || || 0x8000000000000028 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x1C) || || 0x8000000000004020 || | |||
|- | |||
| [3.0.0+] 0x1C || CanSetEncryptionSeed || 0x8000000000000800 || [[#SetSdCardEncryptionSeed]] | |||
|- | |||
| ([4.0.0-4.1.0] 0x1D) || || 0x8000000020000000 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x1D) || || 0x8000000000000000 || | |||
|- | |||
| [4.0.0+] 0x1D || CanWriteSaveDataFileSystemExtraDataTimeStamp || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | |||
|- | |||
| ([4.0.0-4.1.0] 0x1E) || || 0x8000000040000000 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x1E) || || 0x8000000000002020 || | |||
|- | |||
| [4.0.0+] 0x1E || CanWriteSaveDataFileSystemExtraDataFlags || 0x8000000000004020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | |||
|- | |||
| ([4.0.0-4.1.0] 0x1F) || || 0x8000000000000000 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x1F) || || 0x8000000000000028 || | |||
|- | |||
| [4.0.0+] 0x1F || CanWriteSaveDataFileSystemExtraDataCommitId || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | |||
|- | |||
| ([4.0.0-4.1.0] 0x20) || || 0x8000000000000000 || | |||
|- | |||
| ([5.0.0-5.1.0] 0x20) || || 0x8000000020000000 || | |||
|- | |||
| [4.0.0+] 0x20 || CanWriteSaveDataFileSystemExtraDataAll || 0x8000000000000000 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask | |||
|- | |||
| ([5.0.0-5.1.0] 0x21) || || 0x8000000040000000 || | |||
|- | |||
| [5.0.0+] 0x21 || CanExtendSaveData || 0x8000000000002020 || ExtendSaveDataFileSystem | |||
|- | |||
| ([5.0.0-5.1.0] 0x22) || || 0x0000000080000002 || | |||
|- | |||
| [5.0.0+] 0x22 || CanExtendSystemSaveData || 0x8000000000000028 || ExtendSaveDataFileSystem | |||
|- | |||
| ([5.0.0-5.1.0] 0x23) || || 0x8000000000000000 || | |||
|- | |||
| ([6.0.0-9.2.0] 0x23) || || 0x8000000020000000 || | |||
|- | |||
| [5.0.0+] 0x23 || CanExtendOthersSystemSaveData || 0x8000000000000020 || ExtendSaveDataFileSystem | |||
|- | |||
| ([5.0.0-5.1.0] 0x24) || || 0x8000000000000000 || | |||
|- | |||
| ([6.0.0-9.2.0] 0x24) || || 0x8000000040000000 || | |||
|- | |||
| [5.0.0+] 0x24 || CanRegisterUpdatePartition || 0x8000000020000000 || RegisterUpdatePartition | |||
|- | |||
| ([5.0.0-5.1.0] 0x25) || || 0x8000000080200000 || | |||
|- | |||
| ([6.0.0-9.2.0] 0x25) || || 0x8000000200000000 || | |||
|- | |||
| [5.0.0+] 0x25 || CanOpenSaveDataTransferManager || 0x8000000040000000 || [[#OpenSaveDataTransferManager]] | |||
|- | |||
| ([5.0.0-5.1.0] 0x26) || || 0x8000000080000110 || | |||
|- | |||
| ([6.0.0-8.1.0] 0x26) || || 0x8000000200002000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x26) || || 0x8000000200000000 || | |||
|- | |||
| [5.0.0+] 0x26 || CanOpenSaveDataTransferManagerVersion2 || 0x8000000200000000 || [[#OpenSaveDataTransferManagerVersion2]] | |||
|- | |||
| ([5.0.0-5.1.0] 0x27) || || 0x8000000000100008 || | |||
|- | |||
| ([6.0.0-7.0.1] 0x27) || || 0x8000000200002000 || | |||
|- | |||
| ([8.0.0-8.1.0] 0x27) || || 0x8000000240002000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x27) || || 0x8000000000000000 || | |||
|- | |||
| [5.0.0+] 0x27 || CanOpenSaveDataTransferManagerForSaveDataRepair || 0x8000000200000000 || OpenSaveDataTransferManagerForSaveDataRepair | |||
|- | |||
| ([5.0.0-5.1.0] 0x28) || || 0x8000000080010000 || | |||
|- | |||
| ([6.0.0-8.1.0] 0x28) || || 0x8000000000000000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x28) || || 0x8000000200002000 || | |||
|- | |||
| [5.0.0+] 0x28 || CanOpenSaveDataTransferManagerForSaveDataRepairTool || 0x8000000000000000 || OpenSaveDataTransferManagerForSaveDataRepair | |||
|- | |||
| ([5.0.0-5.1.0] 0x29) || || 0x0000000080000001 || | |||
|- | |||
| ([6.0.0-8.1.0] 0x29) || || 0x8000000000000000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x29) || || 0x8000000240002000 || | |||
|- | |||
| [5.0.0+] 0x29 || CanOpenOpenSaveDataTransferProhibiter || 0x8000000200002000 || [[#OpenSaveDataTransferProhibiter]] | |||
|- | |||
| ([5.0.0-5.1.0] 0x2A) || || 0x0000000080000001 || | |||
|- | |||
| ([6.0.0-8.1.0] 0x2A) || || 0x8000000080200000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x2A) || || 0x8000000000000000 || | |||
|- | |||
| [5.0.0+] 0x2A || CanOpenSaveDataMover || 0x8000001000000000 || [[#OpenSaveDataMover]] | |||
|- | |||
| ([5.0.0-5.1.0] 0x2B) || || 0x0000000080000001 || | |||
|- | |||
| ([6.0.0-8.1.0] 0x2B) || || 0x8000000080000110 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x2B) || || 0x8000000000000000 || | |||
|- | |||
| [5.0.0+] 0x2B || CanOpenBisWiper || 0x8000000000000800 || [[#OpenBisWiper]] | |||
|- | |||
| ([5.0.0-5.1.0] 0x2C) || || 0x0000000080000001 || | |||
|- | |||
| ([6.0.0-8.1.0] 0x2C) || || 0x8000000000100008 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x2C) || || 0x8000000080200000 || | |||
|- | |||
| [5.0.0+] 0x2C || CanListAccessibleSaveDataOwnerId || 0x8000000240002000 || [[#ListAccessibleSaveDataOwnerId]] | |||
|- | |||
| ([5.0.0-5.1.0] 0x2D) || || 0x0000000080000001 || | |||
|- | |||
| ([6.0.0-8.1.0] 0x2D) || || 0x8000000000010000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x2D) || || 0x8000000080000110 || | |||
|- | |||
| [5.0.0+] 0x2D || CanControlMmcPatrol || 0x8000000000000000 || SuspendMmcPatrol, ResumeMmcPatrol | |||
|- | |||
| ([5.0.0-5.1.0] 0x2E) || || 0x8000000040000000 || | |||
|- | |||
| ([6.0.0-8.1.0] 0x2E) || || 0x8000000100000000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x2E) || || 0x8000000000100008 || | |||
|- | |||
| [5.0.0+] 0x2E || CanOverrideSaveDataTransferTokenSignVerificationKey || 0x8000000000000000 || OverrideSaveDataTransferTokenSignVerificationKey | |||
|- | |||
| ([5.0.0-5.1.0] 0x2F) || || 0x8000000080200000 || | |||
|- | |||
| ([6.0.0-8.1.0] 0x2F) || || 0x8000000100000000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x2F) || || 0x8000000000010000 || | |||
|- | |||
| [5.0.0+] 0x2F || CanOpenSdCardDetectionEventNotifier || 0x8000000080200000 || [[#OpenSdCardDetectionEventNotifier]] | |||
|- | |||
| ([5.1.0-6.0.0] 0x30) || || 0x8000000080080000 || | |||
|- | |||
| ([6.0.1-9.2.0] 0x30) || || 0x8000000100000000 || | |||
|- | |||
| [5.1.0+] 0x30 || CanOpenGameCardDetectionEventNotifier || 0x8000000080000110 || [[#OpenGameCardDetectionEventNotifier]] | |||
|- | |||
| ([6.0.0-9.2.0] 0x31) || || 0x8000000100000000 || | |||
|- | |||
| [6.0.0+] 0x31 || CanOpenSystemDataUpdateEventNotifier || 0x8000000000100008 || OpenSystemDataUpdateEventNotifier | |||
|- | |||
| ([6.0.0-9.2.0] 0x32) || || 0x8000000100000000 || | |||
|- | |||
| [6.0.0+] 0x32 || CanNotifySystemDataUpdateEvent || 0x8000000000010000 || NotifySystemDataUpdateEvent | |||
|- | |||
| ([6.0.0-8.1.0] 0x33) || || 0x8000000040000000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x33) || || 0x8000000100000000 || | |||
|- | |||
| [6.0.0+] 0x33 || CanOpenAccessFailureDetectionEventNotifier || 0x8000000100000000 || [[#OpenAccessFailureDetectionEventNotifier]] | |||
|- | |||
| ([6.0.0-8.1.0] 0x34) || || 0x8000000200000020 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x34) || || 0x8000000100000000 || | |||
|- | |||
| [6.0.0+] 0x34 || CanGetAccessFailureDetectionEvent || 0x8000000100000000 || GetAccessFailureDetectionEvent | |||
|- | |||
| ([6.0.0-8.1.0] 0x35) || || 0x8000000000200000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x35) || || 0x8000000040000000 || | |||
|- | |||
| [6.0.0+] 0x35 || CanIsAccessFailureDetected || 0x8000000100000000 || IsAccessFailureDetected | |||
|- | |||
| ([6.0.0-8.1.0] 0x36) || || 0x4000000000000000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x36) || || 0x8000000200000020 || | |||
|- | |||
| [6.0.0+] 0x36 || CanResolveAccessFailure || 0x8000000100000000 || ResolveAccessFailure | |||
|- | |||
| ([6.0.0-6.2.0] 0x37) || || 0x8000000000080000 || | |||
|- | |||
| ([7.0.0-8.1.0] 0x37) || || 0x8000000000000000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x37) || || 0x8000000000200000 || | |||
|- | |||
| [6.0.0+] 0x37 || CanAbandonAccessFailure || 0x8000000100000000 || AbandonAccessFailure | |||
|- | |||
| ([6.0.0-6.2.0] 0x38) || || 0x8000000000000000 || | |||
|- | |||
| ([7.0.0-8.1.0] 0x38) || || 0x8000000400000000 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x38) || || 0x4000000000000000 || | |||
|- | |||
| [6.0.0+] 0x38 || CanQuerySaveDataInternalStorageTotalSize || 0x8000000040000000 || QuerySaveDataInternalStorageTotalSize | |||
|- | |||
| ([8.0.0-8.1.0] 0x39) || || 0x8000000000000010 || | |||
|- | |||
| ([9.0.0-9.2.0] 0x39) || || 0x8000000000000000 || | |||
|- | |||
| [8.0.0+] 0x39 || CanGetSaveDataCommitId || 0x8000000200000020 || [[#GetSaveDataCommitId]] | |||
|- | |||
| ([9.0.0-9.2.0] 0x3A) || || 0x8000000400000000 || | |||
|- | |||
| [9.0.0+] 0x3A || CanSetSdCardAccessibility || 0x8000000000200000 || SetSdCardAccessibility | |||
|- | |||
| ([9.0.0-9.2.0] 0x3B) || || 0x8000000000000010 || | |||
|- | |||
| [9.0.0+] 0x3B || CanSimulateDevice || 0x4000000000000000 || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent | |||
|- | |||
| ([9.0.0-9.2.0] 0x3C) || || 0x8000000800000000 || | |||
|- | |||
| [9.0.0+] 0x3C || CanCreateSaveDataWithHashSalt || 0x8000000000000000 || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]] | |||
|- | |||
| ([9.0.0-9.2.0] 0x3D) || || 0x8000000800000000 || | |||
|- | |||
| [9.0.0+] 0x3D || CanRegisterProgramIndexMapInfo || 0x8000000400000000 || RegisterProgramIndexMapInfo | |||
|- | |||
| ([9.0.0-9.2.0] 0x3E) || || 0x8000000800000000 || | |||
|- | |||
| [9.0.0+] 0x3E || CanChallengeCardExistence || 0x8000000000000010 || ChallengeCardExistence | |||
|- | |||
| ([9.0.0-9.2.0] 0x3F) || || 0x8000000800000000 || | |||
|- | |||
| [9.0.0+] 0x3F || CanCreateOwnSaveData || 0x8000000800000000 || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt | |||
|- | |||
| ([9.0.0-9.2.0] 0x40) || || 0x8000000800000000 || | |||
|- | |||
| [9.0.0+] 0x40 || CanReadOwnSaveDataFileSystemExtraData || 0x8000000800000000 || [[#ReadSaveDataFileSystemExtraData]] | |||
|- | |||
| [10.0.0+] 0x41 || CanExtendOwnSaveData || 0x8000000800000000 || ExtendSaveDataFileSystem | |||
|- | |||
| [10.0.0+] 0x42 || CanOpenOwnSaveDataTransferProhibiter || 0x8000000800000000 || [[#OpenSaveDataTransferProhibiter]] | |||
|- | |||
| [10.0.0+] 0x43 || CanFindOwnSaveDataWithFilter || 0x8000000800000000 || [[#FindSaveDataWithFilter]] | |||
|} | |||
== | == OpenFileSystem == | ||
Takes | Takes a type-0x19 input [[#ContentPath]] and a [[#FileSystemProxyType]] as parameters. Returns an [[#IFileSystem]]. | ||
[2.0.0+] This function was removed. | |||
== SetCurrentProcess == | |||
Takes a pid-descriptor. | |||
== | == OpenFileSystemWithPatch == | ||
Takes | Takes an input [[#FileSystemProxyType]] and an u64 title-id. Returns an [[#IFileSystem]]. | ||
[ | Web-applet loads the [[#FileSystemProxyType]] (which must be '''Manual''') from u32_table[inparam]. | ||
Note: web-applet strings refer to both this cmd and [[#OpenFileSystemWithId]] as "MountContent", but official nn_sf_sync symbols use "OpenXX" names. | |||
== OpenFileSystemWithId == | |||
Takes a type-0x19 input buffer, an [[#FileSystemProxyType]] and an u64 title-id. Returns an [[#IFileSystem]]. | |||
The [[#IFileSystem]] must be '''Meta''' if the NCA type is 0. | |||
The input buffer is the output string path from [[NS_Services#GetApplicationContentPath|GetApplicationContentPath]]. | |||
May return errors when attempting to access NCA-paths for an update-title with a gamecard, when the gamecard isn't inserted. May return error 0x7D402 in some cases with update-titles. Non-val2 in32 values with NCA-type1 are unusable, even for normal titles. | |||
= | The official "MountApplicationPackage" func uses this with in64=0 and [[#FileSystemProxyType]] '''Package'''. | ||
After the [[#FileSystemProxyType]] specific permissions are checked, it then gets the func retval for permissions-type 0x25 and func0. | |||
= | When [[#FileSystemProxyType]] is '''Meta''', it uses in64=0xffffffffffffffff internally, otherwise it checks if in64 is set to 0xffffffffffffffff then throws an error if so. When the in64 used internally is not 0xffffffffffffffff, it's compared with the NCA [[NCM_services#ProgramId|ProgramId]], then an error is thrown on mismatch. | ||
== OpenBisFileSystem == | |||
Takes a type-0x19 input buffer string and a [[#BisPartitionId]]. Official user-process code sets instr[0] = 0 normally. Returns an [[#IFileSystem]]. | |||
Only partitionIDs for FAT partitions are usable with this, otherwise error 0x2EE202 is returned. Seems to be about the same as [[#OpenBisStorage]] except this mounts the partition filesystem instead of allowing direct access to the partition sectors. | |||
== OpenBisStorage == | |||
Takes a u32 partition ID, returns 0x2EE202 for partitions which do not exist, 0x320002 for partitions which cannot be opened and a valid [[#IStorage]] handle otherwise. | |||
== InvalidateBisCache == | |||
Seems to invalidate the Bis cache for MBR/GPT after overwriting that data via the OpenBisStorage IStorage. Used by [[SystemInitializer]]. | |||
== DeleteSaveDataFileSystem == | |||
Takes an input u64. | |||
== CreateSaveDataFileSystem == | |||
Takes a 0x40-byte [[#SaveDataAttribute]], a 0x40-byte [[#SaveDataCreationInfo]], and a 0x10-byte input struct which governs creation of a saveMeta file. | |||
== | Only the first 0x5-bytes in the 0x10-byte struct are initialized: all-zero when automatically creating savedata during savecommon mount by official user-processes. In the dedicated save-creation code in official user-processes: +0 u32 = 0x40060 meta file size, +4 u8 = 1 meta index which dictates meta file name. | ||
Creates non-system savedata. | |||
== CreateSaveDataFileSystemBySystemSaveDataId == | |||
Takes a 0x40-byte [[#SaveDataAttribute]] and a 0x40-byte [[#SaveDataCreationInfo]]. | |||
Creates savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition. | |||
== | == OpenGameCardStorage == | ||
Takes two input u32s (gamecard handle, partition ID), and returns an [[#IStorage]] for the [[Gamecard_Format|partition]]. | |||
= | == OpenGameCardFileSystem == | ||
Takes two input u32s, with the second u32 located at +4 in rawdata after the first u32. Returns an [[#IFileSystem]]. | |||
Mounts a [[Gamecard_Partition|gamecard partition]]. | |||
== CreateSaveDataFileSystemWithHashSalt == | |||
Takes a total of 0xB0-bytes of input, no output. | |||
== | == OpenSaveDataFileSystem == | ||
Takes a | Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]]. Official user-process code is only known to use value 1 for the u8. | ||
Returns an [[#IFileSystem]]. | |||
Permissions aren't checked until the specified save is successfully found. | |||
Only one process (specifically only one [[#IFileSystem]] session) can mount a given savedata at any given time (this includes SystemSaveData). | |||
== | == OpenSaveDataFileSystemBySystemSaveDataId == | ||
Returns | Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]]. Web-applet only uses value0 for the input u8. | ||
Returns an [[#IFileSystem]]. | |||
Mounts savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition. | |||
== OpenReadOnlySaveDataFileSystem == | |||
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]], and returns an [[#IFileSystem]]. | |||
Mounts SaveData as ReadOnly. | |||
== ReadSaveDataFileSystemExtraDataBySaveDataSpaceId == | |||
Takes an input u8 [[#SaveDataSpaceId]], an input u64 saveID, and a type-0x6 output buffer containing the [[#SaveDataFileSystemExtraData]]. | |||
== ReadSaveDataFileSystemExtraData == | |||
Takes an input u64 saveID and a type-0x6 output buffer containing the [[#SaveDataFileSystemExtraData]]. | |||
== OpenSaveDataInfoReader == | |||
No input, returns an output [[#ISaveDataInfoReader]]. | |||
== OpenSaveDataInfoReaderBySaveDataSpaceId == | |||
Takes an input u8 [[#SaveDataSpaceId]], returns an output [[#ISaveDataInfoReader]]. | |||
== FindSaveDataWithFilter == | |||
Takes a total of 0x50-bytes of input, returns 8-bytes of output and a type-0x6 output buffer. | |||
== OpenSaveDataInfoReaderWithFilter == | |||
Takes a total of 0x50-bytes of input, returns an [[#ISaveDataInfoReader]]. | |||
== OpenSaveDataTransferManager == | |||
No input, returns an [[#ISaveDataTransferManager]]. | |||
== OpenSaveDataTransferManagerVersion2 == | |||
No input, returns an [[#ISaveDataTransferManagerWithDivision]]. | |||
== OpenSaveDataTransferProhibiter == | |||
Takes an input u64, returns an [[#ISaveDataTransferProhibiter]]. | |||
== | == ListAccessibleSaveDataOwnerId == | ||
Takes a | Takes a total of 0x10-bytes of input, returns 4-bytes of output and a type-0x6 output buffer. | ||
== | == OpenSaveDataTransferManagerForSaveDataRepair == | ||
No input, returns an output [[#ISaveDataTransferManagerForSaveDataRepair]]. | |||
== OpenSaveDataMover == | |||
Takes 2 input [[#SaveDataSpaceId]], an input u64 size and a TransferMemory handle. Returns an output [[#ISaveDataMover]]. | |||
== | == OpenContentStorageFileSystem == | ||
Takes a | Takes a [[#ContentStorageId]]. Invalid values return 0x2EE202. | ||
Returns an [[#IFileSystem]] with NCA files. The read data from these files is identical to the data read by [[NCM_services#ReadContentIdFile]]. | |||
== | == OpenCloudBackupWorkStorageFileSystem == | ||
Takes | Takes 4-bytes of input, returns an [[#IFileSystem]]. | ||
== | == OpenCustomStorageFileSystem == | ||
Takes a | Takes a [[#CustomStorageId]]. Invalid values return 0x2EE202. | ||
Returns an [[#IFileSystem]] from either User:/CustomStorage0 or Sdcard:/Nintendo/CustomStorage0. If on the SD card, an AesXtsFileSystem is created using a key source specifically for custom storage. | |||
== | == OpenDataStorageByDataId == | ||
Takes a | Takes a [[NCM_services#StorageId|StorageID]] and a [[NCM_services#DataId|DataId]]. | ||
Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives. | |||
== OpenDataFileSystemWithProgramIndex == | |||
Takes an input u8, returns an [[#IFileSystem]]. | |||
== | == OpenDataStorageWithProgramIndex == | ||
Takes | Takes an input u8, returns an [[#IStorage]]. | ||
== OpenDeviceOperator == | |||
This command returns a session to a port implementing the [[#IDeviceOperator]] interface. | |||
== | == OpenSdCardDetectionEventNotifier == | ||
This command returns a session to a port implementing the [[#IEventNotifier]] interface. | |||
= | == OpenGameCardDetectionEventNotifier == | ||
This | This command returns a session to a port implementing the [[#IEventNotifier]] interface. | ||
== SimulateDeviceDetectionEvent == | |||
Takes a total of 0xC-bytes of input, no output. | |||
= | == VerifySaveDataFileSystem == | ||
Takes an unknown input u64 and a type-0x6 output buffer. | |||
The input u64 high-byte must be non-zero, otherwise an [[Error_codes|error]] is returned(0xE02). | |||
== GetSaveDataCommitId == | |||
Takes an input u8 and u64, returns an output u64. | |||
== SetSdCardEncryptionSeed == | |||
Takes in the 0x10 byte SD card encryption seed, and loads it into FS-module state. | |||
[[NS_Services|NS]]-module reads the 0x10 bytes from SdCard:/Nintendo/Contents/private, and compares them to the first 0x10 bytes of the ns_appman:/private (in [[Flash_Filesystem#System_Savegames|system savedata]] 0x8000000000000043). If they match, NS calls this command using bytes 0x10-0x20 from ns_appman:/private. The rest of this file (0x1F0 bytes total) is (usually/always?) all-zero (however in some cases the byte at offset 0x20 is value 0x1). | |||
|- | |||
|- | |||
= | == OpenAccessFailureDetectionEventNotifier == | ||
Takes 8-bytes of input and returns an [[#IEventNotifier]]. | |||
[8.0.0+] Now takes an additional 8-bytes of input. | |||
= | == SetSaveDataSize == | ||
Takes two input u64s "size" and "journal_size", and writes them to fsp-srv object member variables. | |||
These variables are normally initialized with 32 MiB (0x2000000) and 16 MiB (0x1000000), respectively. | |||
These variables don't seem to be actually used anywhere else (?) | |||
This is | == SetSaveDataRootPath == | ||
Takes an input path, and does snprintf(<fsp-srv object>->m_save_data_root_path, FS_MAX_PATH-1, "/%s", input_path); | |||
This path is normally all-zero. When this path is non-zero, the internal OpenSaveDataFileSystem function will create a DirectorySaveDataFileSystem if the target save is a user-save + a directory exists, instead of the normal savedata filesystem object. | |||
== SetGlobalAccessLogMode == | |||
Takes an input u32. | |||
== SetGlobalAccessLogMode == | |||
Takes an input u32. | |||
= | == GetGlobalAccessLogMode == | ||
Returns an output u32. | |||
GlobalAccessLogMode is normally 0. | |||
== OutputAccessLogToSdCard == | |||
Takes a type-0x5 input buffer. | |||
The input buffer is the string to output to the log. User-processes normally include a newline at the end. | |||
User-processes only use this when the value previously loaded from [[#GetGlobalAccessLogMode]] has bit1 set. | |||
When bit1 in GlobalAccessLogMode is clear, FS-module will just return 0 for OutputAccessLogToSdCard. However even with that set the log doesn't show up SD, unknown why. | |||
The input buffer is written to the "$FsAccessLog:/FsAccessLog.txt" file, where "$FsAccessLog" is the SD-card mount-name. It's written to the current end of the file(appended). | |||
== GetProgramIndexForAccessLog == | |||
No input, returns two 32-bit values "version" and "program_index". | |||
== OpenMultiCommitManager == | |||
No input, returns an output [[#IMultiCommitManager]]. | |||
== OpenBisWiper == | |||
Takes an input u64 size and a TransferMemory handle. Returns an output [[#IWiper]]. | |||
= IStorage = | |||
This is "nn::fssrv::sf::IStorage". | |||
This is the interface for a raw device, usually a block device. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#Read]] | ||
|- | |- | ||
| | | 1 || [[#Write]] | ||
|- | |- | ||
| | | 2 || [[#Flush]] | ||
|- | |- | ||
| | | 3 || [[#SetSize]] | ||
|- | |- | ||
| | | 4 || [[#GetSize]] | ||
|- | |- | ||
| | | 5 || [4.0.0+] OperateRange | ||
|- | |} | ||
== Read == | |||
Takes a type-0x46 buffer, an offset and length. | |||
== Write == | |||
Takes a type-0x45 buffer, an offset and length. | |||
== Flush == | |||
No input. | |||
== SetSize == | |||
Takes a size. | |||
== GetSize == | |||
Returns a size. | |||
= IFileSystem = | |||
This is "nn::fssrv::sf::IFileSystem". | |||
| | |||
There are two main implementations of this interface: | |||
* '''nn::fs::fsa::IFileSystem''': The main IFileSystem implementation. Filesystem classes implement this interface, and FS code usually operates on this interface. | |||
* '''nn::fssrv::sf::IFileSystem''': Used for sending an IFileSystem over IPC. Not used outside of IPC code. | |||
There are two adapter classes to convert between these interfaces: | |||
* '''nn::fssrv::detail::FileSystemInterfaceAdapter''': Allows access to an nn::fs::fsa::IFileSystem via the nn::fssrv::sf::IFileSystem interface. | |||
* '''nn::fs::detail::FileSystemServiceObjectAdapter''': Allows access to an nn::fssrv::sf::IFileSystem via the nn::fs::fsa::IFileSystem interface. | |||
When the FS process returns a filesystem, it will wrap the filesystem object in a FileSystemInterfaceAdapter to return it over IPC. | |||
Then when FS application code receives that filesystem, it will wrap the nn::fssrv::sf::IFileSystem object in a FileSystemServiceObjectAdapter before using it. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || CreateFile | ||
|- | |- | ||
| | | 1 || DeleteFile | ||
|- | |- | ||
| | | 2 || CreateDirectory | ||
|- | |- | ||
| | | 3 || DeleteDirectory | ||
|- | |- | ||
| | | 4 || DeleteDirectoryRecursively | ||
|- | |- | ||
| | | 5 || RenameFile | ||
|- | |- | ||
| | | 6 || RenameDirectory | ||
|- | |- | ||
| | | 7 || [[#GetEntryType]] | ||
|- | |- | ||
| | | 8 || [[#OpenFile]] | ||
|- | |- | ||
| | | 9 || [[#OpenDirectory]] | ||
|- | |- | ||
| | | 10 || [[#Commit]] | ||
|- | |- | ||
| | | 11 || [[#GetFreeSpaceSize]] | ||
|- | |- | ||
| | | 12 || [[#GetTotalSpaceSize]] | ||
|- | |- | ||
| | | 13 || [3.0.0+] [[#CleanDirectoryRecursively]] | ||
|- | |- | ||
| | | 14 || [3.0.0+] [[#GetFileTimeStampRaw]] | ||
|- | |- | ||
| | | 15 || [4.0.0+] QueryEntry | ||
|} | |||
|} | |||
== | == GetEntryType == | ||
Takes a type-0x9 input buffer for the path and returns [[#DirectoryEntryType]] as an output u32. | |||
== | == OpenFile == | ||
Takes a type-0x19 input buffer for the path, and an u32 '''mode'''. '''mode''' controls how the file is opened, based on which bits are set: | |||
* When bit 0 is set, the file is Readable: you can use the Read operation. | |||
* When bit 1 is set, the file is Writable: you can use the Write operation. | |||
* When bit 2 is set, the file is Appendable: unless this bit is set, you will not be able to write beyond the end of a file (such writes will result in an error 0x307202) | |||
== OpenDirectory == | |||
Takes a type-0x9 input buffer for the path and an u64 '''filter_flags'''. '''filter_flags''' controls what type of entries are read by the [[#IDirectory]]: bitmask 0x1 = directories, bitmask 0x2 = files. | |||
[ | == Commit == | ||
Like [https://3dbrew.org/wiki/FS:ControlArchive 3DS], this has to be used after writing to savedata for the changes to take affect. | |||
== | == GetFreeSpaceSize == | ||
Takes a type- | Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total free space with this FS. | ||
== | == GetTotalSpaceSize == | ||
Takes a type- | Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total space available with this FS(free+used). | ||
== CleanDirectoryRecursively == | |||
Takes a type-0x9 input buffer for the path and clears the contents of the directory specified in the path. | |||
== | == GetFileTimeStampRaw == | ||
Takes | Takes a type-0x19 input buffer for the path and returns a 0x20-byte struct. This contains 3 u64s and an u8. | ||
= | = IDirectory = | ||
This is "nn::fssrv::sf::IDirectory". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| 0 || [[#Read]] | |||
|- | |- | ||
| | | 1 || [[#GetEntryCount]] | ||
|} | |} | ||
== | == Read == | ||
Takes a type-0x6 output buffer. Returns an output u64(?) for the total number of read entries, this is 0 when no more entries are available. | |||
The output buffer contains the read array of [[#DirectoryEntry]]. This doesn't include entries for "." and "..". | |||
This | |||
== GetEntryCount == | |||
Returns an u64 for the total number of readable entries. | |||
{| class="wikitable" border="1" | = DirectoryEntry = | ||
This is "nn::fs::DirectoryEntry". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! | ! Offset || Size || Description | ||
|- | |||
| 0x0 || 0x301 || Path | |||
|- | |||
| 0x301 || 0x1 || File attributes (bit 0 = is directory; bit 1 = archive bit) | |||
|- | |- | ||
| | | 0x302 || 0x2 || Padding? | ||
|- | |- | ||
| | | 0x304 || 0x1 || [[#DirectoryEntryType]] | ||
|- | |- | ||
| | | 0x305 || 0x3 || Padding? | ||
|- | |- | ||
| | | 0x308 || 0x8 || Filesize, 0 for directories. | ||
|} | |} | ||
= | = DirectoryEntryType = | ||
This is "nn::fs::DirectoryEntryType". | |||
An s8 value indicating a directory entry type. The current values are: | |||
== | {| class="wikitable" border="1" | ||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Directory | |||
|- | |||
| 1 || File | |||
|} | |||
= | = IFile = | ||
This is "nn::fssrv::sf::IFile". | |||
This is "nn::fssrv::sf:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,123: | Line 1,324: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || Read | ||
|- | |- | ||
| | | 1 || Write | ||
|- | |- | ||
| | | 2 || Flush | ||
|- | |- | ||
| | | 3 || SetSize | ||
|- | |- | ||
| | | 4 || GetSize | ||
|- | |- | ||
| | | 5 || [4.0.0+] OperateRange | ||
|} | |||
= ISaveDataInfoReader = | |||
This is "nn::fssrv::sf::ISaveDataInfoReader". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#ReadSaveDataInfo]] | ||
|} | |} | ||
== | == ReadSaveDataInfo == | ||
Takes a type-0x6 output buffer. Returns an output u64 for total output entries. This buffer contains an array of [[#SaveDataInfo]]. | |||
This is used to get [[#SaveDataInfo]] for all savedata on the system (or all savedata for the current [[#SaveDataSpaceId]]). When used multiple times, it will resume reading where it left off, until no more entries are available (in that case the out u64 is value 0). | |||
= | = IDeviceOperator = | ||
This is "nn::fssrv::sf::IDeviceOperator". | |||
{| class="wikitable" border="1" | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || IsSdCardInserted | ||
|- | |||
| 1 || GetSdCardSpeedMode | |||
|- | |- | ||
| | | 2 || [2.0.0+] GetSdCardCid | ||
|- | |- | ||
| | | 3 || [2.0.0+] GetSdCardUserAreaSize | ||
|- | |- | ||
| | | 4 || [2.0.0+] GetSdCardProtectedAreaSize | ||
|- | |- | ||
| 5 || [2.0.0+] GetAndClearSdCardErrorInfo | |||
|- | |- | ||
| 0 || [ | | 100 || GetMmcCid | ||
|- | |||
| 101 || GetMmcSpeedMode | |||
|- | |||
| 110 || EraseMmc | |||
|- | |||
| 111 || GetMmcPartitionSize | |||
|- | |||
| 112 || [2.0.0+] GetMmcPatrolCount | |||
|- | |||
| 113 || [2.0.0+] GetAndClearMmcErrorInfo | |||
|- | |- | ||
| | | 114 || [2.0.0+] GetMmcExtendedCsd | ||
|- | |- | ||
| | | 115 || [4.0.0+] SuspendMmcPatrol | ||
|- | |- | ||
| | | 116 || [4.0.0+] ResumeMmcPatrol | ||
|- | |- | ||
| 200 || [[#IsGameCardInserted]] | |||
|- | |- | ||
| | | 201 || EraseGameCard | ||
|- | |- | ||
| | | 202 || [[#GetGameCardHandle]] | ||
|- | |- | ||
| | | 203 || [[#GetGameCardUpdatePartitionInfo]] | ||
|- | |- | ||
| | | 204 || FinalizeGameCardDriver | ||
|- | |- | ||
| | | 205 || GetGameCardAttribute | ||
|- | |- | ||
| | | 206 || [[#GetGameCardDeviceCertificate]] | ||
|- | |||
| 207 || GetGameCardAsicInfo | |||
|- | |||
| 208 || GetGameCardIdSet | |||
|- | |||
| 209 || WriteToGameCardDirectly | |||
|- | |||
| 210 || SetVerifyWriteEnalbleFlag | |||
|- | |- | ||
| | | 211 || GetGameCardImageHash | ||
|- | |- | ||
| | | 212 || [2.0.0+] GetGameCardDeviceIdForProdCard | ||
|- | |- | ||
| | | 213 || [2.0.0+] EraseAndWriteParamDirectly | ||
|- | |- | ||
| | | 214 || [2.0.0+] ReadParamDirectly | ||
|- | |- | ||
| | | 215 || [2.0.0+] ForceEraseGameCard | ||
|- | |- | ||
| | | 216 || [2.0.0+] GetGameCardErrorInfo | ||
| | |- | ||
| 217 || [2.1.0+] GetGameCardErrorReportInfo | |||
|- | |||
| 218 || [3.0.0+] GetGameCardDeviceId | |||
|- | |||
| 219 || [8.0.0+] [[#ChallengeCardExistence]] | |||
|- | |||
| 220 || [9.0.0+] [[#GetGameCardCompatibilityType]] | |||
|- | |||
| 300 || SetSpeedEmulationMode | |||
|- | |||
| 301 || GetSpeedEmulationMode | |||
|- | |||
| 400 || [5.0.0+] SuspendSdmmcControl | |||
|- | |||
| 401 || [5.0.0+] ResumeSdmmcControl | |||
|- | |||
| 402 || [6.0.0+] [[#GetSdmmcConnectionStatus]] | |||
|- | |||
| 500 || [6.0.0+] [[#SetDeviceSimulationEvent]] | |||
|- | |||
| 501 || [6.0.0+] [[#ClearDeviceSimulationEvent]] | |||
|} | |||
== | == IsGameCardInserted == | ||
No input, returns a bool. | |||
== | == GetGameCardHandle == | ||
No input, returns an u32 '''GameCardHandle'''. | |||
== | == GetGameCardUpdatePartitionInfo == | ||
Returns a [[NCM_services#ProgramId|ProgramId]] and the title-version for it. | |||
* Output u32 with ARMS-gamecard: title-version v131162. This is the title-version for [[2.1.0]], which is the sysupdate included with this gamecard. Launch-day gamecards return title-version v450. | |||
* Output u64 with ARMS-gamecard: [[NCM_services#ProgramId|ProgramId]] 0100000000000816. | |||
[[NS_Services|NS]] appears to only use this with [[NCM_services|NCM]] for checking whether a sysupdate is required. | |||
== | == GetGameCardDeviceCertificate == | ||
Takes | Takes a type-0x6 output buffer, an u32 '''GameCardHandle''' and an u64 '''DeviceCertificateBufferSize'''. No output. | ||
== | == ChallengeCardExistence == | ||
Takes | Takes a type-0x6 output buffer, two type-0x5 input buffers and an u32 '''GameCardHandle'''. No output. | ||
== | [9.0.0+] The [[Account_services|account]] system module uses this as part of a new challenge-response mechanism for [[Network#aauth|application authentication]]. | ||
== GetGameCardCompatibilityType == | |||
Takes an u32 '''GameCardHandle''', returns an u8 '''CompatibilityType''' (0x00 = Global, 0x01 = China) from [[Gamecard_Format#Gamecard_Info|Gamecard Info]]. | |||
== GetSdmmcConnectionStatus == | |||
Takes a total of 4-bytes of input, returns a total of 8-bytes of output. | |||
== | == SetDeviceSimulationEvent == | ||
Takes | Takes a total of 0x14-bytes of input, no output. | ||
= | == ClearDeviceSimulationEvent == | ||
Takes a total of 4-bytes of input, no output. | |||
This | = IEventNotifier = | ||
This is "nn::fssrv::sf::IEventNotifier". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,301: | Line 1,487: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || [[# | | 0 || [[#GetEventHandle]] | ||
|- | |} | ||
== GetEventHandle == | |||
No input, returns an output Event handle. With official sw the EventClearMode is user-specified. | |||
= ISaveDataTransferManager = | |||
This is "nn::fssrv::sf::ISaveDataTransferManager". | |||
This was added with [[4.0.0]]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#GetChallenge]] | ||
|- | |- | ||
| | | 16 || [[#SetToken]] | ||
|- | |- | ||
| | | 32 || [[#OpenSaveDataExporter]] | ||
|- | |- | ||
| | | 64 || [[#OpenSaveDataImporter]] | ||
|} | |||
== GetChallenge == | |||
No input/output, takes a type-0x6 output buffer. | |||
== SetToken == | |||
No input/output, takes a type-0x5 input buffer. | |||
== OpenSaveDataExporter == | |||
Takes an input u8 [[#SaveDataSpaceId]] and u64, returns an [[#ISaveDataExporter]]. | |||
== OpenSaveDataImporter == | |||
Takes an input u8 [[#SaveDataSpaceId]] and a 0x10-byte userID, and a type-0x5 input buffer. Returns an output u64 and an [[#ISaveDataImporter]]. | |||
= ISaveDataTransferManagerForSaveDataRepair = | |||
This is "nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair". | |||
This was added with [[9.0.0]]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#GetChallenge]] | ||
|- | |- | ||
| | | 16 || [[#SetKeyPackage]] | ||
|- | |- | ||
| 80 || | | 80 || [[#OpenSaveDataExporterAndGetEncryptedKey]] | ||
|- | |- | ||
| 81 || [ | | 81 || [[#PrepareOpenSaveDataImporter]] | ||
|- | |||
| 90 || [[#OpenSaveDataImporter]] | |||
|- | |||
| 91 || [[#OpenSaveDataImporter2]] | |||
|- | |||
| 100 || [[#OpenSaveDataExporterWithKey]] | |||
|- | |- | ||
| | | 110 || [[#OpenSaveDataImporterWithKey]] | ||
|} | |} | ||
== | == SetKeyPackage == | ||
No input/output, takes a type-0x5 input buffer. | |||
== | == OpenSaveDataExporterAndGetEncryptedKey == | ||
Takes | Takes a total of 0x10-bytes of input and a type-0x1A output buffer to receive a RsaEncryptedKey. Returns an [[#ISaveDataDivisionExporter]]. | ||
== | == PrepareOpenSaveDataImporter == | ||
Takes a type-0x1A output buffer to receive a RsaEncryptedKey. | |||
== | == OpenSaveDataImporter == | ||
Takes a total of 0x18-bytes of input and two type-0x5 input buffers, returns an [[#ISaveDataDivisionImporter]]. | |||
== | == OpenSaveDataImporter2 == | ||
Takes a total of 0x18-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. | |||
== | == OpenSaveDataExporterWithKey == | ||
Takes a total of 0x20-bytes of input, returns an [[#ISaveDataDivisionExporter]]. | |||
== | == OpenSaveDataImporterWithKey == | ||
Takes a total of 0x28-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. | |||
= | = ISaveDataMover = | ||
This is "nn::fssrv::sf::ISaveDataMover". | |||
This was added with [[10.0.0]]. | |||
This was added with [[ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,371: | Line 1,579: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| | | 8 || [[#Register]] | ||
|- | |- | ||
| 16 || [[# | | 16 || [[#Process]] | ||
|- | |- | ||
| | | 18 || [[#Cancel]] | ||
|} | |||
== Register == | |||
Takes an input u64, no output. | |||
== Process == | |||
Takes an input u64, returns an output u64. | |||
== Cancel == | |||
No input/output. | |||
= ISaveDataExporter = | |||
This is "nn::fssrv::sf::ISaveDataExporter". | |||
This was added with [[4.0.0]]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#GetSaveDataInfo]] | ||
|- | |- | ||
| | | 1 || [[#GetRestSize]] | ||
|- | |- | ||
| | | 16 || [[#Pull]] | ||
|- | |- | ||
| | | 17 || [[#PullInitialData]] | ||
|} | |} | ||
== GetSaveDataInfo == | == GetSaveDataInfo == | ||
No input/output, takes a type- | No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer. | ||
The actual name for this is the SaveDataExporter constructor. This is used automatically after [[#OpenSaveDataExporter]] by official sw. | |||
== | == GetRestSize == | ||
No input, returns an output u64. | No input, returns an output u64. | ||
== | == Pull == | ||
Takes a type-0x6 output buffer, returns an output u64. | |||
== | == PullInitialData == | ||
No input/output, takes a type-0x6 output buffer. | No input/output, takes a type-0x6 output buffer. | ||
= | = ISaveDataImporter = | ||
This is "nn::fssrv::sf::ISaveDataImporter". | |||
This was added with [[4.0.0]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| 0 || [[#GetSaveDataInfo]] | |||
|- | |- | ||
| | | 1 || [[#GetRestSize]] | ||
|- | |- | ||
| | | 16 || [[#Push]] | ||
|- | |- | ||
| | | 17 || [[#Finalize]] | ||
|} | |} | ||
== | == GetSaveDataInfo == | ||
No input/output. | No input/output, takes a type-0x1A [[#GetSaveDataInfo]] output buffer. | ||
== | The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw. | ||
No input, returns an output | |||
== GetRestSize == | |||
No input, returns an output u64. | |||
== Push == | |||
No input/output, takes a type-0x5 input buffer. | |||
== | == Finalize == | ||
No input | No input/output. | ||
= | = ISaveDataTransferManagerWithDivision = | ||
This is "nn::fssrv::sf:: | This is "nn::fssrv::sf::ISaveDataTransferManagerWithDivision". | ||
This was added with [[5.0.0]]. | This was added with [[5.0.0]]. | ||
Line 1,456: | Line 1,668: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || [[# | | 0 || [[#GetChallenge]] | ||
|- | |||
| 16 || [[#SetKeySeedPackage]] | |||
|- | |||
| 32 || [[#OpenSaveDataExporter]] | |||
|- | |- | ||
| | | 33 || [[#OpenSaveDataExporterForDiffExport]] | ||
|} | |- | ||
| 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]] | |||
== | |- | ||
|rowspan="2"| 64 || [5.0.0-5.1.0] OpenSaveDataImporter | |||
|- | |||
| [6.0.0+] [[#OpenSaveDataImporterDeprecated]] | |||
|- | |||
| 65 || [[#OpenSaveDataImporterForDiffImport]] | |||
|- | |||
| 66 || [6.0.0+] [[#OpenSaveDataImporterForDuplicateDiffImport]] | |||
|- | |||
| 67 || [6.0.0+] [[#OpenSaveDataImporter]] | |||
|- | |||
| 68 || [6.0.0+] [[#OpenSaveDataImporterByContext]] | |||
|- | |||
| 69 || [6.0.0+] [[#CancelSuspendingImport]] | |||
|- | |||
| 70 || [10.0.0+] DecryptAndVerifyInitialData | |||
|} | |||
== GetChallenge == | |||
No input/output, takes a type-0x6 output buffer containing the '''Challenge'''. | |||
== | == SetKeySeedPackage == | ||
No input, | No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''. | ||
= ISaveDataChunkImporter = | == OpenSaveDataExporter == | ||
This is "nn::fssrv::sf::ISaveDataChunkImporter". | Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]]. | ||
This was added with [[5.0.0]]. | == OpenSaveDataExporterForDiffExport == | ||
Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]]. | |||
{| class="wikitable" border="1" | |||
|- | == OpenSaveDataExporterByContext == | ||
! Cmd || Name | No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]]. | ||
|- | |||
| 0 || [[#Push]] | == OpenSaveDataImporterDeprecated == | ||
|} | Takes an input u8 [[#SaveDataSpaceId]], a 0x10-byte userID, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionImporter]]. | ||
== Push == | == OpenSaveDataImporterForDiffImport == | ||
Takes an input u64 and a type-0x5 input buffer, no output. | Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]], returns an [[#ISaveDataDivisionImporter]]. | ||
== OpenSaveDataImporterForDuplicateDiffImport == | |||
Takes an input u8 and an u64, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. | |||
== OpenSaveDataImporter == | |||
Takes an input u8, an u8(bool), a 0x10-byte struct, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. | |||
== OpenSaveDataImporterByContext == | |||
No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. | |||
== CancelSuspendingImport == | |||
Takes an input u64 and a 0x10-byte struct, no output. | |||
= ISaveDataDivisionExporter = | |||
This is "nn::fssrv::sf::ISaveDataDivisionExporter". | |||
This was added with [[5.0.0]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#SetDivisionCount]] | |||
|- | |||
| 1 || [6.0.0+] [[#GetSaveDataInfo]] | |||
|- | |||
| 16 || [[#OpenSaveDataDiffChunkIterator]] | |||
|- | |||
| 48 || [[#OpenSaveDataChunkExporter]] | |||
|- | |||
| 64 || [6.0.0-8.1.0] [[#FinalizeFullExport]] | |||
|- | |||
| 65 || [6.0.0-8.1.0] [[#FinalizeDiffExport]] | |||
|- | |||
| 66 || [6.0.0+] [[#CancelExport]] | |||
|- | |||
| 67 || [6.0.0+] [[#SuspendExport]] | |||
|- | |||
| 70 || [6.0.0+] [[#GetKeySeed]] | |||
|- | |||
| 71 || [6.0.0+] [[#GetInitialDataMac]] | |||
|- | |||
| 72 || [6.0.0+] [[#FinalizeExport]] | |||
|- | |||
| 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]] | |||
|- | |||
| 80 || [6.0.0+] [[#GetImportInitialDataAad]] | |||
|- | |||
| 81 || [6.0.0+] [[#SetExportInitialDataAad]] | |||
|- | |||
| 96 || [6.0.0+] [[#GetReportInfo]] | |||
|} | |||
== SetDivisionCount == | |||
Takes an input u32, no output. | |||
== OpenSaveDataChunkExporter == | |||
Takes an input u32, returns an [[#ISaveDataChunkExporter]]. | |||
== FinalizeFullExport == | |||
No input, returns two 0x10-byte output structs. | |||
== FinalizeDiffExport == | |||
No input, returns an output 0x10-byte struct. | |||
== CancelExport == | |||
No input/output. | |||
== SuspendExport == | |||
No input/output, takes a type-0x6 output buffer. | |||
== GetKeySeed == | |||
No input, returns an output 0x10-byte struct. | |||
== GetInitialDataMac == | |||
No input, returns an output 0x10-byte struct. | |||
== FinalizeExport == | |||
No input/output. | |||
== SetExportInitialDataAad == | |||
Takes an input 0x20-byte struct, no output. | |||
= ISaveDataDivisionImporter = | |||
This is "nn::fssrv::sf::ISaveDataDivisionImporter". | |||
This was added with [[5.0.0]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [6.0.0+] [[#GetSaveDataInfo]] | |||
|- | |||
| 16 || [[#OpenSaveDataDiffChunkIterator]] | |||
|- | |||
| 32 || [[#InitializeImport]] | |||
|- | |||
| 33 || [[#FinalizeImport]] | |||
|- | |||
| 34 || [6.0.0+] [[#CancelImport]] | |||
|- | |||
| 35 || [6.0.0+] [[#GetImportContext]] | |||
|- | |||
| 36 || [6.0.0+] [[#SuspendImport]] | |||
|- | |||
| 48 || [[#OpenSaveDataChunkImporter]] | |||
|- | |||
| 64 || [6.0.0+] [[#GetImportInitialDataAad]] | |||
|- | |||
| 80 || [6.0.0+] [[#GetReportInfo]] | |||
|} | |||
== GetSaveDataInfo == | |||
No input/output, takes a type-0x6 output buffer. | |||
== OpenSaveDataDiffChunkIterator == | |||
No input, returns an [[#ISaveDataChunkIterator]]. | |||
== InitializeImport == | |||
No input, returns an output u64. | |||
== FinalizeImport == | |||
No input/output. | |||
== CancelImport == | |||
No input/output. | |||
== GetImportContext == | |||
No input/output, takes a type-0x6 output buffer. | |||
== SuspendImport == | |||
No input/output. | |||
== OpenSaveDataChunkImporter == | |||
Takes an input u32, returns an [[#ISaveDataChunkImporter]]. | |||
== GetImportInitialDataAad == | |||
No input, returns an output 0x20-byte struct. | |||
== GetReportInfo == | |||
No input, returns an output 0x20-byte struct. | |||
= ISaveDataChunkIterator = | |||
This is "nn::fssrv::sf::ISaveDataChunkIterator". | |||
This was added with [[5.0.0]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#Next]] | |||
|- | |||
| 1 || [[#IsEnd]] | |||
|- | |||
| 16 || [[#GetId]] | |||
|} | |||
== Next == | |||
No input/output. | |||
== IsEnd == | |||
No input, returns an output u8. | |||
== GetId == | |||
No input, returns an output u32. | |||
= ISaveDataChunkExporter = | |||
This is "nn::fssrv::sf::ISaveDataChunkExporter". | |||
This was added with [[5.0.0]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#Pull]] | |||
|- | |||
| 16 || [6.0.0+] [[#GetRestRawDataSize]] | |||
|} | |||
== Pull == | |||
Takes an input u64 and a type-0x6 output buffer, returns an output u64. | |||
== GetRestRawDataSize == | |||
No input, returns an output u64. | |||
= ISaveDataChunkImporter = | |||
This is "nn::fssrv::sf::ISaveDataChunkImporter". | |||
This was added with [[5.0.0]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#Push]] | |||
|} | |||
== Push == | |||
Takes an input u64 and a type-0x5 input buffer, no output. | |||
= ISaveDataTransferProhibiter = | |||
This was added with [[6.0.0]]. | |||
This doesn't seem to handle any commands (?). | |||
= IMultiCommitManager = | |||
This was added with [[6.0.0]]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 1 || [[#Add]] | |||
|- | |||
| 2 || [[#Commit]] | |||
|} | |||
== Add == | |||
Takes an input [[#IFilesystem]], no output. | |||
== Commit == | |||
No input/output. | |||
= | = IWiper = | ||
This | This is "nn::fs::IWiper". | ||
This was added with [[10.0.0]]. | |||
This was added with [[ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,494: | Line 1,950: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || [[#Startup|Startup]] | ||
|- | |- | ||
| | | 16 || [[#Process_2|Process]] | ||
|} | |} | ||
== | == Startup == | ||
No input. Returns an u64. | |||
== | == Process == | ||
No input | No input. Returns an u64. | ||
= FileSystemProxyType = | = FileSystemProxyType = |