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