Filesystem services: Difference between revisions
m Add anchors |
TimmSkiller (talk | contribs) |
||
(46 intermediate revisions by 2 users not shown) | |||
Line 553: | Line 553: | ||
| 0x086B00C2 | | 0x086B00C2 | ||
|? | |? | ||
|SetOtherSaveDataSecureValue | | [[FS:SetOtherSaveDataSecureValue|SetOtherSaveDataSecureValue]] | ||
| | | 0x121004 | ||
|- | |- | ||
| 0x086C00C2 | | 0x086C00C2 | ||
|? | |? | ||
|GetOtherSaveDataSecureValue | | [[FS:GetOtherSaveDataSecureValue|GetOtherSaveDataSecureValue]] | ||
| | | 0x121004 | ||
|- | |- | ||
| | | 0x086D0080 | ||
|? | |? | ||
| | | [[FS:BeginSaveDataMove|BeginSaveDataMove]] | ||
| | | 0x20004 | ||
|- | |- | ||
| 0x086E00C0 | | 0x086E00C0 | ||
| | |? | ||
|SetThisSaveDataSecureValue | | [[FS:SetThisSaveDataSecureValue|SetThisSaveDataSecureValue]] | ||
|None | |None | ||
|- | |- | ||
| 0x086F0040 | | 0x086F0040 | ||
| | |? | ||
|GetThisSaveDataSecureValue | | [[FS:GetThisSaveDataSecureValue|GetThisSaveDataSecureValue]] | ||
| | | None | ||
|- | |- | ||
| 0x087000C2 | | 0x087000C2 | ||
|? | |? | ||
| | | [[FS:CheckArchive|CheckArchive]] | ||
|None | |None | ||
|- | |- | ||
| | | 0x08710140 | ||
|? | | ? | ||
| | | [[FS:TransferSaveDataCMAC|TransferSaveDataCMAC]] | ||
| | | 0x20004 | ||
|- | |- | ||
| | | 0x08720200 | ||
|? | |? | ||
| | | [[FS:RegisterTitleContentOverlay|RegisterTitleContentOverlay]] | ||
| 0x80004 | |||
|- | |- | ||
| | | 0x08730100 | ||
|? | |? | ||
| | | [[FS:UnregisterTitleContentOverlay|UnregisterTitleContentOverlay]] | ||
| 0x80004 | |||
|- | |- | ||
| 0x08740000 | | 0x08740000 | ||
|? | |? | ||
| | | [[FS:UnregisterAllTitleContentOverlays|UnregisterAllTitleContentOverlays]] | ||
| | | 0x80004 | ||
|- | |- | ||
| 0x08750140 | | 0x08750140 | ||
|? | |? | ||
| | | [[FS:SetSaveArchiveSecureValue|SetSaveArchiveSecureValue]] | ||
|None | |None | ||
|- | |- | ||
| 0x087600C0 | | 0x087600C0 | ||
|? | |? | ||
| | | [[FS:GetSaveArchiveSecureValue|GetSaveArchiveSecureValue]] | ||
|None | |None | ||
|- | |- | ||
| | | 0x08770140 | ||
|? | |? | ||
| [[FS:RegisterSpecialTitleContent|RegisterSpecialTitleContent]] | |||
| 0x80004 | |||
|- | |- | ||
| | | 0x08780100 | ||
|? | |? | ||
| [[FS:UnregisterSpecialTitleContent|UnregisterSpecialTitleContent]] | |||
| 0x80004 | |||
|- | |- | ||
| 0x087900C2 | | 0x087900C2 | ||
| ? | | ? | ||
| Same as GetLegacyBannerData, except for the last parameter this passes u8 value 0x1 instead of 0x0, for the FSPXI command. | | Same as [[FS:GetLegacyBannerData|GetLegacyBannerData]], except for the last parameter this internally passes u8 value 0x1 instead of 0x0, for the FSPXI command. | ||
| | | 0x101015 | ||
|- | |- | ||
| 0x087A0180 | | 0x087A0180 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| [[FS:AddSeed|AddSeed]] | | [[FS:AddSeed|AddSeed]] | ||
| | | 0x200000 | ||
|- | |- | ||
| | | 0x087B0080 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| | | [[FS:GetSeed|GetSeed]] | ||
| | | 0x200000 | ||
|- | |- | ||
| | | 0x087C0080 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| | | [[FS:DeleteSeed|DeleteSeed]] | ||
| | | 0x200000 | ||
|- | |- | ||
| 0x087D0000 | | 0x087D0000 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| GetNumSeeds | | [[FS:GetNumSeeds|GetNumSeeds]] | ||
| | | 0x200000 | ||
|- | |- | ||
| 0x087E0042 | | 0x087E0042 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| | | [[FS:ListSeeds|ListSeeds]] | ||
| | | 0x200000 | ||
|- | |- | ||
| | | 0x087F0100 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| | | [[FS:TitleContentHasSeed|TitleContentHasSeed]] | ||
| | | 0x200000 | ||
|- | |- | ||
| | | 0x08800880 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| | | [[FS:AddTitleTag|AddTitleTag]] | ||
| | | 0x200000 | ||
|- | |- | ||
| | | 0x08810080 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| | | [[FS:GetTitleTag|GetTitleTag]] | ||
| | | 0x200000 | ||
|- | |- | ||
| | | 0x08820080 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| | | [[FS:DeleteTitleTag|DeleteTitleTag]] | ||
| | | 0x200000 | ||
|- | |- | ||
| 0x08830000 | | 0x08830000 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| | | [[FS:GetNumTitleTags|GetNumTitleTags]] | ||
| | | 0x200000 | ||
|- | |- | ||
| 0x08840042 | | 0x08840042 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| | | [[FS:ListTitleTags|ListTitleTags]] | ||
| | | 0x200000 | ||
|- | |- | ||
| | | 0x088500C0 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| | | [[FS:CheckTitleSeed|CheckTitleSeed]] | ||
| | | 0x200000 | ||
|- | |- | ||
| 0x088600C0 | | 0x088600C0 | ||
| [[11.1.0-34|11.1.0-X]] | | [[11.1.0-34|11.1.0-X]] | ||
| [[FS:CheckUpdatedDat|CheckUpdatedDat]] | | [[FS:CheckUpdatedDat|CheckUpdatedDat]] | ||
| | | 0x80000 | ||
|} | |} | ||
Line 699: | Line 699: | ||
{{Anchor|FSLDR}}{{Anchor|fs:LDR}} | {{Anchor|FSLDR}}{{Anchor|fs:LDR}} | ||
== Filesystem service "fs:LDR" == | == Filesystem service "fs:LDR" == | ||
This service is identical to fs:USER, except [[FS:OpenArchive]] archive 0x2345678E can only be accessed with fs:LDR. | This service is identical to fs:USER, except [[FS:OpenArchive]] archive 0x2345678E can only be accessed with fs:LDR. | ||
Line 945: | Line 946: | ||
|- | |- | ||
| 0x12345680 | | 0x12345680 | ||
| | | Extdata transfer. Used for transferring [[Extdata#NAND_Shared_Extdata|NAND Shared Extdata]] during [[System_Transfer#System_Save_Data_/_Shared_Extdata_Transfer|system tranfers]]. | ||
| Yes | |||
| Yes | | Yes | ||
| No | | No | ||
| Yes | | Yes | ||
Line 953: | Line 954: | ||
|- | |- | ||
| 0x12345681 | | 0x12345681 | ||
| | | System Savedata transfer. Used for transferring [[System_SaveData|System Save Data]] during [[System_Transfer#System_Save_Data_/_Shared_Extdata_Transfer|system tranfers]]. | ||
| | | Yes | ||
| | | Yes | ||
| No | | No | ||
| | | Yes | ||
| ? | | ? | ||
|- | |- | ||
Line 963: | Line 964: | ||
| Unknown. There's code for this in spider v9.9, but that code isn't actually used. | | Unknown. There's code for this in spider v9.9, but that code isn't actually used. | ||
| Yes | | Yes | ||
| | | No | ||
| No | | No | ||
| Yes | | Yes | ||
Line 969: | Line 970: | ||
|- | |- | ||
| 0x2345678A | | 0x2345678A | ||
| | | Title access. With FS, this allows accessing NCCH/NCSD contents (ExeFS, RomFS, checking if a content uses a seed, checking the validity of the installed seed). FSPXI, additionally, allows opening raw NCCH/NCSD NCCH contents and DSiWare contents for reading, along with encrypted save data. | ||
| Yes | | Yes | ||
| Yes | | Yes | ||
Line 977: | Line 978: | ||
|- | |- | ||
| 0x2345678B | | 0x2345678B | ||
| | | Used internally by Process9 as the lowest level title access archive. Allows for opening various sections of a title (TMD, CMD, raw contents, DLC contents, raw save data (including public/private/banner saves for DSiWare), title and/or content import context files and /data directories for save data. | ||
| No | | No | ||
| No | | No | ||
Line 985: | Line 986: | ||
|- | |- | ||
| 0x2345678C | | 0x2345678C | ||
| Used internally to access [[Title_Database|/dbs]] files | | Used internally to access [[Title_Database|Title Database (/dbs)]] files. For SD, <code>title.db</code> and <code>import.db</code>. For NAND, <code>title.db</code>, <code>import.db</code>, <code>tmp_t.db</code>, <code>tmp_i.db</code>, and <code>jumpid.db</code>. | ||
| No | | No | ||
| No | | No | ||
Line 993: | Line 994: | ||
|- | |- | ||
| 0x2345678D | | 0x2345678D | ||
| | | Used internally to access non-title /dbs files on the NAND: <code>certs.db</code> and <code>ticket.db</code>. | ||
| No | | No | ||
| No | | No | ||
Line 1,001: | Line 1,002: | ||
|- | |- | ||
| 0x2345678E | | 0x2345678E | ||
| FSPXI: | | FSPXI: Program Access (limited subset of merged main title + update/patch title access). For fs:LDR(used by the "loader" FIRM ARM11-process), only <code>exefs:/.code</code>. Not accessible with fs:USER. | ||
| Yes | | Yes | ||
| Yes | | Yes | ||
Line 1,049: | Line 1,050: | ||
|- | |- | ||
| 0x567890B0 | | 0x567890B0 | ||
| | | Internally creates the same "ID Storage" wrapper over the NAND that is used for SystemSaveData and Shared ExtData, but all operations are stubbed and return 0xE0C046F8. | ||
| No | | No | ||
| Yes | | Yes | ||
Line 1,071: | Line 1,072: | ||
| Yes | | Yes | ||
| 0x6 | | 0x6 | ||
|- | |||
| 0x567890B3 | |||
| [[3DS_Virtual_Console#NAND_Savegame|AGB Save Data]] | |||
| No | |||
| No | |||
| Yes | |||
| No | |||
| - | |||
|- | |- | ||
| 0x567890B4 | | 0x567890B4 | ||
Line 1,120: | Line 1,129: | ||
The format of the data that a binary LowPath points to is custom per archive. | The format of the data that a binary LowPath points to is custom per archive. | ||
=== | === SystemSaveData / Extdata / Shared Extdata Archive Path Data Format === | ||
==== DataAccessPath ==== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset !! Size !! Description | |||
|- | |||
| 0x0 || 0x1 || u8 [[Mediatypes|Mediatype]] | |||
|- | |||
| 0x1 || 0x1 || only for NAND data (System Savedata / Shared Extdata), otherwise left 0: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value !! Description | |||
|- | |||
| 0 || Accesses from/to <code>nand:/data/<ID0 of current system></code> | |||
|- | |||
| 1 || Accesses from/to <code>nand:/fixdata</code> | |||
|- | |||
| 2 || Accesses from/to <code>nand:/data/<ID0 from [[Filesystem_services#DeviceMoveContext|Device Move Context]]></code> | |||
|} | |||
|- | |||
| 0x2 || 0x2 || padding | |||
|} | |||
==== SystemSaveData ==== | |||
===== FS ===== | |||
====== Archive Path ====== | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 1,127: | Line 1,165: | ||
|- | |- | ||
| 0 | | 0 | ||
| | | [[Filesystem_services#DataAccessPath|DataAccessPath]] | ||
|- | |- | ||
| 1 | | 1 | ||
| | | save ID low (save ID high is 0) | ||
|} | |} | ||
Note that | ====== File Path ====== | ||
The file path is a cleartext ASCII or UTF16 file path (<code><file path></code>). | |||
The file path would access the file at <code><base path>/sysdata/<save ID low>/<save ID high>/<file path></code>. | |||
Note that <code>/<file path></code> refers to the virtual file system inside the </code><save ID high></code> file. | |||
===== FSPXI / FS System Savedata Transfer / FSPXI System Savedata Transfer ===== | |||
=== | ====== Archive Path ====== | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 1,149: | Line 1,186: | ||
|- | |- | ||
| 0 | | 0 | ||
| [[ | | [[Filesystem_services#DataAccessPath|DataAccessPath]] | ||
|} | |||
====== File Path ====== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Index word !! Description | |||
|- | |||
| 0 || save ID low | |||
|- | |- | ||
| 1 | | 1 || save ID high | ||
| | |||
|} | |} | ||
==== FSPXI ==== | The file path would access the file at <code><base path>/sysdata/<save ID low>/<save ID high></code>. | ||
==== Extdata / Shared Extdata ==== | |||
===== FS / FS Extdata Transfer / FSPXI Extdata Transfer ===== | |||
====== Archive Path ====== | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 1,163: | Line 1,212: | ||
|- | |- | ||
| 0 | | 0 | ||
| | | [[Filesystem_services#DataAccessPath|DataAccessPath]] | ||
|- | |||
| 1 | |||
| ext save ID low | |||
|- | |||
| 2 | |||
| ext save ID high | |||
|} | |} | ||
The file | |||
This refers to the extdata filesystem structure's base directory at <code><base path>/extdata/<ext save ID low>/<ext save ID high></code>. | |||
====== File Path ====== | |||
The file path is a cleartext ASCII or UTF16 file path (<code><file path></code>). | |||
For FS Extdata, this would acccess <code><base path>/extdata/<save ID low>/<save ID high>/<directory ID>/<file ID>/<file path></code>, and <code>/<file path></code> refers to the virtual file system inside the </code><file ID></code> file. | |||
For FS / FSPXI Extdata Transfer, this accesses <code><base path>/extdata/<save ID low>/<save ID high>/<file path></code>. | |||
=== UserSaveDataForCheck Archive Path Data Format === | === UserSaveDataForCheck Archive Path Data Format === | ||
Line 1,182: | Line 1,245: | ||
| Upper word saveid | | Upper word saveid | ||
|} | |} | ||
The file/directory lowpath for this FS archive is a text path in the [[Savegames|savegame]] filesystem. | The file/directory lowpath for this FS archive is a text path in the [[Savegames|savegame]] filesystem. | ||
Line 1,200: | Line 1,264: | ||
|} | |} | ||
=== | === Title Access Archive Path Data Format === | ||
==== Title Access Type ==== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value !! Description | |||
|- | |||
| 0 || High-level NCCH content access | |||
|- | |||
| 1 || Save data access (high-level, decrypted) | |||
|- | |||
| 2 || Raw content (low-level NCCH/SRL) access | |||
|- | |||
| 3 || Banner save data access (for DSiWare titles) | |||
|- | |||
| 4 || FS only: Save data transfer (internally uses generated data from [[FS:BeginSaveDataMove]] as the IV for "Save data access (low-level, encrypted)") | |||
|- | |||
| 5 || Save data access (low-level, encrypted) | |||
|} | |||
==== NCCH Access Type ==== | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value !! Description | ||
! | |- | ||
| 0 || RomFS | |||
|- | |||
| 1 || <code>exefs:/.code</code> | |||
|- | |||
| 2 || System Menu Data (<code>exefs:/icon</code>, <code>exefs:/banner</code>, <code>exefs:/logo</code>) | |||
|- | |||
| 3 || NCCH Header(s) | |||
|- | |||
| 4 || "is seeded" check | |||
|- | |||
| 5 || Seed verify/validate | |||
|} | |||
==== NCCH Header Access Type ==== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value !! Description | |||
|- | |||
| 0 || [[NCCH/Extended_Header|Extheader]] (0x0-0x400) | |||
|- | |||
| 1 || [[NCCH/Extended_Header|Extheader]] AccessDesc (0x400-0x800) | |||
|- | |||
| 2 || Raw [[NCCH#NCCH_Header|NCCH Header]] | |||
|} | |||
==== Archive Path ==== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset !! Size !! Description | |||
|- | |||
| 0x0 || 0x8 || Program ID (Title ID) | |||
|- | |||
| 0xB || 0x1 || [[Mediatypes|Media Type]] | |||
|- | |||
| 0xC || 0x4 || padding | |||
|} | |||
==== File Path ==== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset !! Size !! Description | |||
|- | |||
| 0x0 || 0x4 || [[Filesystem_services#Title_Access_Type|Title Access Type]] | |||
|- | |||
| 0x4 || 0x10 || Dynamic data depending on [[Filesystem_services#Title_Access_Type|Title Access Type]]: | |||
{| class="wikitable" border="1" | |||
|- | |||
! High Level NCCH Access !! Save Data Access (high level) !! Raw Content !! FS only: Save Data Transfer | |||
|- | |||
| | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset !! Size !! Description | |||
|- | |||
| 0x0 || 0x4 || Content index from TMD for NAND/SD titles | |||
NCSD partition index for gamecards | |||
|- | |||
| 0x4 || 0x4 || [[Filesystem_services#NCCH_Access_Type|NCCH Access Type]] | |||
|- | |||
| 0x8 || 0x8 || Dynamic data depending on [[Filesystem_services#NCCH_Access_Type|NCCH Access Type]]: | |||
For ExeFS, (System Menu Data / <code>exefs:/.code</code>), | |||
{| class="wikitable" border="1" | |||
| 8-byte ExeFS file name | |||
|} | |||
For Header Access, | |||
{| class="wikitable" border="1" | |||
| [[Filesystem_services#NCCH_Header_Access_Type|u64, NCCH Header Access Type]] | |||
|} | |||
For RomFS, | |||
{| class="wikitable" border="1" | |||
| [[NCCH#Content_Types|u64, Allowed content types flag]] | |||
(<code>(1 << allowed_type_a) | | |||
(1 << allowed_type_b)...</code>) | |||
|} | |||
|} | |||
| | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset !! Size !! Description | |||
|- | |||
| 0x0 || 0x10 || 16-byte IV for save data crypto | |||
|} | |||
| | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset !! Size !! Description | |||
|- | |||
| 0x0 || 0x4 || Content index from TMD for NAND/SD titles | |||
NCSD partition index for gamecards | |||
|- | |||
| 0x4 || 0xC || padding | |||
|} | |||
| | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset !! Size !! Description | |||
|- | |- | ||
| | | 0x0 || 0x4 || Save data transfer key from [[FS:BeginSaveDataMove]] | ||
| [[ | |||
|- | |- | ||
| | | 0x4 || 0xC || padding | ||
| | |} | ||
|} | |||
|- | |- | ||
| | | 0x14 || 0x10 || 16-byte seed for titles that require one, or for validating a seed against the check value in the [[NCCH#NCCH_Header|NCCH Header]]'s check value. | ||
If the title does not use a seed, this should not be included and size 0x14 should be used instead of 0x24. | |||
|} | |} | ||
=== | For encrypted save data access and banner save data access, the entire 0x10 portion of the dynamic data is left blank. | ||
The "is seeded check" NCCH access type opens a virtual 1-byte file that reads either 0 or 1; this value is generated on-the-fly and will be 1 if ncchflags[7] has bit5 set (content uses seed), and 0 otherwise. | |||
For NCCH sections that require a seed (e.g. <code>.code</code>, RomFS, etc.), the additional seed portion of the low path must be populated with the correct seed. | |||
The "Seed Verify/Validate" NCCH access type also requires the seed portion of the lowpath. The target NCCH content is opened (with the opened file interface being stubbed, meaning no real reads/writes can be performed on it), and the given seed is used to calculate the seed check hash, and part of it is compared to the check value in the NCCH header. If it matches, opening the "file" succeeds, otherwise 0xD900458C is returned. If attempt is made to use the seed validation type on a content that does not use a seed, error 0xC92044E6 is returned. | |||
==== FS Limitations ==== | |||
For FS, this archive functions the same, except for the following limitations: | |||
- Only the title access types "High Level NCCH Access" and "High Level Save Data Access", and "Save Data Transfer" are allowed. | |||
- For high level NCCH access, the types "RomFS", "System Menu Data", "Seeded check", and "Seed Check/Verify" are allowed. | |||
- For "Seed Check/Verify", rather than providing the title seed in the file path (as is the case for FSPXI), the seed is retrieved from the seed database (meaning the file lowpath size is always 0x14 for FS). | |||
=== Program Access / SelfNCCH access === | |||
Provides access to a "merged" archive of a base title and, optionally, a separate update (patch) title. | |||
If no patch title exists, the base title is considered to be the patch title, i.e. turning all "patch" accesses into accesses to the base title. | |||
==== Program Access Type ==== | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value !! Description !! Accesses | ||
! | |- | ||
| 0 || RomFS ("unspecified" [[NCCH#Content_Type|content type]], the default) || Base title | |||
|- | |||
| 1 || <code>exefs:/.code</code> || Patch title | |||
|- | |||
| 2 || System Menu Data (<code>exefs:/icon</code>, <code>exefs:/banner</code>, <code>exefs:/logo</code>) || Base title | |||
|- | |||
| 3 || Save Data (high level, decrypted) || - | |||
|- | |- | ||
| | | 4 || RomFS (all [[NCCH#Content_Type|content types]]) || Base title | ||
| | |||
|- | |- | ||
| | | 5 || RomFS ("unspecified" [[NCCH#Content_Type|content type]], the default) || Patch title | ||
| | |} | ||
==== Archive Path ==== | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset !! Size !! Description | |||
|- | |- | ||
| | | 0x0 || 0x8 || u64, Program Handle from [[PXIPM:RegisterProgram]] | ||
| | |||
|} | |} | ||
File | ==== File Path ==== | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Offset !! Size !! Description | ||
! | |- | ||
| 0x0 || 0x4 || [[Filesystem_services#Program_Access_Type|Program Access Type]] | |||
|- | |||
| 0x4 || 0x8 || Dynamic data depending on [[Filesystem_services#Program_Access_Type|Program Access Type]]: | |||
{| class="wikitable" border="1" | |||
|- | |||
! ExeFS files (System Menu Data, etc.) !! RomFS of base title (all [[NCCH#Content_Type|content types]]) | |||
|- | |- | ||
| | | | ||
| | {| class="wikitable" border="1" | ||
| 8-character ExeFS filename | |||
|} | |||
| | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset !! Size !! Description | |||
|- | |- | ||
| | | 0x0 || 0x4 || u32, content index of target content | ||
| | |||
|- | |- | ||
| | | 0x4 || 0x4 || padding | ||
| | |} | ||
|} | |||
|} | |} | ||
==== FS Limitations ==== | |||
- FSPXI allows all access types. | |||
- When used through fs:LDR by loader, FS only provides access to <code>exefs:/.code</code>. | |||
- For SelfNCCH access, the only allowed access types are "RomFS ("unspecified" [[NCCH#Content_Type|content type]], the default)" of the Base or Patch title, and "System Menu Data". Attempting to access "Save Data" results in error 0xE0E046BE, "RomFS (all [[NCCH#Content_Type|content types]])" in 0xF9604784, and "<code>exefs:/.code</code>" in 0xD9004676. | |||
=== [[RomFS]] === | === [[RomFS]] === | ||
Line 1,508: | Line 1,742: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
| | | 0x4 | ||
| [[Filesystem_services# | | [[Filesystem_services#DataAccessPath|DataAccessPath]] | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
Line 1,536: | Line 1,762: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
| | | 0x4 | ||
| [[Filesystem_services# | | [[Filesystem_services#DataAccessPath|DataAccessPath]] | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
Line 1,560: | Line 1,778: | ||
| 0x1000 | | 0x1000 | ||
| SD Application | | SD Application | ||
|} | |||
== SecureValueEntry == | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset !! Size !! Description | |||
|- | |||
| 0x0 || 0x4 || u32, [[Filesystem_services#SecureValueSlot|Secure Value Slot]] | |||
|- | |||
| 0x4 || 0x1 || When used as an input entry: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value !! Description | |||
|- | |||
| 0 || This entry should be removed. | |||
|- | |||
| 1 || This entry should be updated with the given value. | |||
|} | |||
When returned from a command: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value !! Description | |||
|- | |||
| 0 || No entry with the given slot and title ID was found, or: this entry is unused. | |||
|- | |||
| 1 || The entry with the given slot and title ID was found, or: this entry is used. | |||
|} | |||
|- | |||
| 0x5 || 0x3 || padding | |||
|- | |||
| 0x8 || 0x8 || u64, Secure Value | |||
|} | |||
== TitleTag == | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset !! Size !! Description | |||
|- | |||
| 0x0 || 0x4 || Magic, <code>PREP</code> (PREPurchase install) | |||
|- | |||
| 0x4 || 0x4 || s32, Release date year | |||
|- | |||
| 0x8 || 0x1 || u8, Release date month | |||
|- | |||
| 0x9 || 0x1 || u8, Release date day | |||
|- | |||
| 0xA || 0x2 || u16, Country code | |||
|- | |||
| 0xC || 0x4 || u32, Seed status (0: not downloaded yet, 1: last download attempt failed, 2: seed installed successfully) | |||
|- | |||
| 0x10 || 0x4 || Result code from last seed installation attempt | |||
|- | |||
| 0x14 || 0x4 || Support error code from last seed installation attempt | |||
|- | |||
| 0x18 || 0x68 || reserved padding (unused) | |||
|} | |} | ||
Line 1,605: | Line 1,878: | ||
! Value | ! Value | ||
! Description | ! Description | ||
! Found in | |||
|- | |- | ||
| 0x1 | | 0x1 | ||
| Update | | CTR (Old3DS) Update Partition | ||
| Gamecards | |||
|- | |- | ||
| 0x2 | | 0x2 | ||
| Manual | | Manual | ||
| Gamecards, Digital titles | |||
|- | |- | ||
| 0x3 | | 0x3 | ||
| DLP Child | | DLP Child | ||
| Gamecards, Digital titles | |||
|- | |||
| 0x4 | |||
| KTR (New3DS) Update Partition | |||
| Gamecards | |||
|- | |||
|} | |} | ||
Line 1,625: | Line 1,907: | ||
| 0x0 | | 0x0 | ||
| 0x10 | | 0x10 | ||
| IVs | | IVs (ID0 of source console) | ||
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0x10 | | 0x10 | ||
| Encrypt Parameter | | Encrypt Parameter (used to calculate the IV for encryption) | ||
|} | |} | ||