Filesystem services: Difference between revisions

Paeton (talk | contribs)
No edit summary
Line 59: Line 59:
| 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 117: Line 117:
| 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 123:
| 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 (Takes a total of 0x50-bytes of input, returns 8-bytes of output, and a type-0x6 output buffer)
|-
|-
| 68 || [6.0.0+] OpenSaveDataIterator (Takes a total of 0x50-bytes of input, returns an #ISaveDataInfoReader)
| 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+] OpenDataFileSystemByProgramIndex (Takes an input u8, returns an [[#IFileSystem]])
| 204 || [7.0.0+] OpenDataFileSystemWithProgramIndex (Takes an input u8, returns an [[#IFileSystem]])
|-
|-
| 205 || [7.0.0+] OpenDataStorageByProgramIndex (Takes an input u8, returns an [[#IStorage]])
| 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+] SimulateGameCardDetectionEvent (Takes a total of 0xC-bytes of input, no output)
| 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+] [[#OpenAccessFailureResolver]]
| 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+] GetAndClearFileSystemProxyErrorInfo
| 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+] GetAccessLogVersionInfo (Unofficial name, no input, returns two 32-bit values "version" and "program_index")
| 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+] CorruptSaveDataFileSystemBySaveDataSpaceId2
| 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) || 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]]
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]], [[#WriteSaveDataFileSystemExtraData2]]
| [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]], [[#WriteSaveDataFileSystemExtraData2]]
| [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]], [[#WriteSaveDataFileSystemExtraData2]]
| [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]], [[#WriteSaveDataFileSystemExtraData2]]
| [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) || CanOpenSaveDataTransferProhibiterForCloudBackUp || [[#OpenSaveDataTransferProhibiterForCloudBackUp]]
| [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) || CanListApplicationAccessibleSaveDataOwnerId || ListApplicationAccessibleSaveDataOwnerId
| [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 || [[#OpenAccessFailureResolver]]
| [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 || SimulateGameCardDetectionEvent, SetSimulationEvent, ClearSimulationEvent
| [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).


== OpenAccessFailureResolver ==
== 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 || WriteToGameCard
| 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+] SetSimulationEvent (Takes a total of 0x14-bytes of input, no output)
| 500 || [6.0.0+] SetDeviceSimulationEvent (Takes a total of 0x14-bytes of input, no output)
|-
|-
| 501 || [6.0.0+] ClearSimulationEvent (Takes a total of 4-bytes of input, no output)
| 501 || [6.0.0+] ClearDeviceSimulationEvent (Takes a total of 4-bytes of input, no output)
|}
|}


Line 992: Line 992:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || [[#Initialize]]
| 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]].


== Initialize ==
== 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 || [[#Initialize]]
| 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]].


== Initialize ==
== GetSaveDataInfo ==
No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer.
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 || [[#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,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'''.


== 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,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]].


== 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,235: Line 1,237:
! Cmd || Name
! Cmd || Name
|-
|-
| 1 || ? (Takes an input [[#IFilesystem]], no output)
| 1 || Add (Takes an input [[#IFilesystem]], no output)
|-
|-
| 2 || ? (No input/output)
| 2 || Commit (No input/output)
|}
|}