Filesystem services: Difference between revisions
(29 intermediate revisions by 11 users not shown) | |||
Line 554: | Line 554: | ||
| 0x086B00C2 | | 0x086B00C2 | ||
|? | |? | ||
| | |SetOtherSaveDataSecureValue | ||
| 00121004 | | 00121004 | ||
|- | |- | ||
| 0x086C00C2 | | 0x086C00C2 | ||
|? | |? | ||
| | |GetOtherSaveDataSecureValue | ||
| 00121004 | | 00121004 | ||
|- | |- | ||
Line 568: | Line 568: | ||
|- | |- | ||
| 0x086E00C0 | | 0x086E00C0 | ||
|? | |Related to Secure Value? Used in Pokemon Sun/Moon. | ||
| | |SetThisSaveDataSecureValue | ||
|None? | |None? | ||
|- | |- | ||
| 0x086F0040 | | 0x086F0040 | ||
|? | |Related to Secure Value? Used in Pokemon Sun/Moon. | ||
| | |GetThisSaveDataSecureValue | ||
| 0xE | | 0xE | ||
|- | |- | ||
Line 644: | Line 644: | ||
| 0x087D0000 | | 0x087D0000 | ||
| [[9.6.0-24|9.6.0-X]] | | [[9.6.0-24|9.6.0-X]] | ||
| Writes | | GetNumSeeds. Writes the number of seeds to cmdreply[2] | ||
| 0x00200000 | | 0x00200000 | ||
|- | |- | ||
Line 686: | Line 686: | ||
| ? | | ? | ||
| 0x00200000 | | 0x00200000 | ||
|- | |||
| 0x088600C0 | |||
| [[11.1.0-34|11.1.0-X]] | |||
| [[FS:CheckUpdatedDat|CheckUpdatedDat]] | |||
| 0x00080000 | |||
|} | |} | ||
Line 729: | Line 734: | ||
=File and directory access= | =File and directory access= | ||
==Files== | ==Files== | ||
File session handles obtained via [[FS:OpenFile]] | File session handles obtained via [[FS:OpenFile]] and [[FS:OpenFileDirectly]] can be used to access files through a service-like interface, despite not being an actual service registered using [[SRV:RegisterService]]. To use this service-like interface, simply call the SendSyncRequest SVC with a file session handle, using the IPC buffer in thread-local storage for parameters and responses, just like you would with a proper service. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 783: | Line 788: | ||
==Directories== | ==Directories== | ||
Directory session handles obtained via [[FS:OpenDirectory]] are usable via a service-like interface, following the exact same procedure described above for file sessions. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 826: | Line 832: | ||
|- | |- | ||
| 0x00000003 | | 0x00000003 | ||
| | | SelfNCCH (including [[#RomFS|RomFS]]) | ||
| Yes | | Yes | ||
| No | | No | ||
Line 1,066: | Line 1,072: | ||
|- | |- | ||
| 0x567890B4 | | 0x567890B4 | ||
| ? | | Similar to 0x567890B2 but can only access Accessible Save specified in [[NCCH/Extended_Header#Storage_Info|exheader]]? | ||
| Yes | | Yes | ||
| No | | No | ||
| No | | No | ||
| | | Yes | ||
| ? | | ? | ||
|} | |} | ||
Line 1,088: | Line 1,094: | ||
! Value | ! Value | ||
! Description | ! Description | ||
|- | |||
| -1 | |||
| Returned internally by Process9, when errors occur it seems(in particular when no nul-terminator was found in the input path). The data ptr is set to NULL. | |||
|- | |- | ||
| 0x0 | | 0x0 | ||
| INVALID - Specifies an invalid path | | INVALID - Specifies an invalid path | ||
|- | |- | ||
| 0x1 | | 0x1 | ||
| EMPTY - Specifies an empty path | | EMPTY - Specifies an empty path | ||
|- | |- | ||
| 0x2 | | 0x2 | ||
| BINARY - Non-text based path. Meaning is per-archive | | BINARY - Non-text based path. Meaning is per-archive | ||
|- | |- | ||
| 0x3 | | 0x3 | ||
| | | ASCII - Text-based path with 7-bit ASCII characters padded to 8-bits each (signed char) | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
| | | UTF16 - Text-based path with UTF-16 characters | ||
|} | |} | ||
In IPC requests, sizes of ASCII and UTF16 paths must include space for the null-terminator. | |||
== Binary LowPath == | == Binary LowPath == | ||
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. | ||
=== SelfNCCH File Path Data Format === | |||
{| class="wikitable" border="1" | |||
|- | |||
! Index word | |||
! Description | |||
|- | |||
| 0 | |||
| Type: | |||
* 0x0: RomFS | |||
* 0x1: error 0xD9004676 | |||
* 0x2: ExeFS | |||
* 0x3: Error 0xE0E046BE. | |||
* 0x4: FS-module crashes on this | |||
* 0x5: Update RomFS? | |||
|- | |||
| 1-2 | |||
| File name for ExeFS ("icon"/"banner"/"logo"). ".code" is not allowed | |||
|} | |||
Note that ExeFS files only support reading from offset=0 and with size=file_size. | |||
=== SystemSaveData Archive Path Data Format === | === SystemSaveData Archive Path Data Format === | ||
Line 1,150: | Line 1,182: | ||
|} | |} | ||
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. | ||
=== 0x567890B4 Archive Path Data Format === | |||
{| class="wikitable" border="1" | |||
|- | |||
! Index word | |||
! Description | |||
|- | |||
| 0 | |||
| [[Mediatypes|Mediatype]] | |||
|- | |||
| 1 | |||
| <code><nowiki>Lower_word_saveid >> 8</nowiki></code> ? | |||
|- | |||
| 2 | |||
| Unknown. Game calculate this using formula <code><nowiki>0xFFFFFF00 | unknown_b</nowiki></code> | |||
|} | |||
=== ExtSaveData Archive Path Data Format === | === ExtSaveData Archive Path Data Format === | ||
Line 1,181: | Line 1,229: | ||
|- | |- | ||
| 2 | | 2 | ||
| [[Mediatypes|Mediatype]] | | ([[Mediatypes|Mediatype]] & 0xFF) | (uninitialized_data? & 0xFFFFFF00) | ||
|- | |- | ||
| 3 | | 3 | ||
| | | Number of something? Hardcoded per-archive, 0 for ExeFS, 200 for area:, 100 for rate:, 40 for eula:, etc. | ||
|} | |} | ||
Line 1,211: | Line 1,259: | ||
Archives 0x3 and 0x2345678E both allow for accessing the [[RomFS#Level_3_Format|level-3 IVFC images]] for RomFS access. The main CXI RomFS is accessible via an all-zero 0xc-byte binary file-lowpath. The update RomFS can be accessed with the first u32 in the binary file-lowpath being set to 0x5. The user must handle parsing the filesystem used in the exposed image itself. | Archives 0x3 and 0x2345678E both allow for accessing the [[RomFS#Level_3_Format|level-3 IVFC images]] for RomFS access. The main CXI RomFS is accessible via an all-zero 0xc-byte binary file-lowpath. The update RomFS can be accessed with the first u32 in the binary file-lowpath being set to 0x5. The user must handle parsing the filesystem used in the exposed image itself. | ||
With FSPXI the returned data for RomFS is the entire RomFS section from the NCCH, starting at the IVFC header. | |||
The 0x3 archive is an interface for the 0x2345678E archive with the current process programID+mediatype. The file lowpath is 3-words. These words are written to 0x2345678E-archive file_lowpath+0, with the rest of that lowpath set to all-zero(lowpath is different from archive 0x2345678A). File lowpath: | The 0x3 archive is an interface for the 0x2345678E archive with the current process programID+mediatype. The file lowpath is 3-words. These words are written to 0x2345678E-archive file_lowpath+0, with the rest of that lowpath set to all-zero(lowpath is different from archive 0x2345678A). File lowpath: | ||
Line 1,265: | Line 1,315: | ||
| SD | | SD | ||
|- | |- | ||
| | | 3 | ||
| TWL Photo | | TWL Photo | ||
|} | |} | ||
Line 1,446: | Line 1,496: | ||
| 0x10 | | 0x10 | ||
| 0x120 | | 0x120 | ||
| The [[nand/private/movable.sed]], encrypted with AES- | | The [[nand/private/movable.sed]], encrypted with AES-CBC using the above MAC for the counter. | ||
|} | |} | ||