Filesystem service "fs:USER"
Command Header
|
Description
|
Required exheader accessinfo bitmask
|
0x000100C6
|
Dummy1
|
None
|
0x040100C4
|
Control
|
None
|
0x08010002
|
Initialize
|
None
|
0x080201C2
|
OpenFile
|
None
|
0x08030204
|
OpenFileDirectly
|
None
|
0x08040142
|
DeleteFile
|
None
|
0x08050244
|
RenameFile
|
None
|
0x08060142
|
DeleteDirectory
|
None
|
0x08070142
|
DeleteDirectoryRecursively
|
None
|
0x08080202
|
CreateFile
|
None
|
0x08090182
|
CreateDirectory
|
None
|
0x080A0244
|
RenameDirectory
|
None
|
0x080B0102
|
OpenDirectory
|
None
|
0x080C00C2
|
OpenArchive
|
Each archive idcode has separate accessinfo bitmasks, if any.
|
0x080D0144
|
ControlArchive
|
None
|
0x080E0080
|
CloseArchive
|
None
|
0x080F0180
|
FormatThisUserSaveData
|
None
|
0x08100200
|
CreateSystemSaveData
|
0x4, for when the input saveID doesn't match the exheader saveID.
|
0x08110040
|
DeleteSystemSaveData
|
0x1004, for when the input saveID doesn't match the exheader saveID.
|
0x08120080
|
GetFreeBytes
|
None
|
0x08130000
|
GetCardType
|
0x1017
|
0x08140000
|
GetSdmcArchiveResource
|
None
|
0x08150000
|
GetNandArchiveResource
|
None
|
0x08160000
|
GetSdmcFatfsError
|
0x2
|
0x08170000
|
IsSdmcDetected
|
None
|
0x08180000
|
IsSdmcWritable
|
None
|
0x08190042
|
GetSdmcCid
|
0x2
|
0x081A0042
|
GetNandCid
|
0x2
|
0x081B0000
|
GetSdmcSpeedInfo
|
0x2
|
0x081C0000
|
GetNandSpeedInfo
|
0x2
|
0x081D0042
|
GetSdmcLog
|
0x2
|
0x081E0042
|
GetNandLog
|
0x2
|
0x081F0000
|
ClearSdmcLog
|
0x2
|
0x08200000
|
ClearNandLog
|
0x2
|
0x08210000
|
CardSlotIsInserted
|
0x1017
|
0x08220000
|
CardSlotPowerOn
|
0x2
|
0x08230000
|
CardSlotPowerOff
|
0x2
|
0x08240000
|
CardSlotGetCardIFPowerStatus
|
0x2
|
0x08250040
|
CardNorDirectCommand
|
0x2
|
0x08260080
|
CardNorDirectCommandWithAddress
|
0x2
|
0x08270082
|
CardNorDirectRead
|
0x2
|
0x082800C2
|
CardNorDirectReadWithAddress
|
0x2
|
0x08290082
|
CardNorDirectWrite
|
0x2
|
0x082A00C2
|
CardNorDirectWriteWithAddress
|
0x2
|
0x082B00C2
|
CardNorDirectRead_4xIO
|
0x2
|
0x082C0082
|
CardNorDirectCpuWriteWithoutVerify
|
0x2
|
0x082D0040
|
CardNorDirectSectorEraseWithoutVerify
|
0x2
|
0x082E0040
|
GetProductInfo
|
0x1005
|
0x082F0040
|
GetProgramLaunchInfo
|
0x1005
|
0x08300182
|
CreateExtSaveData
|
0xC, for when the input extdataID doesn't match the exheader extdataID.
|
0x08310180
|
CreateSharedExtSaveData
|
0x1005
|
0x08320102
|
ReadExtSaveDataIcon
|
0x100D, for when the input extdataID doesn't match the exheader extdataID.
|
0x08330082
|
EnumerateExtSaveData
|
0x1005
|
0x08340082
|
EnumerateSharedExtSaveData
|
0x1005
|
0x08350080
|
DeleteExtSaveData
|
0x100D, for when the input extdataID doesn't match the exheader extdataID.
|
0x08360080
|
DeleteSharedExtSaveData
|
0x1005
|
0x08370040
|
SetCardSpiBaudRate
|
0x2
|
0x08380040
|
SetCardSpiBusMode
|
0x2
|
0x08390000
|
SendInitializeInfoTo9
|
None
|
0x083A0100
|
GetSpecialContentIndex
|
0x1005
|
0x083B00C2
|
GetLegacyRomHeader
|
0x1015
|
0x083C00C2
|
GetLegacyBannerData
|
0x1015
|
0x083D0100
|
CheckAuthorityToAccessExtSaveData
|
0x44
|
0x083E00C2
|
QueryTotalQuotaSize
|
None
|
0x083F00C0
|
GetExtDataBlockSize
|
None
|
0x08400040
|
AbnegateAccessRight
|
0x08410000
|
DeleteSdmcRoot
|
0x1005
|
0x08420040
|
DeleteAllExtSaveDataOnNand
|
0x1005
|
0x08430000
|
InitializeCtrFileSystem
|
None
|
0x08440000
|
CreateSeed
|
0x2
|
0x084500C2
|
GetFormatInfo
|
?
|
0x08460102
|
GetLegacyRomHeader2
|
0x1015
|
0x08470180
|
FormatCtrCardUserSaveData
|
0x6
|
0x08480042
|
GetSdmcCtrRootPath
|
0x100D
|
0x08490040
|
GetArchiveResource
|
?
|
0x084A0002
|
ExportIntegrityVerificationSeed
|
0x4000
|
0x084B0002
|
ImportIntegrityVerificationSeed
|
0x4000
|
0x084C0242
|
FormatSaveData
|
0x6, in some cases this right isn't needed however.
|
0x084D0102
|
GetLegacySubBannerData
|
0x1015
|
0x084E0342
|
UpdateSha256Context
|
0x5
|
0x084F0102
|
ReadSpecialFile
|
None
|
0x08500040
|
GetSpecialFileSize
|
None
|
0x08520100
|
Unknown (u32 flags, u64 extdataID)
|
?
|
0x08620040
|
?
|
?
|
0x08630000
|
?
|
?
|
0x08640000
|
Stubbed, this returns an error.
|
None
|
0x08680000
|
This loads an u8 from state, then writes it to response-word[2].
|
None
|
0x08690000
|
Stubbed, this returns an error.
|
None
|
0x086A0082
|
This is a wrapper for FSPXI command 0x00550082.
|
None
|
When access rights are required for a command, at least one of the bits in the process accessinfo specified in the above table for the command must be set. Error 0xD9004676 is returned when a process attempts to use a command which it doesn't have access rights for the command. The exheader accessinfo field is all-zero for most applications.
File service
Command Header
|
Description
|
0x000100C6
|
Dummy1
|
0x040100C4
|
Control
|
0x08010100
|
OpenSubFile
|
0x080200C2
|
Read
|
0x08030102
|
Write
|
0x08040000
|
GetSize
|
0x08050080
|
SetSize
|
0x08060000
|
GetAttributes
|
0x08070040
|
SetAttributes
|
0x08080000
|
Close
|
0x08090000
|
Flush
|
Directory service
Command Header
|
Description
|
0x000100C6
|
Dummy1
|
0x040100C4
|
Control
|
0x08010042
|
Read
|
0x08020000
|
Close
|
Filesystem service "fs:LDR"
This service is identical to fs:USER, except FS:OpenArchive archive 0x2345678E can only be accessed with fs:LDR.
ProgramRegistry service "fs:REG"
Command Header
|
Description
|
0x000100C6
|
Dummy1
|
0x040103C0
|
Register
|
0x04020040
|
Unregister
|
0x040300C0
|
GetProgramInfo
|
0x04040100
|
LoadProgram
|
0x04050080
|
UnloadProgram
|
0x04060080
|
CheckHostLoadId
|