Line 4: |
Line 4: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Arguments || Notes | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || OpenCodeFileSystem || u64 TitleId + X descriptor [[#ContentPath]] || Returns an [[#IFileSystem]]. | + | | 0 || [[#OpenCodeFileSystem]] |
| |- | | |- |
− | | 1 || IsArchivedProgram || u64 ProcessId || Returns a bool (1 if the process id's [[#ContentPath]] ends in ".nca"). | + | | 1 || [[#IsArchivedProgram]] |
| |- | | |- |
− | | 2 || [4.0.0+] SetCurrentProcess || PID descriptor || | + | | 2 || [4.0.0+] [[#SetCurrentProcess]] |
| |} | | |} |
| + | |
| + | == OpenCodeFileSystem == |
| + | Takes an u64 TitleId and a [[#ContentPath]]. Returns an [[#IFileSystem]]. |
| + | |
| + | == IsArchivedProgram == |
| + | Takes an u64 ProcessId. Returns a bool (1 if the process id's [[#ContentPath]] ends in ".nca"). |
| + | |
| + | == SetCurrentProcess == |
| + | Takes a PID descriptor. |
| | | |
| = fsp-pr = | | = fsp-pr = |
Line 18: |
Line 27: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Notes | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#RegisterProgram]] || | + | | 0 || [[#RegisterProgram]] |
| |- | | |- |
− | | 1 || [[#UnregisterProgram]] || | + | | 1 || [[#UnregisterProgram]] |
| |- | | |- |
− | | 2 || [4.0.0+] SetCurrentProcess || | + | | 2 || [4.0.0+] [[#SetCurrentProcess]] |
| |- | | |- |
− | | 256 || [[#SetEnabledProgramVerification]] || | + | | 256 || [[#SetEnabledProgramVerification]] |
| |} | | |} |
| | | |
Line 59: |
Line 68: |
| | 8 || [2.0.0+] [[#OpenFileSystemWithId]] | | | 8 || [2.0.0+] [[#OpenFileSystemWithId]] |
| |- | | |- |
− | | 9 || [3.0.0+] OpenDataFileSystemByApplicationId | + | | 9 || [3.0.0+] OpenDataFileSystemByProgramId |
| |- | | |- |
| | 11 || [[#OpenBisFileSystem]] | | | 11 || [[#OpenBisFileSystem]] |
Line 99: |
Line 108: |
| | 34 || [5.0.0+] GetCacheStorageSize | | | 34 || [5.0.0+] GetCacheStorageSize |
| |- | | |- |
− | | 35 || [6.0.0+] CreateSaveDataFileSystemByHashSalt (Unofficial name, takes a total of 0xB0-bytes of input, no output) | + | | 35 || [6.0.0+] [[#CreateSaveDataFileSystemWithHashSalt]] |
| + | |- |
| + | | 36 || [9.0.0+] OpenHostFileSystemWithOption |
| |- | | |- |
| | 51 || [[#OpenSaveDataFileSystem]] | | | 51 || [[#OpenSaveDataFileSystem]] |
Line 117: |
Line 128: |
| | 61 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]] | | | 61 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]] |
| |- | | |- |
− | | 62 || [5.0.0+] OpenCacheStorageList | + | | 62 || [5.0.0+] OpenSaveDataInfoReaderOnlyCacheStorage |
| |- | | |- |
| | 64 || [5.0.0+] OpenSaveDataInternalStorageFileSystem | | | 64 || [5.0.0+] OpenSaveDataInternalStorageFileSystem |
Line 123: |
Line 134: |
| | 65 || [5.0.0+] UpdateSaveDataMacForDebug | | | 65 || [5.0.0+] UpdateSaveDataMacForDebug |
| |- | | |- |
− | | 66 || [5.0.0+] WriteSaveDataFileSystemExtraData2 | + | | 66 || [5.0.0+] WriteSaveDataFileSystemExtraDataWithMask |
| |- | | |- |
− | | 67 || [6.0.0+] FindSaveDataWithFilter (Takes a total of 0x50-bytes of input, returns 8-bytes of output, and a type-0x6 output buffer) | + | | 67 || [6.0.0+] [[#FindSaveDataWithFilter]] |
| |- | | |- |
− | | 68 || [6.0.0+] OpenSaveDataIterator (Takes a total of 0x50-bytes of input, returns an #ISaveDataInfoReader) | + | | 68 || [6.0.0+] [[#OpenSaveDataInfoReaderWithFilter]] |
| |- | | |- |
| | 69 || [8.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataAttribute | | | 69 || [8.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataAttribute |
Line 135: |
Line 146: |
| | 80 || OpenSaveDataMetaFile | | | 80 || OpenSaveDataMetaFile |
| |- | | |- |
− | | 81 || [4.0.0+] OpenSaveDataTransferManager (No input, returns an [[#ISaveDataTransferManager]]) | + | | 81 || [4.0.0+] [[#OpenSaveDataTransferManager]] |
| |- | | |- |
− | | 82 || [5.0.0+] OpenSaveDataTransferManagerVersion2 (No input, returns an [[#ISaveDataTransferManagerWithDivision]]) | + | | 82 || [5.0.0+] [[#OpenSaveDataTransferManagerVersion2]] |
| |- | | |- |
− | | 83 || [6.0.0+] OpenSaveDataTransferProhibiterForCloudBackUp (Takes an input u64, returns an [[#ISaveDataTransferProhibiter]]) | + | | 83 || [6.0.0+] [[#OpenSaveDataTransferProhibiter]] |
| |- | | |- |
− | | 84 || [6.0.0+] ListApplicationAccessibleSaveDataOwnerId (Takes a total of 0x10-bytes of input, returns 4-bytes of output, and a type-0x6 output buffer) | + | | 84 || [6.0.0+] [[#ListAccessibleSaveDataOwnerId]] |
| + | |- |
| + | | 85 || [9.0.0+] [[#OpenSaveDataTransferManagerForSaveDataRepair]] |
| |- | | |- |
| | 100 || OpenImageDirectoryFileSystem | | | 100 || OpenImageDirectoryFileSystem |
Line 147: |
Line 160: |
| | 110 || [[#OpenContentStorageFileSystem]] | | | 110 || [[#OpenContentStorageFileSystem]] |
| |- | | |- |
− | | 120 || [6.0.0+] OpenCloudBackupWorkStorageFileSystem (Takes 4-bytes of input, returns an [[#IFileSystem]]) | + | | 120 || [6.0.0+] [[#OpenCloudBackupWorkStorageFileSystem]] |
| |- | | |- |
− | | 130 || [7.0.0+] OpenCustomStorageFileSystem (Takes 4-bytes of input, returns an [[#IFileSystem]]) | + | | 130 || [7.0.0+] [[#OpenCustomStorageFileSystem]] |
| |- | | |- |
| | 200 || OpenDataStorageByCurrentProcess | | | 200 || OpenDataStorageByCurrentProcess |
Line 159: |
Line 172: |
| | 203 || OpenPatchDataStorageByCurrentProcess | | | 203 || OpenPatchDataStorageByCurrentProcess |
| |- | | |- |
− | | 204 || [7.0.0+] OpenDataFileSystemByProgramIndex (Takes an input u8, returns an [[#IFileSystem]]) | + | | 204 || [7.0.0+] [[#OpenDataFileSystemWithProgramIndex]] |
| |- | | |- |
− | | 205 || [7.0.0+] OpenDataStorageByProgramIndex (Takes an input u8, returns an [[#IStorage]]) | + | | 205 || [7.0.0+] [[#OpenDataStorageWithProgramIndex]] |
| |- | | |- |
| | 400 || [[#OpenDeviceOperator]] | | | 400 || [[#OpenDeviceOperator]] |
Line 173: |
Line 186: |
| | 511 || [5.0.0+] NotifySystemDataUpdateEvent | | | 511 || [5.0.0+] NotifySystemDataUpdateEvent |
| |- | | |- |
− | | 520 || [6.0.0+] SimulateGameCardDetectionEvent (Takes a total of 0xC-bytes of input, no output) | + | | 520 || [6.0.0+] [[#SimulateDeviceDetectionEvent]] |
| |- | | |- |
| | 600 || [1.0.0-3.0.2] SetCurrentPosixTime | | | 600 || [1.0.0-3.0.2] SetCurrentPosixTime |
Line 219: |
Line 232: |
| | 640 || [4.0.0-7.0.1] IsSignedSystemPartitionOnSdCardValid | | | 640 || [4.0.0-7.0.1] IsSignedSystemPartitionOnSdCardValid |
| |- | | |- |
− | | 700 || [5.0.0+] [[#OpenAccessFailureResolver]] | + | | 700 || [5.0.0+] [[#OpenAccessFailureDetectionEventNotifier]] |
| |- | | |- |
| | 701 || [5.0.0+] GetAccessFailureDetectionEvent | | | 701 || [5.0.0+] GetAccessFailureDetectionEvent |
Line 229: |
Line 242: |
| | 720 || [5.0.0+] AbandonAccessFailure | | | 720 || [5.0.0+] AbandonAccessFailure |
| |- | | |- |
− | | 800 || [2.0.0+] GetAndClearFileSystemProxyErrorInfo | + | | 800 || [2.0.0+] GetAndClearErrorInfo |
| |- | | |- |
| | 810 || [7.0.0+] RegisterProgramIndexMapInfo | | | 810 || [7.0.0+] RegisterProgramIndexMapInfo |
Line 255: |
Line 268: |
| | 1010 || [5.1.0-6.2.0] SetDataStorageRedirectTarget | | | 1010 || [5.1.0-6.2.0] SetDataStorageRedirectTarget |
| |- | | |- |
− | | 1011 || [7.0.0+] GetAccessLogVersionInfo (Unofficial name, no input, returns two 32-bit values "version" and "program_index") | + | | 1011 || [7.0.0+] [[#GetProgramIndexForAccessLog]] |
| + | |- |
| + | | 1012 || [9.0.0+] GetFsStackUsage |
| + | |- |
| + | | 1013 || [9.0.0+] UnsetSaveDataRootPath |
| |- | | |- |
| | 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey | | | 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey |
| |- | | |- |
− | | 1110 || [6.0.0+] CorruptSaveDataFileSystemBySaveDataSpaceId2 | + | | 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset |
| |- | | |- |
− | | 1200 || [6.0.0+] OpenMultiCommitManager (No input, returns an output #IMultiCommitManager) | + | | 1200 || [6.0.0+] [[#OpenMultiCommitManager]] |
| |} | | |} |
| | | |
Line 273: |
Line 290: |
| If the code were to request an invalid input type, panic. But this never happens. | | If the code were to request an invalid input type, panic. But this never happens. |
| | | |
− | === RwPermissions === | + | The output values for [[#ReadWrite]] CanMountRegisteredUpdatePartition and [[#Call]] CanRegisterUpdatePartition are masked with the cached value of [[SMC#IsDebugMode|DebugMode]]. |
| + | |
| + | === ReadWrite === |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Type(s) || Mask || Name || Value || Used by | + | ! AccessibilityType || Mask || Name || Value || Used by |
| |- | | |- |
| | 0x0 || 0x8000000000000801 || CanMountLogo || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] | | | 0x0 || 0x8000000000000801 || CanMountLogo || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]] |
Line 298: |
Line 317: |
| | 0x9 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000000000084) || CanMountCloudBackupWorkStorage || 3 || OpenCloudBackupWorkStorageFileSystem | | | 0x9 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000000000084) || CanMountCloudBackupWorkStorage || 3 || OpenCloudBackupWorkStorageFileSystem |
| |- | | |- |
− | | 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) || CanMountCustomStorage || 3 || OpenCustomStorageFileSystem | + | | 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 |
| |- | | |- |
| | 0xB || 0x8000000000000084<br/>([6.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-5.1.0] 0x8000000000008080) || CanMountBisCalibrationFile || 3 || [[#OpenBisFileSystem]] | | | 0xB || 0x8000000000000084<br/>([6.0.0-6.2.0] 0x8000000000000080)<br/>([1.0.0-5.1.0] 0x8000000000008080) || CanMountBisCalibrationFile || 3 || [[#OpenBisFileSystem]] |
Line 356: |
Line 375: |
| | 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]] | | | 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]] |
| |- | | |- |
− | | [3.0.0+] 0x27 || 0xC000000000200000<br/>([6.0.0-6.2.0] 0x8000000000000100)<br/>([1.0.0-5.1.0] 0x8000000000100008) || CanOpenSdCardStorage || || | + | | [3.0.0+] 0x27 || 0xC000000000200000<br/>([6.0.0-6.2.0] 0x8000000000000100)<br/>([3.0.0-5.1.0] 0x8000000000100008) || CanOpenSdCardStorage || || |
| |- | | |- |
− | | [3.0.0+] 0x28 || 0x8000000000000100<br/>([6.0.0-6.2.0] 0x8000000000100008)<br/>([1.0.0-5.1.0] 0xC000000000400000) || CanOpenGameCardStorage || 3 || [[#OpenGameCardStorage]], [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1) | + | | [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) |
| |- | | |- |
− | | [4.0.0+] 0x29 || 0x8000000000100008<br/>([6.0.0-6.2.0] 0xC000000000400000)<br/>([1.0.0-5.1.0] 0x8000000000010000) || CanMountSystemDataPrivate || 1 || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]] | + | | [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]] |
| |- | | |- |
− | | [5.0.0+] 0x2A || 0xC000000000400000<br/>([6.0.0-6.2.0] 0x8000000000010000)<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanMountHost || 3 || [[#OpenHostFileSystem]] | + | | [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+] 0x2B || 0x8000000000010000<br/>([1.0.0-6.2.0]0x8000000000000000) || CanMountRegisteredUpdatePartition || 1 || [[#OpenRegisteredUpdatePartition]] | + | | [6.0.0+] 0x2B || 0x8000000000010000<br/>([6.0.0-6.2.0] 0x8000000000000000) || CanMountRegisteredUpdatePartition || 1 || [[#OpenRegisteredUpdatePartition]] |
| |- | | |- |
| | [7.0.0+] 0x2C || 0x8000000000000000 || CanOpenSaveDataInternalStorage || 3 || [[#OpenSaveDataInternalStorageFileSystem]] | | | [7.0.0+] 0x2C || 0x8000000000000000 || CanOpenSaveDataInternalStorage || 3 || [[#OpenSaveDataInternalStorageFileSystem]] |
Line 371: |
Line 390: |
| |} | | |} |
| | | |
− | === BoolPermissions === | + | === Call === |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Type(s) || Mask || Name || Used by | + | ! OperationType || Mask || Name || Used by |
| |- | | |- |
| | 0x0 || 0x8000000000000080 || CanInvalidateBisCache || [[#InvalidateBisCache]] | | | 0x0 || 0x8000000000000080 || CanInvalidateBisCache || [[#InvalidateBisCache]] |
| |- | | |- |
− | | 0x1 || 0x8000000000000080 || CanEraseMmc || [[#EraseMmc]] | + | | 0x1 || 0x8000000000000080 || CanEraseMmc || EraseMmc |
| |- | | |- |
− | | 0x2 || 0x8000000000000010 || CanGetGameCardDeviceCertificate || [[#GetGameCardDeviceCertificate]] | + | | 0x2 || 0x8000000000000010 || CanGetGameCardDeviceCertificate || GetGameCardDeviceCertificate |
| |- | | |- |
− | | 0x3 || 0x8000000000000010 || CanGetGameCardIdSet || [[#GetGameCardIdSet]] | + | | 0x3 || 0x8000000000000010 || CanGetGameCardIdSet || GetGameCardIdSet |
| |- | | |- |
− | | 0x4 || 0x8000000000000200 || CanFinalizeGameCardDriver || [[#FinalizeGameCardDriver]] | + | | 0x4 || 0x8000000000000200 || CanFinalizeGameCardDriver || FinalizeGameCardDriver |
| |- | | |- |
− | | 0x5 || 0x8000000000000200 || CanGetGameCardAsicInfo || [[#GetGameCardAsicInfo]] | + | | 0x5 || 0x8000000000000200 || CanGetGameCardAsicInfo || GetGameCardAsicInfo |
| |- | | |- |
| | 0x6 || 0x8000000000002020 || CanCreateSaveData || [[#CreateSaveDataFileSystem]] | | | 0x6 || 0x8000000000002020 || CanCreateSaveData || [[#CreateSaveDataFileSystem]] |
| |- | | |- |
− | | 0x7 || 0x8000000000000060 || CanDeleteSaveData || [[#DeleteSaveDataFileSystem]], [[#RegisterSaveDataFileSystemAtomicDeletion]] | + | | 0x7 || 0x8000000000000060 || CanDeleteSaveData || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion |
| |- | | |- |
− | | 0x8 || 0x8000000000000028 || CanCreateSystemSaveData || [[#CreateSaveDataFileSystemBySystemSaveDataId]] | + | | 0x8 || 0x8000000000000028 || CanCreateSystemSaveData || CreateSaveDataFileSystemBySystemSaveDataId |
| |- | | |- |
− | | 0x9 || 0x8000000000000020 || CanCreateOthersSystemSaveData || [[#CreateSaveDataFileSystemBySystemSaveDataId]] | + | | 0x9 || 0x8000000000000020 || CanCreateOthersSystemSaveData || CreateSaveDataFileSystemBySystemSaveDataId |
| |- | | |- |
− | | 0xA || 0x8000000000004028 || CanDeleteSystemSaveData || [[#DeleteSaveDataFileSystem]], [[#RegisterSaveDataFileSystemAtomicDeletion]] | + | | 0xA || 0x8000000000004028 || CanDeleteSystemSaveData || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion |
| |- | | |- |
| | 0xB || 0x8000000000000060 || CanOpenSaveDataInfoReader || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | | | 0xB || 0x8000000000000060 || CanOpenSaveDataInfoReader || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] |
Line 402: |
Line 421: |
| | 0xC || 0x8000000000004020 || CanOpenSaveDataInfoReaderForSystem || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | | | 0xC || 0x8000000000004020 || CanOpenSaveDataInfoReaderForSystem || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] |
| |- | | |- |
− | | 0xD || 0x8000000000000040<br/>([1.0.0-5.1.0] 0x8000000000020000) || CanOpenSaveDataIterator || OpenSaveDataIterator | + | | 0xD || 0x8000000000000040<br/>([1.0.0-5.1.0] 0x8000000000020000) || CanOpenSaveDataInfoReaderForInternal || [[#OpenSaveDataInfoReaderWithFilter]] |
| |- | | |- |
− | | 0xE || 0x8000000000020000<br/>([1.0.0-5.1.0] 0x8000000000000400) || CanOpenSaveDataMetaFile || [[#OpenSaveDataMetaFile]] | + | | 0xE || 0x8000000000020000<br/>([1.0.0-5.1.0] 0x8000000000000400) || CanOpenSaveDataMetaFile || OpenSaveDataMetaFile |
| |- | | |- |
− | | 0xF || 0x8000000000000400<br/>([1.0.0-5.1.0] 0x8000000000004060) || CanSetCurrentPosixTime || [[#SetCurrentPosixTime]], [[#SetCurrentPosixTimeWithTimeDifference]] | + | | 0xF || 0x8000000000000400<br/>([1.0.0-5.1.0] 0x8000000000004060) || CanSetCurrentPosixTime || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference |
| |- | | |- |
| | 0x10 || 0x8000000000004060<br/>([1.0.0-5.1.0] 0x8000000000080000) || CanReadSaveDataFileSystemExtraData || [[#ReadSaveDataFileSystemExtraData]] | | | 0x10 || 0x8000000000004060<br/>([1.0.0-5.1.0] 0x8000000000080000) || CanReadSaveDataFileSystemExtraData || [[#ReadSaveDataFileSystemExtraData]] |
| |- | | |- |
− | | 0x11 || 0x8000000000080000 || CanSetGlobalAccessLogMode || [[#SetGlobalAccessMode]] | + | | 0x11 || 0x8000000000080000 || CanSetGlobalAccessLogMode || [[#SetGlobalAccessLogMode]] |
| |- | | |- |
− | | 0x12 || 0x8000000000080000<br/>([1.0.0-5.1.0] Invalid) || CanSetSpeedEmulationMode || [[#SetSpeedEmulationMode]] | + | | 0x12 || 0x8000000000080000<br/>([1.0.0-5.1.0] Invalid) || CanSetSpeedEmulationMode || SetSpeedEmulationMode |
| |- | | |- |
| | 0x13 || Invalid<br/>([1.0.0-5.1.0] 0xC000000000800000) || || | | | 0x13 || Invalid<br/>([1.0.0-5.1.0] 0xC000000000800000) || || |
| |- | | |- |
− | | 0x14 || 0xC000000000800000<br/>([1.0.0-5.1.0] 0xC000000001000000) || CanFillBis || [[#CreatePaddingFile]], [[#DeleteAllPaddingFiles]] | + | | 0x14 || 0xC000000000800000<br/>([1.0.0-5.1.0] 0xC000000001000000) || CanFillBis || CreatePaddingFile, DeleteAllPaddingFiles |
| |- | | |- |
− | | 0x15 || 0xC000000001000000<br/>([5.0.0-5.1.0] 0x8000000001000060)<br/>([1.0.0-4.1.0] 0xC000000002000000) || CanCorruptSaveData || [[#CorruptSaveDataFileSystem]], [[#CorruptSaveDataFileSystemBySaveDataSpaceId]] | + | | 0x15 || 0xC000000001000000<br/>([5.0.0-5.1.0] 0x8000000001000060)<br/>([1.0.0-4.1.0] 0xC000000002000000) || CanCorruptSaveData || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId |
| |- | | |- |
− | | [2.0.0+] 0x16 || 0x8000000001000060<br/>([5.0.0-5.1.0] 0x8000000000000060)<br/>([1.0.0-4.1.0] 0x8000000004000000) || CanCorruptSystemSaveData || [[#CorruptSaveDataFileSystem]], [[#CorruptSaveDataFileSystemBySaveDataSpaceId]] | + | | [2.0.0+] 0x16 || 0x8000000001000060<br/>([5.0.0-5.1.0] 0x8000000000000060)<br/>([2.0.0-4.1.0] 0x8000000004000000) || CanCorruptSystemSaveData || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId |
| |- | | |- |
− | | [2.0.0+] 0x17 || 0x8000000000000060<br/>([5.0.0-5.1.0] 0xC000000002000000)<br/>([1.0.0-4.1.0] 0x8000000008000000) || CanVerifySaveData || [[#VerifySaveDataFileSystem]], [[#VerifySaveDataFileSystemBySaveDataSpaceId]] | + | | [2.0.0+] 0x17 || 0x8000000000000060<br/>([5.0.0-5.1.0] 0xC000000002000000)<br/>([2.0.0-4.1.0] 0x8000000008000000) || CanVerifySaveData || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId |
| |- | | |- |
− | | [2.0.0+] 0x18 || 0xC000000002000000<br/>([5.0.0-5.1.0] 0x8000000004000000)<br/>([1.0.0-4.1.0] 0x8000000010000000) || CanDebugSaveData || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]] | + | | [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]] |
| |- | | |- |
− | | [2.0.0+] 0x19 || 0x8000000004000000<br/>([5.0.0-5.1.0] 0x8000000008000000)<br/>([1.0.0-4.1.0] 0x8000000000000800) || CanFormatSdCard || [[#FormatSdCardFileSystem]] | + | | [2.0.0+] 0x19 || 0x8000000004000000<br/>([5.0.0-5.1.0] 0x8000000008000000)<br/>([2.0.0-4.1.0] 0x8000000000000800) || CanFormatSdCard || FormatSdCardFileSystem |
| |- | | |- |
− | | [2.0.0+] 0x1A || 0x8000000008000000<br/>([5.0.0-5.1.0] 0x8000000010000000)<br/>([1.0.0-4.1.0] 0x8000000000004020) || CanGetRightsId || [[#GetRightsId]], [[#GetRightsIdAndKeyGenerationByPath]], [[#GetRightsIdByPath]] | + | | [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 |
| |- | | |- |
− | | [3.0.0+] 0x1B || 0x8000000010000000<br/>([5.0.0-5.1.0] 0x8000000000000800)<br/>([1.0.0-4.1.0] 0x8000000000002020) || CanRegisterExternalKey || [[#RegisterExternalKey]], [[#UnregisterAllExternalKey]] | + | | [3.0.0+] 0x1B || 0x8000000010000000<br/>([5.0.0-5.1.0] 0x8000000000000800)<br/>([3.0.0-4.1.0] 0x8000000000002020) || CanRegisterExternalKey || RegisterExternalKey, UnregisterAllExternalKey |
| |- | | |- |
− | | [3.0.0+] 0x1C || 0x8000000000000800<br/>([5.0.0-5.1.0] 0x8000000000004020)<br/>([1.0.0-4.1.0] 0x8000000000000028) || CanSetEncryptionSeed || [[#SetSdCardEncryptionSeed]] | + | | [3.0.0+] 0x1C || 0x8000000000000800<br/>([5.0.0-5.1.0] 0x8000000000004020)<br/>([3.0.0-4.1.0] 0x8000000000000028) || CanSetEncryptionSeed || [[#SetSdCardEncryptionSeed]] |
| |- | | |- |
− | | [4.0.0+] 0x1D || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000000)<br/>([1.0.0-4.1.0] 0x8000000020000000) || SaveDataExtraData_Write0 || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraData2]] | + | | [4.0.0+] 0x1D || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000000)<br/>([4.0.0-4.1.0] 0x8000000020000000) || CanWriteSaveDataFileSystemExtraDataTimeStamp || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask |
| |- | | |- |
− | | [4.0.0+] 0x1E || 0x8000000000004020<br/>([5.0.0-5.1.0] 0x8000000000002020)<br/>([1.0.0-4.1.0] 0x8000000040000000) || CanWriteSaveDataFileSystemExtraDataFlags || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraData2]] | + | | [4.0.0+] 0x1E || 0x8000000000004020<br/>([5.0.0-5.1.0] 0x8000000000002020)<br/>([4.0.0-4.1.0] 0x8000000040000000) || CanWriteSaveDataFileSystemExtraDataFlags || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask |
| |- | | |- |
− | | [4.0.0+] 0x1F || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000028)<br/>([1.0.0-4.1.0] 0x8000000000000000) || SaveDataExtraData_Write1 || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraData2]] | + | | [4.0.0+] 0x1F || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000028)<br/>([4.0.0-4.1.0] 0x8000000000000000) || CanWriteSaveDataFileSystemExtraDataCommitId || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask |
| |- | | |- |
− | | [4.0.0+] 0x20 || 0x8000000000000000<br/>([5.0.0-5.1.0] 0x8000000020000000)<br/>([1.0.0-4.1.0] 0x8000000000000000) || CanWriteSaveDataFileSystemExtraDataAll || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraData2]] | + | | [4.0.0+] 0x20 || 0x8000000000000000<br/>([5.0.0-5.1.0] 0x8000000020000000)<br/>([4.0.0-4.1.0] 0x8000000000000000) || CanWriteSaveDataFileSystemExtraDataAll || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask |
| |- | | |- |
− | | [5.0.0+] 0x21 || 0x8000000000002020<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanExtendSaveData || [[#ExtendSaveDataFileSystem]] | + | | [5.0.0+] 0x21 || 0x8000000000002020<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanExtendSaveData || ExtendSaveDataFileSystem |
| |- | | |- |
− | | [5.0.0+] 0x22 || 0x8000000000000028<br/>([1.0.0-5.1.0] 0x0000000080000002) || CanExtendSystemSaveData || [[#ExtendSaveDataFileSystem]] | + | | [5.0.0+] 0x22 || 0x8000000000000028<br/>([1.0.0-5.1.0] 0x0000000080000002) || CanExtendSystemSaveData || ExtendSaveDataFileSystem |
| |- | | |- |
− | | [5.0.0+] 0x23 || 0x8000000020000000<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanRegisterUpdatePartition || [[#RegisterUpdatePartition]] | + | | [5.0.0+] 0x23 || 0x8000000020000000<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanRegisterUpdatePartition || RegisterUpdatePartition |
| |- | | |- |
| | [5.0.0+] 0x24 || 0x8000000040000000<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanOpenSaveDataTransferManager || [[#OpenSaveDataTransferManager]] | | | [5.0.0+] 0x24 || 0x8000000040000000<br/>([1.0.0-5.1.0] 0x8000000000000000) || CanOpenSaveDataTransferManager || [[#OpenSaveDataTransferManager]] |
Line 452: |
Line 471: |
| | [5.0.0+] 0x25 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanOpenSaveDataTransferManagerVersion2 || [[#OpenSaveDataTransferManagerVersion2]] | | | [5.0.0+] 0x25 || 0x8000000200000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanOpenSaveDataTransferManagerVersion2 || [[#OpenSaveDataTransferManagerVersion2]] |
| |- | | |- |
− | | [5.0.0+] 0x26 || 0x8000000200002000<br/>([1.0.0-5.1.0] 0x8000000080000110) || CanOpenSaveDataTransferProhibiterForCloudBackUp || [[#OpenSaveDataTransferProhibiterForCloudBackUp]] | + | | [5.0.0+] 0x26 || 0x8000000200000000<br/>([6.0.0-8.1.0] 0x8000000200002000)<br/>([5.0.0-5.1.0] 0x8000000080000110) || CanOpenSaveDataTransferManagerForSaveDataRepair || OpenSaveDataTransferManagerForSaveDataRepair |
| |- | | |- |
− | | [5.0.0+] 0x27 || 0x8000000240002000 <br/>([6.0.0-7.0.1] 0x8000000200002000)<br/>([1.0.0-5.1.0] 0x8000000000100008) || CanListApplicationAccessibleSaveDataOwnerId || ListApplicationAccessibleSaveDataOwnerId | + | | [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 |
| |- | | |- |
− | | [5.0.0+] 0x28 || 0x8000000000000000<br/>([1.0.0-5.1.0] 0x8000000080010000) || CanControlMmcPatrol || [[#SuspendMmcPatrol]], [[#ResumeMmcPatrol]] | + | | [5.0.0+] 0x28 || 0x8000000200002000<br/>([6.0.0-8.1.0] 0x8000000000000000)<br/>([5.0.0-5.1.0] 0x8000000080010000) || CanOpenOpenSaveDataTransferProhibiter || [[#OpenSaveDataTransferProhibiter]] |
| |- | | |- |
− | | [5.0.0+] 0x29 || 0x8000000000000000<br/>([1.0.0-5.1.0] 0x0000000080000001) || CanOverrideSaveDataTransferTokenSignVerificationKey || [[#OverrideSaveDataTransferTokenSignVerificationKey]] | + | | [5.0.0+] 0x29 || 0x8000000240002000<br/>([6.0.0-8.1.0] 0x8000000000000000)<br/>([5.0.0-5.1.0] 0x0000000080000001) || CanListAccessibleSaveDataOwnerId || [[#ListAccessibleSaveDataOwnerId]] |
| |- | | |- |
− | | [5.0.0+] 0x2A || 0x8000000080200000<br/>([1.0.0-5.1.0] 0x0000000080000001) || CanOpenSdCardDetectionEventNotifier || [[#OpenSdCardDetectionEventNotifier]] | + | | [5.0.0+] 0x2A || 0x8000000000000000<br/>([6.0.0-8.1.0] 0x8000000080200000)<br/>([5.0.0-5.1.0] 0x0000000080000001) || CanControlMmcPatrol || SuspendMmcPatrol, ResumeMmcPatrol |
| |- | | |- |
− | | [5.0.0+] 0x2B || 0x8000000080000110<br/>([1.0.0-5.1.0] 0x0000000080000001) || CanOpenGameCardDetectionEventNotifier || [[#OpenGameCardDetectionEventNotifier]] | + | | [5.0.0+] 0x2B || 0x8000000000000000<br/>([6.0.0-8.1.0] 0x8000000080000110)<br/>([5.0.0-5.1.0] 0x0000000080000001) || CanOverrideSaveDataTransferTokenSignVerificationKey || OverrideSaveDataTransferTokenSignVerificationKey |
| |- | | |- |
− | | [5.0.0+] 0x2C || 0x8000000000100008<br/>([1.0.0-5.1.0] 0x0000000080000001) || CanOpenSystemDataUpdateEventNotifier || [[#OpenSystemDataUpdateEventNotifier]] | + | | [5.0.0+] 0x2C || 0x8000000080200000<br/>([6.0.0-8.1.0] 0x8000000000100008)<br/>([5.0.0-5.1.0] 0x0000000080000001) || CanOpenSdCardDetectionEventNotifier || [[#OpenSdCardDetectionEventNotifier]] |
| |- | | |- |
− | | [5.0.0+] 0x2D || 0x8000000000010000<br/>([1.0.0-5.1.0] 0x0000000080000001) || CanNotifySystemDataUpdateEvent || [[#NotifySystemDataUpdateEvent]] | + | | [5.0.0+] 0x2D || 0x8000000080000110<br/>([6.0.0-8.1.0] 0x8000000000010000)<br/>([5.0.0-5.1.0] 0x0000000080000001) || CanOpenGameCardDetectionEventNotifier || [[#OpenGameCardDetectionEventNotifier]] |
| |- | | |- |
− | | [5.0.0+] 0x2E || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanOpenAccessFailureDetectionEventNotifier || [[#OpenAccessFailureResolver]] | + | | [5.0.0+] 0x2E || 0x8000000000100008<br/>([6.0.0-8.1.0] 0x8000000100000000)<br/>([5.0.0-5.1.0] 0x8000000040000000) || CanOpenSystemDataUpdateEventNotifier || OpenSystemDataUpdateEventNotifier |
| |- | | |- |
− | | [5.0.0+] 0x2F || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanGetAccessFailureDetectionEvent || [[#GetAccessFailureDetectionEvent]] | + | | [5.0.0+] 0x2F || 0x8000000000010000<br/>([6.0.0-8.1.0] 0x8000000100000000)<br/>([5.0.0-5.1.0] 0x8000000080200000) || CanNotifySystemDataUpdateEvent || NotifySystemDataUpdateEvent |
| |- | | |- |
− | | [5.1.0+] 0x30 || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000080080000) || CanIsAccessFailureDetected || [[#IsAccessFailureDetected]] | + | | [5.1.0+] 0x30 || 0x8000000100000000<br/>([5.1.0-6.0.0] 0x8000000080080000) || CanOpenAccessFailureDetectionEventNotifier || [[#OpenAccessFailureDetectionEventNotifier]] |
| |- | | |- |
− | | [6.0.0+] 0x31 || 0x8000000100000000 || CanResolveAccessFailure || [[#ResolveAccessFailure]] | + | | [6.0.0+] 0x31 || 0x8000000100000000 || CanGetAccessFailureDetectionEvent || GetAccessFailureDetectionEvent |
| |- | | |- |
− | | [6.0.0+] 0x32 || 0x8000000100000000 || CanAbandonAccessFailure || [[#AbandonAccessFailure]] | + | | [6.0.0+] 0x32 || 0x8000000100000000 || CanIsAccessFailureDetected || IsAccessFailureDetected |
| |- | | |- |
− | | [6.0.0+] 0x33 || 0x8000000040000000 || CanQuerySaveDataInternalStorageTotalSize || [[#QuerySaveDataInternalStorageTotalSize]] | + | | [6.0.0+] 0x33 || 0x8000000100000000<br/>([6.0.0-8.1.0] 0x8000000040000000) || CanResolveAccessFailure || ResolveAccessFailure |
| |- | | |- |
− | | [6.0.0+] 0x34 || 0x8000000200000020 || CanGetSaveDataCommitId || [[#GetSaveDataCommitId]] | + | | [6.0.0+] 0x34 || 0x8000000100000000<br/>([6.0.0-8.1.0] 0x8000000200000020) || CanAbandonAccessFailure || AbandonAccessFailure |
| |- | | |- |
− | | [6.0.0+] 0x35 || 0x8000000000200000 || CanSetSdCardAccessibility || [[#SetSdCardAccessibility]] | + | | [6.0.0+] 0x35 || 0x8000000040000000<br/>([6.0.0-8.1.0] 0x8000000000200000) || CanQuerySaveDataInternalStorageTotalSize || QuerySaveDataInternalStorageTotalSize |
| |- | | |- |
− | | [6.0.0+] 0x36 || 0x4000000000000000 || CanSimulateGameCardDetectionEvent || SimulateGameCardDetectionEvent, SetSimulationEvent, ClearSimulationEvent | + | | [6.0.0+] 0x36 || 0x8000000200000020<br/>([6.0.0-8.1.0] 0x4000000000000000) || CanGetSaveDataCommitId || [[#GetSaveDataCommitId]] |
| |- | | |- |
− | | [6.0.0+] 0x37 || 0x8000000000000000<br/>([6.0.0-6.2.0] 0x8000000000080000) || CanSetDataStorageRedirectTarget || SetDataStorageRedirectTarget | + | | [6.0.0+] 0x37 || 0x8000000000200000<br/>([7.0.0-8.1.0] 0x8000000000000000)<br/>([6.0.0-6.2.0] 0x8000000000080000) || CanSetSdCardAccessibility || SetSdCardAccessibility |
| |- | | |- |
− | | [6.0.0+] 0x38 || 0x8000000400000000<br/>([6.0.0-6.2.0] 0x8000000000000000) || || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemByHashSalt | + | | [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 |
| |- | | |- |
− | | [8.0.0+] 0x39 || 0x8000000000000010 || CanChallengeCardExistence || ChallengeCardExistence | + | | [8.0.0+] 0x39 || 0x8000000000000000<br/>([8.0.0-8.1.0] 0x8000000000000010) || CanCreateSaveDataWithHashSalt || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]] |
| + | |- |
| + | | [9.0.0+] 0x3A || 0x8000000400000000 || CanRegisterProgramIndexMapInfo || RegisterProgramIndexMapInfo |
| + | |- |
| + | | [9.0.0+] 0x3B || 0x8000000000000010 || CanChallengeCardExistence || ChallengeCardExistence |
| + | |- |
| + | | [9.0.0+] 0x3C || 0x8000000800000000 || CanCreateOwnSaveData || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt |
| + | |- |
| + | | [9.0.0+] 0x3D || 0x8000000800000000 || CanReadOwnSaveDataFileSystemExtraData || [[#ReadSaveDataFileSystemExtraData]] |
| + | |- |
| + | | [9.0.0+] 0x3E || 0x8000000800000000 || CanExtendOwnSaveData || ExtendSaveDataFileSystem |
| + | |- |
| + | | [9.0.0+] 0x3F || 0x8000000800000000 || CanOpenOwnSaveDataTransferProhibiter || [[#OpenSaveDataTransferProhibiter]] |
| + | |- |
| + | | [9.0.0+] 0x40 || 0x8000000800000000 || CanFindOwnSaveDataWithFilter || [[#FindSaveDataWithFilter]] |
| |} | | |} |
| | | |
Line 538: |
Line 571: |
| | | |
| == CreateSaveDataFileSystem == | | == CreateSaveDataFileSystem == |
− | Takes a 0x40-byte Save-struct entry, a 0x40-byte SaveCreate-struct entry, and a 0x10-byte input struct. | + | Takes a 0x40-byte [[#SaveDataAttribute]], a 0x40-byte [[#SaveDataCreationInfo]], and a 0x10-byte input struct. |
| | | |
| 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. | | 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. |
Line 545: |
Line 578: |
| | | |
| == CreateSaveDataFileSystemBySystemSaveDataId == | | == CreateSaveDataFileSystemBySystemSaveDataId == |
− | Takes a 0x40-byte Save-struct entry and a 0x40-byte SaveCreate-struct entry. | + | Takes a 0x40-byte [[#SaveDataAttribute]] and a 0x40-byte [[#SaveDataCreationInfo]]. |
| | | |
| Creates savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition. | | Creates savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition. |
Line 556: |
Line 589: |
| | | |
| Mounts a [[Gamecard_Partition|gamecard partition]]. | | Mounts a [[Gamecard_Partition|gamecard partition]]. |
| + | |
| + | == CreateSaveDataFileSystemWithHashSalt == |
| + | Takes a total of 0xB0-bytes of input, no output. |
| | | |
| == OpenSaveDataFileSystem == | | == OpenSaveDataFileSystem == |
− | Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte Save-struct entry. Official user-process code is only known to use value 1 for the u8. | + | Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]]. Official user-process code is only known to use value 1 for the u8. |
| | | |
| Returns an [[#IFileSystem]]. | | Returns an [[#IFileSystem]]. |
Line 567: |
Line 603: |
| | | |
| == OpenSaveDataFileSystemBySystemSaveDataId == | | == OpenSaveDataFileSystemBySystemSaveDataId == |
− | Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte Save-struct entry. Web-applet only uses value0 for the input u8. | + | Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]]. Web-applet only uses value0 for the input u8. |
| | | |
| Returns an [[#IFileSystem]]. | | Returns an [[#IFileSystem]]. |
Line 584: |
Line 620: |
| == OpenSaveDataInfoReaderBySaveDataSpaceId == | | == OpenSaveDataInfoReaderBySaveDataSpaceId == |
| Takes an input u8 [[#SaveDataSpaceId]], returns an output [[#ISaveDataInfoReader]]. | | Takes an input u8 [[#SaveDataSpaceId]], returns an output [[#ISaveDataInfoReader]]. |
| + | |
| + | == FindSaveDataWithFilter == |
| + | Takes a total of 0x50-bytes of input, returns 8-bytes of output and a type-0x6 output buffer. |
| + | |
| + | == OpenSaveDataInfoReaderWithFilter == |
| + | Takes a total of 0x50-bytes of input, returns an [[#ISaveDataInfoReader]]. |
| + | |
| + | == OpenSaveDataTransferManager == |
| + | No input, returns an [[#ISaveDataTransferManager]]. |
| + | |
| + | == OpenSaveDataTransferManagerVersion2 == |
| + | No input, returns an [[#ISaveDataTransferManagerWithDivision]]. |
| + | |
| + | == OpenSaveDataTransferProhibiter == |
| + | Takes an input u64, returns an [[#ISaveDataTransferProhibiter]]. |
| + | |
| + | == ListAccessibleSaveDataOwnerId == |
| + | Takes a total of 0x10-bytes of input, returns 4-bytes of output and a type-0x6 output buffer. |
| + | |
| + | == OpenSaveDataTransferManagerForSaveDataRepair == |
| + | No input, returns an output [[#ISaveDataTransferManagerForSaveDataRepair]]. |
| | | |
| == OpenContentStorageFileSystem == | | == OpenContentStorageFileSystem == |
Line 589: |
Line 646: |
| | | |
| Returns an [[#IFileSystem]] with NCA files. The read data from these files is identical to the data read by [[NCM_services#ReadContentIdFile]]. | | Returns an [[#IFileSystem]] with NCA files. The read data from these files is identical to the data read by [[NCM_services#ReadContentIdFile]]. |
| + | |
| + | == OpenCloudBackupWorkStorageFileSystem == |
| + | Takes 4-bytes of input, returns an [[#IFileSystem]]. |
| + | |
| + | == OpenCustomStorageFileSystem == |
| + | Takes a [[#CustomStorageId]]. Invalid values return 0x2EE202. |
| + | |
| + | Returns an [[#IFileSystem]] from either User:/CustomStorage0 or Sdcard:/Nintendo/CustomStorage0. If on the SD card, an AesXtsFileSystem is created using a key source specifically for custom storage. |
| | | |
| == OpenDataStorageByDataId == | | == OpenDataStorageByDataId == |
− | Takes a [[#StorageId]] and a TitleID. | + | Takes a [[NCM_services#StorageId|StorageID]] and a TitleID. |
| | | |
| Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives. | | Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives. |
| + | |
| + | == OpenDataFileSystemWithProgramIndex == |
| + | Takes an input u8, returns an [[#IFileSystem]]. |
| + | |
| + | == OpenDataStorageWithProgramIndex == |
| + | Takes an input u8, returns an [[#IStorage]]. |
| | | |
| == OpenDeviceOperator == | | == OpenDeviceOperator == |
Line 603: |
Line 674: |
| == OpenGameCardDetectionEventNotifier == | | == OpenGameCardDetectionEventNotifier == |
| This command returns a session to a port implementing the [[#IEventNotifier]] interface. | | This command returns a session to a port implementing the [[#IEventNotifier]] interface. |
| + | |
| + | == SimulateDeviceDetectionEvent == |
| + | Takes a total of 0xC-bytes of input, no output. |
| | | |
| == VerifySaveDataFileSystem == | | == VerifySaveDataFileSystem == |
Line 617: |
Line 691: |
| [[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). | | [[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). |
| | | |
− | == OpenAccessFailureResolver == | + | == OpenAccessFailureDetectionEventNotifier == |
| Takes 8-bytes of input and returns an [[#IEventNotifier]]. | | Takes 8-bytes of input and returns an [[#IEventNotifier]]. |
| | | |
Line 655: |
Line 729: |
| | | |
| 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). | | The input buffer is written to the "$FsAccessLog:/FsAccessLog.txt" file, where "$FsAccessLog" is the SD-card mount-name. It's written to the current end of the file(appended). |
| + | |
| + | == GetProgramIndexForAccessLog == |
| + | No input, returns two 32-bit values "version" and "program_index". |
| + | |
| + | == OpenMultiCommitManager == |
| + | No input, returns an output [[#IMultiCommitManager]]. |
| | | |
| = IStorage = | | = IStorage = |
Line 663: |
Line 743: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name || Arguments | + | ! Cmd || Name |
| |- | | |- |
− | | 0 || Read || Takes a type-0x46 buffer, an offset and length | + | | 0 || [[#Read]] |
| |- | | |- |
− | | 1 || Write || Takes a type-0x45 buffer, an offset and length | + | | 1 || [[#Write]] |
| |- | | |- |
− | | 2 || Flush || None | + | | 2 || [[#Flush]] |
| |- | | |- |
− | | 3 || SetSize || Takes a size | + | | 3 || [[#SetSize]] |
| |- | | |- |
− | | 4 || GetSize || None | + | | 4 || [[#GetSize]] |
| |- | | |- |
− | | 5 || [4.0.0+] OperateRange || | + | | 5 || [4.0.0+] OperateRange |
| |} | | |} |
| + | |
| + | == Read == |
| + | Takes a type-0x46 buffer, an offset and length. |
| + | |
| + | == Write == |
| + | Takes a type-0x45 buffer, an offset and length. |
| + | |
| + | == Flush == |
| + | No input. |
| + | |
| + | == SetSize == |
| + | Takes a size. |
| + | |
| + | == GetSize == |
| + | Returns a size. |
| | | |
| = IFileSystem = | | = IFileSystem = |
Line 877: |
Line 972: |
| | 116 || [4.0.0+] ResumeMmcPatrol | | | 116 || [4.0.0+] ResumeMmcPatrol |
| |- | | |- |
− | | 200 || IsGameCardInserted | + | | 200 || [[#IsGameCardInserted]] |
| |- | | |- |
| | 201 || EraseGameCard | | | 201 || EraseGameCard |
| |- | | |- |
− | | 202 || GetGameCardHandle | + | | 202 || [[#GetGameCardHandle]] |
| |- | | |- |
| | 203 || [[#GetGameCardUpdatePartitionInfo]] | | | 203 || [[#GetGameCardUpdatePartitionInfo]] |
Line 889: |
Line 984: |
| | 205 || GetGameCardAttribute | | | 205 || GetGameCardAttribute |
| |- | | |- |
− | | 206 || GetGameCardDeviceCertificate | + | | 206 || [[#GetGameCardDeviceCertificate]] |
| |- | | |- |
| | 207 || GetGameCardAsicInfo | | | 207 || GetGameCardAsicInfo |
Line 895: |
Line 990: |
| | 208 || GetGameCardIdSet | | | 208 || GetGameCardIdSet |
| |- | | |- |
− | | 209 || WriteToGameCard | + | | 209 || WriteToGameCardDirectly |
| |- | | |- |
| | 210 || SetVerifyWriteEnalbleFlag | | | 210 || SetVerifyWriteEnalbleFlag |
Line 915: |
Line 1,010: |
| | 218 || [3.0.0+] GetGameCardDeviceId | | | 218 || [3.0.0+] GetGameCardDeviceId |
| |- | | |- |
− | | 219 || [8.0.0+] ChallengeCardExistence | + | | 219 || [8.0.0+] [[#ChallengeCardExistence]] |
| + | |- |
| + | | 220 || [9.0.0+] [[#GetGameCardCompatibilityType]] |
| |- | | |- |
| | 300 || SetSpeedEmulationMode | | | 300 || SetSpeedEmulationMode |
Line 925: |
Line 1,022: |
| | 401 || [5.0.0+] ResumeSdmmcControl | | | 401 || [5.0.0+] ResumeSdmmcControl |
| |- | | |- |
− | | 402 || [6.0.0+] GetSdmmcConnectionStatus (Takes a total of 4-bytes of input, returns a total of 8-bytes of output) | + | | 402 || [6.0.0+] [[#GetSdmmcConnectionStatus]] |
| |- | | |- |
− | | 500 || [6.0.0+] SetSimulationEvent (Takes a total of 0x14-bytes of input, no output) | + | | 500 || [6.0.0+] [[#SetDeviceSimulationEvent]] |
| |- | | |- |
− | | 501 || [6.0.0+] ClearSimulationEvent (Takes a total of 4-bytes of input, no output) | + | | 501 || [6.0.0+] [[#ClearDeviceSimulationEvent]] |
| |} | | |} |
| + | |
| + | == IsGameCardInserted == |
| + | No input, returns a bool. |
| + | |
| + | == GetGameCardHandle == |
| + | No input, returns an u32 '''GameCardHandle'''. |
| | | |
| == GetGameCardUpdatePartitionInfo == | | == GetGameCardUpdatePartitionInfo == |
Line 939: |
Line 1,042: |
| | | |
| [[NS_Services|NS]] appears to only use this with [[Content_Manager_services#GetTitleIdInfo]] and [[Content_Manager_services#GetUpdateTitleList]] with storageid=nandsys, for checking whether a sysupdate is required. | | [[NS_Services|NS]] appears to only use this with [[Content_Manager_services#GetTitleIdInfo]] and [[Content_Manager_services#GetUpdateTitleList]] with storageid=nandsys, for checking whether a sysupdate is required. |
| + | |
| + | == GetGameCardDeviceCertificate == |
| + | Takes a type-0x6 output buffer, an u32 '''GameCardHandle''' and an u64 '''DeviceCertificateBufferSize'''. No output. |
| + | |
| + | == ChallengeCardExistence == |
| + | Takes a type-0x6 output buffer, two type-0x5 input buffers and an u32 '''GameCardHandle'''. No output. |
| + | |
| + | [9.0.0+] The [[Account_services|account]] system module uses this as part of a new challenge-response mechanism for [[Network#aauth|application authentication]]. |
| + | |
| + | == GetGameCardCompatibilityType == |
| + | Takes an u32 '''GameCardHandle''', returns an u8 '''CompatibilityType''' (0x00 = Global, 0x01 = China) from [[Gamecard_Format#Gamecard_Info|Gamecard Info]]. |
| + | |
| + | == GetSdmmcConnectionStatus == |
| + | Takes a total of 4-bytes of input, returns a total of 8-bytes of output. |
| + | |
| + | == SetDeviceSimulationEvent == |
| + | Takes a total of 0x14-bytes of input, no output. |
| + | |
| + | == ClearDeviceSimulationEvent == |
| + | Takes a total of 4-bytes of input, no output. |
| | | |
| = IEventNotifier = | | = IEventNotifier = |
Line 947: |
Line 1,070: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || GetEventHandle | + | | 0 || [[#GetEventHandle]] |
| |} | | |} |
| + | |
| + | == GetEventHandle == |
| + | No input, returns an output Event handle. With official sw the EventClearMode is user-specified. |
| | | |
| = ISaveDataTransferManager = | | = ISaveDataTransferManager = |
| This is "nn::fssrv::sf::ISaveDataTransferManager". | | This is "nn::fssrv::sf::ISaveDataTransferManager". |
| + | |
| + | This was added with [[4.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 965: |
Line 1,093: |
| | 64 || [[#OpenSaveDataImporter]] | | | 64 || [[#OpenSaveDataImporter]] |
| |} | | |} |
− |
| |
− | This was added with [[4.0.0]].
| |
| | | |
| == GetChallenge == | | == GetChallenge == |
Line 979: |
Line 1,105: |
| == OpenSaveDataImporter == | | == OpenSaveDataImporter == |
| Takes an input u8 [[#SaveDataSpaceId]] and a 0x10-byte userID, and a type-0x5 input buffer. Returns an output u64 and an [[#ISaveDataImporter]]. | | Takes an input u8 [[#SaveDataSpaceId]] and a 0x10-byte userID, and a type-0x5 input buffer. Returns an output u64 and an [[#ISaveDataImporter]]. |
| + | |
| + | = ISaveDataTransferManagerForSaveDataRepair = |
| + | This is "nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair". |
| + | |
| + | This was added with [[9.0.0]]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#GetChallenge]] |
| + | |- |
| + | | 16 || [[#SetKeyPackage]] |
| + | |- |
| + | | 80 || [[#OpenSaveDataExporterAndGetEncryptedKey]] |
| + | |- |
| + | | 81 || [[#PrepareOpenSaveDataImporter]] |
| + | |- |
| + | | 90 || [[#OpenSaveDataImporter]] |
| + | |- |
| + | | 91 || [[#OpenSaveDataImporter2]] |
| + | |- |
| + | | 100 || [[#OpenSaveDataExporterWithKey]] |
| + | |- |
| + | | 110 || [[#OpenSaveDataImporterWithKey]] |
| + | |} |
| + | |
| + | == SetKeyPackage == |
| + | No input/output, takes a type-0x5 input buffer. |
| + | |
| + | == OpenSaveDataExporterAndGetEncryptedKey == |
| + | Takes a total of 0x10-bytes of input and a type-0x1A output buffer to receive a RsaEncryptedKey. Returns an [[#ISaveDataDivisionExporter]]. |
| + | |
| + | == PrepareOpenSaveDataImporter == |
| + | Takes a type-0x1A output buffer to receive a RsaEncryptedKey. |
| + | |
| + | == OpenSaveDataImporter == |
| + | Takes a total of 0x18-bytes of input and two type-0x5 input buffers, returns an [[#ISaveDataDivisionImporter]]. |
| + | |
| + | == OpenSaveDataImporter2 == |
| + | Takes a total of 0x18-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| + | |
| + | == OpenSaveDataExporterWithKey == |
| + | Takes a total of 0x20-bytes of input, returns an [[#ISaveDataDivisionExporter]]. |
| + | |
| + | == OpenSaveDataImporterWithKey == |
| + | Takes a total of 0x28-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| | | |
| = ISaveDataExporter = | | = ISaveDataExporter = |
| This is "nn::fssrv::sf::ISaveDataExporter". | | This is "nn::fssrv::sf::ISaveDataExporter". |
| + | |
| + | This was added with [[4.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 987: |
Line 1,162: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#Initialize]] | + | | 0 || [[#GetSaveDataInfo]] |
| |- | | |- |
| | 1 || [[#GetRestSize]] | | | 1 || [[#GetRestSize]] |
Line 996: |
Line 1,171: |
| |} | | |} |
| | | |
− | This was added with [[4.0.0]].
| + | == GetSaveDataInfo == |
− | | |
− | == Initialize == | |
| No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer. | | No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer. |
| | | |
Line 1,014: |
Line 1,187: |
| = ISaveDataImporter = | | = ISaveDataImporter = |
| This is "nn::fssrv::sf::ISaveDataImporter". | | This is "nn::fssrv::sf::ISaveDataImporter". |
| + | |
| + | This was added with [[4.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,019: |
Line 1,194: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#Initialize]] | + | | 0 || [[#GetSaveDataInfo]] |
| |- | | |- |
| | 1 || [[#GetRestSize]] | | | 1 || [[#GetRestSize]] |
Line 1,028: |
Line 1,203: |
| |} | | |} |
| | | |
− | This was added with [[4.0.0]].
| + | == GetSaveDataInfo == |
− | | + | No input/output, takes a type-0x1A [[#GetSaveDataInfo]] output buffer. |
− | == Initialize == | |
− | No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer. | |
| | | |
| The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw. | | The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw. |
Line 1,046: |
Line 1,219: |
| = ISaveDataTransferManagerWithDivision = | | = ISaveDataTransferManagerWithDivision = |
| This is "nn::fssrv::sf::ISaveDataTransferManagerWithDivision". | | This is "nn::fssrv::sf::ISaveDataTransferManagerWithDivision". |
| + | |
| + | This was added with [[5.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,055: |
Line 1,230: |
| | 16 || [[#SetKeySeedPackage]] | | | 16 || [[#SetKeySeedPackage]] |
| |- | | |- |
− | | 32 || [[#OpenSaveDataFullExporter]] | + | | 32 || [[#OpenSaveDataExporter]] |
| |- | | |- |
− | | 33 || [[#OpenSaveDataDiffExporter]] | + | | 33 || [[#OpenSaveDataExporterForDiffExport]] |
| |- | | |- |
| | 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]] | | | 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]] |
| |- | | |- |
− | | 64 || [[#OpenSaveDataFullImporter]] | + | |rowspan="2"| 64 || [5.0.0-5.1.0] OpenSaveDataImporter |
| + | |- |
| + | | [6.0.0+] [[#OpenSaveDataImporterDeprecated]] |
| |- | | |- |
− | | 65 || [[#OpenSaveDataDiffImporter]] | + | | 65 || [[#OpenSaveDataImporterForDiffImport]] |
| |- | | |- |
− | | 66 || [6.0.0+] [[#OpenSaveDataDuplicateDiffImporter]] | + | | 66 || [6.0.0+] [[#OpenSaveDataImporterForDuplicateDiffImport]] |
| |- | | |- |
| | 67 || [6.0.0+] [[#OpenSaveDataImporter]] | | | 67 || [6.0.0+] [[#OpenSaveDataImporter]] |
Line 1,073: |
Line 1,250: |
| | 69 || [6.0.0+] [[#CancelSuspendingImport]] | | | 69 || [6.0.0+] [[#CancelSuspendingImport]] |
| |} | | |} |
− |
| |
− | This was added with [[5.0.0]].
| |
| | | |
| == GetChallenge == | | == GetChallenge == |
Line 1,082: |
Line 1,257: |
| No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''. | | No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''. |
| | | |
− | == OpenSaveDataFullExporter == | + | == OpenSaveDataExporter == |
| Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]]. | | Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]]. |
| | | |
− | == OpenSaveDataDiffExporter == | + | == OpenSaveDataExporterForDiffExport == |
| Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]]. | | Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]]. |
| | | |
Line 1,091: |
Line 1,266: |
| No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]]. | | No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]]. |
| | | |
− | == OpenSaveDataFullImporter == | + | == OpenSaveDataImporterDeprecated == |
| Takes an input u8 [[#SaveDataSpaceId]], a 0x10-byte userID, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionImporter]]. | | Takes an input u8 [[#SaveDataSpaceId]], a 0x10-byte userID, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionImporter]]. |
| | | |
− | == OpenSaveDataDiffImporter == | + | == OpenSaveDataImporterForDiffImport == |
| Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]], returns an [[#ISaveDataDivisionImporter]]. | | Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]], returns an [[#ISaveDataDivisionImporter]]. |
| | | |
− | == OpenSaveDataDuplicateDiffImporter == | + | == OpenSaveDataImporterForDuplicateDiffImport == |
| Takes an input u8 and an u64, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. | | Takes an input u8 and an u64, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]]. |
| | | |
Line 1,111: |
Line 1,286: |
| = ISaveDataDivisionExporter = | | = ISaveDataDivisionExporter = |
| This is "nn::fssrv::sf::ISaveDataDivisionExporter". | | This is "nn::fssrv::sf::ISaveDataDivisionExporter". |
| + | |
| + | This was added with [[5.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,116: |
Line 1,293: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || SetDivisionCount (Takes an input u32, no output) | + | | 0 || [[#SetDivisionCount]] |
| |- | | |- |
− | | 1 || [6.0.0+] GetSaveDataInfo (No input/output, takes a type-0x6 output buffer) | + | | 1 || [6.0.0+] [[#GetSaveDataInfo]] |
| |- | | |- |
− | | 16 || OpenSaveDataDiffChunkIterator (No input, returns an [[#ISaveDataChunkIterator]]) | + | | 16 || [[#OpenSaveDataDiffChunkIterator]] |
| |- | | |- |
− | | 48 || OpenSaveDataChunkExporter (Takes an input u32, returns an [[#ISaveDataChunkExporter]]) | + | | 48 || [[#OpenSaveDataChunkExporter]] |
| |- | | |- |
− | | 64 || [6.0.0+] FinalizeFullExport (No input, returns two 0x10-byte output structs) | + | | 64 || [6.0.0-8.1.0] [[#FinalizeFullExport]] |
| |- | | |- |
− | | 65 || [6.0.0+] FinalizeDiffExport (No input, returns an output 0x10-byte struct) | + | | 65 || [6.0.0-8.1.0] [[#FinalizeDiffExport]] |
| |- | | |- |
− | | 66 || [6.0.0+] CancelExport (No input/output) | + | | 66 || [6.0.0+] [[#CancelExport]] |
| |- | | |- |
− | | 67 || [6.0.0+] SuspendExport (No input/output, takes a type-0x6 output buffer) | + | | 67 || [6.0.0+] [[#SuspendExport]] |
| |- | | |- |
− | | 70 || [6.0.0+] GetKeySeed (No input, returns an output 0x10-byte struct) | + | | 70 || [6.0.0+] [[#GetKeySeed]] |
| |- | | |- |
− | | 71 || [6.0.0+] GetInitialDataMac (No input, returns an output 0x10-byte struct) | + | | 71 || [6.0.0+] [[#GetInitialDataMac]] |
| |- | | |- |
− | | 72 || [6.0.0+] FinalizeExport (No input/output) | + | | 72 || [6.0.0+] [[#FinalizeExport]] |
| |- | | |- |
− | | 80 || [6.0.0+] GetImportInitialDataAad (No input, returns an output 0x20-byte struct) | + | | 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]] |
| |- | | |- |
− | | 81 || [6.0.0+] SetExportInitialDataAad (Takes an input 0x20-byte struct, no output) | + | | 80 || [6.0.0+] [[#GetImportInitialDataAad]] |
| |- | | |- |
− | | 96 || [6.0.0+] GetReportInfo (No input, returns an output 0x20-byte struct) | + | | 81 || [6.0.0+] [[#SetExportInitialDataAad]] |
| + | |- |
| + | | 96 || [6.0.0+] [[#GetReportInfo]] |
| |} | | |} |
| | | |
− | This was added with [[5.0.0]].
| + | == 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 = | | = ISaveDataDivisionImporter = |
| This is "nn::fssrv::sf::ISaveDataDivisionImporter". | | This is "nn::fssrv::sf::ISaveDataDivisionImporter". |
| + | |
| + | This was added with [[5.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,154: |
Line 1,363: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [6.0.0+] GetSaveDataInfo (No input/output, takes a type-0x6 output buffer) | + | | 0 || [6.0.0+] [[#GetSaveDataInfo]] |
| |- | | |- |
− | | 16 || OpenSaveDataDiffChunkIterator (No input, returns an [[#ISaveDataChunkIterator]]) | + | | 16 || [[#OpenSaveDataDiffChunkIterator]] |
| |- | | |- |
− | | 32 || InitializeImport (No input, returns an output u64) | + | | 32 || [[#InitializeImport]] |
| |- | | |- |
− | | 33 || FinalizeImport (No input/output) | + | | 33 || [[#FinalizeImport]] |
| |- | | |- |
− | | 34 || [6.0.0+] CancelImport (No input/output) | + | | 34 || [6.0.0+] [[#CancelImport]] |
| |- | | |- |
− | | 35 || [6.0.0+] GetImportContext (No input/output, takes a type-0x6 output buffer) | + | | 35 || [6.0.0+] [[#GetImportContext]] |
| |- | | |- |
− | | 36 || [6.0.0+] SuspendImport (No input/output) | + | | 36 || [6.0.0+] [[#SuspendImport]] |
| |- | | |- |
− | | 48 || OpenSaveDataChunkImporter (Takes an input u32, returns an [[#ISaveDataChunkImporter]]) | + | | 48 || [[#OpenSaveDataChunkImporter]] |
| |- | | |- |
− | | 64 || [6.0.0+] GetImportInitialDataAad (No input, returns an output 0x20-byte struct) | + | | 64 || [6.0.0+] [[#GetImportInitialDataAad]] |
| |- | | |- |
− | | 80 || [6.0.0+] GetReportInfo (No input, returns an output 0x20-byte struct) | + | | 80 || [6.0.0+] [[#GetReportInfo]] |
| |} | | |} |
| | | |
− | This was added with [[5.0.0]].
| + | == 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 = | | = ISaveDataChunkIterator = |
| This is "nn::fssrv::sf::ISaveDataChunkIterator". | | This is "nn::fssrv::sf::ISaveDataChunkIterator". |
| + | |
| + | This was added with [[5.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,184: |
Line 1,423: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || Next (No input/output) | + | | 0 || [[#Next]] |
| |- | | |- |
− | | 1 || IsEnd (No input, returns an output u8) | + | | 1 || [[#IsEnd]] |
| |- | | |- |
− | | 16 || GetId (No input, returns an output u32) | + | | 16 || [[#GetId]] |
| |} | | |} |
| | | |
− | This was added with [[5.0.0]].
| + | == Next == |
| + | No input/output. |
| + | |
| + | == IsEnd == |
| + | No input, returns an output u8. |
| + | |
| + | == GetId == |
| + | No input, returns an output u32. |
| | | |
| = ISaveDataChunkExporter = | | = ISaveDataChunkExporter = |
| This is "nn::fssrv::sf::ISaveDataChunkExporter". | | This is "nn::fssrv::sf::ISaveDataChunkExporter". |
| + | |
| + | This was added with [[5.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,200: |
Line 1,448: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || Pull (Takes an input u64 and a type-0x6 output buffer, returns an output u64) | + | | 0 || [[#Pull]] |
− | |-
| |
− | | 16 || [6.0.0+] GetRestRawDataSize (No input, returns an output u64)
| |
| |- | | |- |
| + | | 16 || [6.0.0+] [[#GetRestRawDataSize]] |
| |} | | |} |
| | | |
− | This was added with [[5.0.0]].
| + | == Pull == |
| + | Takes an input u64 and a type-0x6 output buffer, returns an output u64. |
| + | |
| + | == GetRestRawDataSize == |
| + | No input, returns an output u64. |
| | | |
| = ISaveDataChunkImporter = | | = ISaveDataChunkImporter = |
| This is "nn::fssrv::sf::ISaveDataChunkImporter". | | This is "nn::fssrv::sf::ISaveDataChunkImporter". |
| + | |
| + | This was added with [[5.0.0]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,215: |
Line 1,468: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || Push (Takes an input u64 and a type-0x5 input buffer, no output) | + | | 0 || [[#Push]] |
| |} | | |} |
| | | |
− | This was added with [[5.0.0]].
| + | == Push == |
| + | Takes an input u64 and a type-0x5 input buffer, no output. |
| | | |
| = ISaveDataTransferProhibiter = | | = ISaveDataTransferProhibiter = |
Line 1,226: |
Line 1,480: |
| | | |
| = IMultiCommitManager = | | = IMultiCommitManager = |
| + | This was added with [[6.0.0]]. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 1 || ? (Takes an input [[#IFilesystem]], no output) | + | | 1 || [[#Add]] |
| |- | | |- |
− | | 2 || ? (No input/output) | + | | 2 || [[#Commit]] |
| |} | | |} |
| | | |
− | This was added with [[6.0.0]].
| + | == Add == |
| + | Takes an input [[#IFilesystem]], no output. |
| + | |
| + | == Commit == |
| + | No input/output. |
| | | |
| = FileSystemType = | | = FileSystemType = |
Line 1,257: |
Line 1,517: |
| |- | | |- |
| | 7 || ApplicationPackage | | | 7 || ApplicationPackage |
− | |}
| |
− |
| |
− | = StorageId =
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Value || Name
| |
− | |-
| |
− | | 0 || None
| |
| |- | | |- |
− | | 1 || Host | + | | 8 || RegisteredUpdate |
− | |-
| |
− | | 2 || GameCard
| |
− | |-
| |
− | | 3 || NandSystem
| |
− | |-
| |
− | | 4 || NandUser
| |
− | |-
| |
− | | 5 || SdCard
| |
| |} | | |} |
| | | |
Line 1,310: |
Line 1,554: |
| | | |
| = SaveDataType = | | = SaveDataType = |
| + | This is "nn::fs::SaveDataType". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,340: |
Line 1,586: |
| | | |
| = CloudBackupWorkStorageId = | | = CloudBackupWorkStorageId = |
| + | This is "nn::fs::CloudBackupWorkStorageId". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value || Name |
| + | |- |
| + | | 0 || Nand |
| + | |- |
| + | | 1 || SdCard |
| + | |} |
| + | |
| + | = CustomStorageId = |
| + | This is "nn::fs::CustomStorageId". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,376: |
Line 1,636: |
| | @GcApp || Gamecard App partition (Partition 2) | | | @GcApp || Gamecard App partition (Partition 2) |
| |- | | |- |
− | | @GcS00000001 || Gamecard Contents. | + | | @GcXYYYYYYYY || Gamecard Contents. X is the partition type (U - Update, N - Normal, S - Secure). Y is the gamecard handle as a 32-bit hex value |
| |- | | |- |
| | @upp || Gamecard update partition (Partition 0) | | | @upp || Gamecard update partition (Partition 0) |
Line 1,383: |
Line 1,643: |
| |} | | |} |
| | | |
− | = Save Struct = | + | = SaveDataAttribute = |
| + | This is "nn::fs::SaveDataAttribute". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,435: |
Line 1,697: |
| For DeviceSaveData, this struct is all-zero except for the [[#SaveDataType]] field. | | For DeviceSaveData, this struct is all-zero except for the [[#SaveDataType]] field. |
| | | |
− | = SaveCreate Struct = | + | = SaveDataCreationInfo = |
| + | This is "nn::fs::SaveDataCreationInfo". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,478: |
Line 1,742: |
| | | |
| = DeviceSaveData = | | = DeviceSaveData = |
− | This is accessed using the same commands for SaveData with the same input u8, the only difference compared to SaveData is the Save-struct. | + | This is accessed using the same commands for SaveData with the same input u8, the only difference compared to SaveData is the [[#SaveDataAttribute]]. |
| | | |
| = BcatSaveData = | | = BcatSaveData = |
− | This is accessed using the same commands for SaveData with the same input u8. The Save-struct is the same as DeviceSaveData, except that the titleID field is set to <input titleID>. See above regarding SaveCreate-struct. | + | This is accessed using the same commands for SaveData with the same input u8. The [[#SaveDataAttribute]] is the same as DeviceSaveData, except that the titleID field is set to <input titleID>. See above regarding [[#SaveDataCreationInfo]]. |
| | | |
| The 0x10-byte struct passed to [[#CreateSaveDataFileSystem]] has the first 0x5-bytes set to all-zero. | | The 0x10-byte struct passed to [[#CreateSaveDataFileSystem]] has the first 0x5-bytes set to all-zero. |