Filesystem services: Difference between revisions
Moosehunter (talk | contribs) |
No edit summary |
||
Line 59: | Line 59: | ||
| 8 || [2.0.0+] [[#OpenFileSystemWithId]] | | 8 || [2.0.0+] [[#OpenFileSystemWithId]] | ||
|- | |- | ||
| 9 || [3.0.0+] | | 9 || [3.0.0+] OpenDataFileSystemByProgramId | ||
|- | |- | ||
| 11 || [[#OpenBisFileSystem]] | | 11 || [[#OpenBisFileSystem]] | ||
Line 117: | Line 117: | ||
| 61 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]] | | 61 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]] | ||
|- | |- | ||
| 62 || [5.0.0+] | | 62 || [5.0.0+] OpenSaveDataInfoReaderOnlyCacheStorage | ||
|- | |- | ||
| 64 || [5.0.0+] OpenSaveDataInternalStorageFileSystem | | 64 || [5.0.0+] OpenSaveDataInternalStorageFileSystem | ||
Line 123: | Line 123: | ||
| 65 || [5.0.0+] UpdateSaveDataMacForDebug | | 65 || [5.0.0+] UpdateSaveDataMacForDebug | ||
|- | |- | ||
| 66 || [5.0.0+] | | 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 (Takes a total of 0x50-bytes of input, returns 8-bytes of output, and a type-0x6 output buffer) | ||
|- | |- | ||
| 68 || [6.0.0+] | | 68 || [6.0.0+] OpenSaveDataInfoReaderWithFilter (Takes a total of 0x50-bytes of input, returns an #ISaveDataInfoReader) | ||
|- | |- | ||
| 69 || [8.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataAttribute | | 69 || [8.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataAttribute | ||
Line 159: | Line 159: | ||
| 203 || OpenPatchDataStorageByCurrentProcess | | 203 || OpenPatchDataStorageByCurrentProcess | ||
|- | |- | ||
| 204 || [7.0.0+] | | 204 || [7.0.0+] OpenDataFileSystemWithProgramIndex (Takes an input u8, returns an [[#IFileSystem]]) | ||
|- | |- | ||
| 205 || [7.0.0+] | | 205 || [7.0.0+] OpenDataStorageWithProgramIndex (Takes an input u8, returns an [[#IStorage]]) | ||
|- | |- | ||
| 400 || [[#OpenDeviceOperator]] | | 400 || [[#OpenDeviceOperator]] | ||
Line 173: | Line 173: | ||
| 511 || [5.0.0+] NotifySystemDataUpdateEvent | | 511 || [5.0.0+] NotifySystemDataUpdateEvent | ||
|- | |- | ||
| 520 || [6.0.0+] | | 520 || [6.0.0+] SimulateDeviceDetectionEvent (Takes a total of 0xC-bytes of input, no output) | ||
|- | |- | ||
| 600 || [1.0.0-3.0.2] SetCurrentPosixTime | | 600 || [1.0.0-3.0.2] SetCurrentPosixTime | ||
Line 219: | Line 219: | ||
| 640 || [4.0.0-7.0.1] IsSignedSystemPartitionOnSdCardValid | | 640 || [4.0.0-7.0.1] IsSignedSystemPartitionOnSdCardValid | ||
|- | |- | ||
| 700 || [5.0.0+] [[# | | 700 || [5.0.0+] [[#OpenAccessFailureDetectionEventNotifier]] | ||
|- | |- | ||
| 701 || [5.0.0+] GetAccessFailureDetectionEvent | | 701 || [5.0.0+] GetAccessFailureDetectionEvent | ||
Line 229: | Line 229: | ||
| 720 || [5.0.0+] AbandonAccessFailure | | 720 || [5.0.0+] AbandonAccessFailure | ||
|- | |- | ||
| 800 || [2.0.0+] | | 800 || [2.0.0+] GetAndClearErrorInfo | ||
|- | |- | ||
| 810 || [7.0.0+] RegisterProgramIndexMapInfo | | 810 || [7.0.0+] RegisterProgramIndexMapInfo | ||
Line 255: | Line 255: | ||
| 1010 || [5.1.0-6.2.0] SetDataStorageRedirectTarget | | 1010 || [5.1.0-6.2.0] SetDataStorageRedirectTarget | ||
|- | |- | ||
| 1011 || [7.0.0+] | | 1011 || [7.0.0+] GetProgramIndexForAccessLog (No input, returns two 32-bit values "version" and "program_index") | ||
|- | |- | ||
| 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey | | 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey | ||
|- | |- | ||
| 1110 || [6.0.0+] | | 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset | ||
|- | |- | ||
| 1200 || [6.0.0+] OpenMultiCommitManager (No input, returns an output #IMultiCommitManager) | | 1200 || [6.0.0+] OpenMultiCommitManager (No input, returns an output #IMultiCommitManager) | ||
Line 402: | Line 402: | ||
| 0xC || 0x8000000000004020 || CanOpenSaveDataInfoReaderForSystem || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | | 0xC || 0x8000000000004020 || CanOpenSaveDataInfoReaderForSystem || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]] | ||
|- | |- | ||
| 0xD || 0x8000000000000040<br/>([1.0.0-5.1.0] 0x8000000000020000) || | | 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]] | ||
Line 434: | Line 434: | ||
| [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/>([1.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]], [[# | | [4.0.0+] 0x1D || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000000)<br/>([1.0.0-4.1.0] 0x8000000020000000) || SaveDataExtraData_Write0 || [[#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]], [[# | | [4.0.0+] 0x1E || 0x8000000000004020<br/>([5.0.0-5.1.0] 0x8000000000002020)<br/>([1.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]], [[# | | [4.0.0+] 0x1F || 0x8000000000000020<br/>([5.0.0-5.1.0] 0x8000000000000028)<br/>([1.0.0-4.1.0] 0x8000000000000000) || SaveDataExtraData_Write1 || [[#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]], [[# | | [4.0.0+] 0x20 || 0x8000000000000000<br/>([5.0.0-5.1.0] 0x8000000020000000)<br/>([1.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]] | ||
Line 452: | Line 452: | ||
| [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) || | | [5.0.0+] 0x26 || 0x8000000200002000<br/>([1.0.0-5.1.0] 0x8000000080000110) || CanOpenOpenSaveDataTransferProhibiter || [[#OpenSaveDataTransferProhibiter]] | ||
|- | |- | ||
| [5.0.0+] 0x27 || 0x8000000240002000 <br/>([6.0.0-7.0.1] 0x8000000200002000)<br/>([1.0.0-5.1.0] 0x8000000000100008) || | | [5.0.0+] 0x27 || 0x8000000240002000 <br/>([6.0.0-7.0.1] 0x8000000200002000)<br/>([1.0.0-5.1.0] 0x8000000000100008) || CanListAccessibleSaveDataOwnerId || ListAccessibleSaveDataOwnerId | ||
|- | |- | ||
| [5.0.0+] 0x28 || 0x8000000000000000<br/>([1.0.0-5.1.0] 0x8000000080010000) || CanControlMmcPatrol || [[#SuspendMmcPatrol]], [[#ResumeMmcPatrol]] | | [5.0.0+] 0x28 || 0x8000000000000000<br/>([1.0.0-5.1.0] 0x8000000080010000) || CanControlMmcPatrol || [[#SuspendMmcPatrol]], [[#ResumeMmcPatrol]] | ||
Line 468: | Line 468: | ||
| [5.0.0+] 0x2D || 0x8000000000010000<br/>([1.0.0-5.1.0] 0x0000000080000001) || CanNotifySystemDataUpdateEvent || [[#NotifySystemDataUpdateEvent]] | | [5.0.0+] 0x2D || 0x8000000000010000<br/>([1.0.0-5.1.0] 0x0000000080000001) || CanNotifySystemDataUpdateEvent || [[#NotifySystemDataUpdateEvent]] | ||
|- | |- | ||
| [5.0.0+] 0x2E || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanOpenAccessFailureDetectionEventNotifier || [[# | | [5.0.0+] 0x2E || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000040000000) || CanOpenAccessFailureDetectionEventNotifier || [[#OpenAccessFailureDetectionEventNotifier]] | ||
|- | |- | ||
| [5.0.0+] 0x2F || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanGetAccessFailureDetectionEvent || [[#GetAccessFailureDetectionEvent]] | | [5.0.0+] 0x2F || 0x8000000100000000<br/>([1.0.0-5.1.0] 0x8000000080200000) || CanGetAccessFailureDetectionEvent || [[#GetAccessFailureDetectionEvent]] | ||
Line 484: | Line 484: | ||
| [6.0.0+] 0x35 || 0x8000000000200000 || CanSetSdCardAccessibility || [[#SetSdCardAccessibility]] | | [6.0.0+] 0x35 || 0x8000000000200000 || CanSetSdCardAccessibility || [[#SetSdCardAccessibility]] | ||
|- | |- | ||
| [6.0.0+] 0x36 || 0x4000000000000000 || CanSimulateGameCardDetectionEvent || | | [6.0.0+] 0x36 || 0x4000000000000000 || CanSimulateGameCardDetectionEvent || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent | ||
|- | |- | ||
| [6.0.0+] 0x37 || 0x8000000000000000<br/>([6.0.0-6.2.0] 0x8000000000080000) || CanSetDataStorageRedirectTarget || SetDataStorageRedirectTarget | | [6.0.0+] 0x37 || 0x8000000000000000<br/>([6.0.0-6.2.0] 0x8000000000080000) || CanSetDataStorageRedirectTarget || SetDataStorageRedirectTarget | ||
Line 622: | Line 622: | ||
[[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). | ||
== | == OpenAccessFailureDetectionEventNotifier == | ||
Takes 8-bytes of input and returns an [[#IEventNotifier]]. | Takes 8-bytes of input and returns an [[#IEventNotifier]]. | ||
Line 900: | Line 900: | ||
| 208 || GetGameCardIdSet | | 208 || GetGameCardIdSet | ||
|- | |- | ||
| 209 || | | 209 || WriteToGameCardDirectly | ||
|- | |- | ||
| 210 || SetVerifyWriteEnalbleFlag | | 210 || SetVerifyWriteEnalbleFlag | ||
Line 932: | Line 932: | ||
| 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 (Takes a total of 4-bytes of input, returns a total of 8-bytes of output) | ||
|- | |- | ||
| 500 || [6.0.0+] | | 500 || [6.0.0+] SetDeviceSimulationEvent (Takes a total of 0x14-bytes of input, no output) | ||
|- | |- | ||
| 501 || [6.0.0+] | | 501 || [6.0.0+] ClearDeviceSimulationEvent (Takes a total of 4-bytes of input, no output) | ||
|} | |} | ||
Line 992: | Line 992: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || [[# | | 0 || [[#GetSaveDataInfo]] | ||
|- | |- | ||
| 1 || [[#GetRestSize]] | | 1 || [[#GetRestSize]] | ||
Line 1,003: | Line 1,003: | ||
This was added with [[4.0.0]]. | This was added with [[4.0.0]]. | ||
== | == GetSaveDataInfo == | ||
No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer. | No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer. | ||
Line 1,024: | Line 1,024: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || [[# | | 0 || [[#GetSaveDataInfo]] | ||
|- | |- | ||
| 1 || [[#GetRestSize]] | | 1 || [[#GetRestSize]] | ||
Line 1,035: | Line 1,035: | ||
This was added with [[4.0.0]]. | This was added with [[4.0.0]]. | ||
== | == GetSaveDataInfo == | ||
No input/output, takes a type-0x1A [[# | 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. | The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw. | ||
Line 1,060: | Line 1,060: | ||
| 16 || [[#SetKeySeedPackage]] | | 16 || [[#SetKeySeedPackage]] | ||
|- | |- | ||
| 32 || [[# | | 32 || [[#OpenSaveDataExporter]] | ||
|- | |- | ||
| 33 || [[# | | 33 || [[#OpenSaveDataExporterForDiffExport]] | ||
|- | |- | ||
| 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]] | | 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]] | ||
|- | |- | ||
| 64 || [[# | |rowspan="2"| 64 || [5.0.0-5.1.0] OpenSaveDataImporter | ||
|- | |||
| [6.0.0+] [[#OpenSaveDataImporterDeprecated]] | |||
|- | |- | ||
| 65 || [[# | | 65 || [[#OpenSaveDataImporterForDiffImport]] | ||
|- | |- | ||
| 66 || [6.0.0+] [[# | | 66 || [6.0.0+] [[#OpenSaveDataImporterForDuplicateDiffImport]] | ||
|- | |- | ||
| 67 || [6.0.0+] [[#OpenSaveDataImporter]] | | 67 || [6.0.0+] [[#OpenSaveDataImporter]] | ||
Line 1,087: | Line 1,089: | ||
No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''. | No input/output, takes a type-0x5 input buffer containing the '''KeySeedPackage'''. | ||
== | == OpenSaveDataExporter == | ||
Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]]. | Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]]. | ||
== | == 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,096: | Line 1,098: | ||
No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]]. | No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]]. | ||
== | == 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]]. | ||
== | == 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]]. | ||
== | == 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,235: | Line 1,237: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 1 || | | 1 || Add (Takes an input [[#IFilesystem]], no output) | ||
|- | |- | ||
| 2 || | | 2 || Commit (No input/output) | ||
|} | |} | ||