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 an u32 from state to cmdreply[2]. Probably the total number of titles in the SEEDDB? | + | | 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]] et al can be used to access files through a service-like interface, despite not being an actual service registered using [[SRV:RegisterService]]. | + | 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 821: |
Line 827: |
| ! Accessible via [[Filesystem_services|FS]] | | ! Accessible via [[Filesystem_services|FS]] |
| ! Accessible via [[Filesystem_services_PXI|FSPXI]] | | ! Accessible via [[Filesystem_services_PXI|FSPXI]] |
| + | ! Only accessible by Process9 internally |
| ! Requires binary [[FS:OpenFile|Lowpath]] | | ! Requires binary [[FS:OpenFile|Lowpath]] |
| + | ! Required exheader FS access info bitmask |
| |- | | |- |
| | 0x00000003 | | | 0x00000003 |
− | | Application [[#RomFS|RomFS]] | + | | SelfNCCH (including [[#RomFS|RomFS]]) |
| | Yes | | | Yes |
| | No | | | No |
| | No | | | No |
| + | | No |
| + | | None |
| |- | | |- |
| | 0x00000004 | | | 0x00000004 |
Line 834: |
Line 844: |
| | No | | | No |
| | No | | | No |
| + | | No |
| + | | None |
| |- | | |- |
| | 0x00000006 | | | 0x00000006 |
| | ExtSaveData | | | ExtSaveData |
| | Yes | | | Yes |
| + | | No |
| | No | | | No |
| | Yes | | | Yes |
| + | | 0x100D, when the input extdataID isn't listed in the exheader. |
| |- | | |- |
| | 0x00000007 | | | 0x00000007 |
| | Shared ExtSaveData | | | Shared ExtSaveData |
| | Yes | | | Yes |
| + | | No |
| | No | | | No |
| | Yes | | | Yes |
| + | | None |
| |- | | |- |
| | 0x00000008 | | | 0x00000008 |
| | SystemSaveData | | | SystemSaveData |
| | Yes | | | Yes |
| + | | No |
| | No | | | No |
| | Yes | | | Yes |
| + | | 0x4, when the input saveID doesn't match the exheader system-saveID. |
| |- | | |- |
| | 0x00000009 | | | 0x00000009 |
Line 858: |
Line 876: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | 0x8E |
| |- | | |- |
| | 0x0000000A | | | 0x0000000A |
Line 864: |
Line 884: |
| | No | | | No |
| | No | | | No |
| + | | No |
| + | | 0x808E |
| |- | | |- |
| | 0x12345678 | | | 0x12345678 |
| | ExtSaveData for BOSS | | | ExtSaveData for BOSS |
| | Yes | | | Yes |
| + | | No |
| | No | | | No |
| | Yes | | | Yes |
| + | | 0x44 |
| |- | | |- |
| | 0x12345679 | | | 0x12345679 |
Line 876: |
Line 900: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | 0x16 |
| |- | | |- |
| | 0x1234567B | | | 0x1234567B |
Line 881: |
Line 907: |
| | No | | | No |
| | Yes | | | Yes |
| + | | No |
| | Yes | | | Yes |
| + | | |
| |- | | |- |
| | 0x1234567C | | | 0x1234567C |
Line 887: |
Line 915: |
| | No | | | No |
| | Yes | | | Yes |
| + | | No |
| | Yes | | | Yes |
| + | | |
| |- | | |- |
| | 0x1234567D | | | 0x1234567D |
Line 894: |
Line 924: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | 0x800 |
| |- | | |- |
| | 0x1234567E | | | 0x1234567E |
Line 900: |
Line 932: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | 0x200 |
| |- | | |- |
| | 0x1234567F | | | 0x1234567F |
Line 906: |
Line 940: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | ? |
| |- | | |- |
| | 0x12345680 | | | 0x12345680 |
Line 911: |
Line 947: |
| | Yes | | | Yes |
| | ? | | | ? |
| + | | No |
| | Yes | | | Yes |
| + | | ? |
| |- | | |- |
| | 0x12345681 | | | 0x12345681 |
| | Unknown. Accessed by FS service. | | | Unknown. Accessed by FS service. |
| | ? | | | ? |
| + | | ? |
| + | | No |
| | ? | | | ? |
| | ? | | | ? |
Line 923: |
Line 963: |
| | Yes | | | Yes |
| | ? | | | ? |
| + | | No |
| | Yes | | | Yes |
| + | | ? |
| |- | | |- |
| | 0x2345678A | | | 0x2345678A |
Line 929: |
Line 971: |
| | Yes | | | Yes |
| | Yes | | | Yes |
| + | | No |
| | Yes | | | Yes |
| + | | 0x1005 |
| |- | | |- |
| | 0x2345678B | | | 0x2345678B |
Line 936: |
Line 980: |
| | No | | | No |
| | Yes | | | Yes |
| + | | Yes |
| + | | |
| |- | | |- |
| | 0x2345678C | | | 0x2345678C |
Line 942: |
Line 988: |
| | No | | | No |
| | Yes | | | Yes |
| + | | Yes |
| + | | |
| |- | | |- |
| | 0x2345678D | | | 0x2345678D |
Line 947: |
Line 995: |
| | No | | | No |
| | No | | | No |
| + | | Yes |
| | No | | | No |
| + | | |
| |- | | |- |
| | 0x2345678E | | | 0x2345678E |
Line 953: |
Line 1,003: |
| | Yes | | | Yes |
| | Yes | | | Yes |
| + | | No |
| | Yes | | | Yes |
| + | | None, see description. |
| |- | | |- |
| | 0x567890AB | | | 0x567890AB |
Line 960: |
Line 1,012: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | ? |
| |- | | |- |
| | 0x567890AC | | | 0x567890AC |
Line 966: |
Line 1,020: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | ? |
| |- | | |- |
| | 0x567890AD | | | 0x567890AD |
Line 972: |
Line 1,028: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | ? |
| |- | | |- |
| | 0x567890AE | | | 0x567890AE |
Line 978: |
Line 1,036: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | 0x100 |
| |- | | |- |
| | 0x567890AF | | | 0x567890AF |
Line 984: |
Line 1,044: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | 0x100 |
| |- | | |- |
| | 0x567890B0 | | | 0x567890B0 |
Line 990: |
Line 1,052: |
| | Yes | | | Yes |
| | No | | | No |
| + | | No |
| + | | |
| |- | | |- |
| | 0x567890B1 | | | 0x567890B1 |
Line 996: |
Line 1,060: |
| | No | | | No |
| | No | | | No |
| + | | No |
| + | | 0x6 |
| |- | | |- |
| | 0x567890B2 | | | 0x567890B2 |
| | UserSaveData (for check). This is the same as the regular SaveData archive, except with this the savedata ID and mediatype is loaded from the input archive lowpath. | | | UserSaveData (for check). This is the same as the regular SaveData archive, except with this the savedata ID and mediatype is loaded from the input archive lowpath. |
| | Yes | | | Yes |
| + | | No |
| | No | | | No |
| | Yes | | | Yes |
| + | | 0x6 |
| |- | | |- |
| | 0x567890B4 | | | 0x567890B4 |
− | | ? SaveData from Demo Version of Retail Game | + | | Similar to 0x567890B2 but can only access Accessible Save specified in [[NCCH/Extended_Header#Storage_Info|exheader]]? |
| | Yes | | | Yes |
| | No | | | No |
| | No | | | No |
| + | | Yes |
| + | | ? |
| |} | | |} |
| | | |
| Archives listed as not requiring a binary lowpath, use lowpath type [[FS:OpenFile|empty]]. | | Archives listed as not requiring a binary lowpath, use lowpath type [[FS:OpenFile|empty]]. |
| + | |
| + | The above permission bitmasks are from v2.x, see the above Services section for how these are handled. |
| | | |
| Archives CTR NAND, NAND RO Write FS, TWL NAND, NAND W FS, and CARD SPI FS require the corresponding process exheader access control mount flag to be set, in the exheader for any of the currently running ARM11 processes, for [[Filesystem_services_PXI|FSPXI]]. The access rights checked by [[Filesystem services|FS]] module for archive mounting with fs:USER, are stored in the process' exheader accessinfo. | | Archives CTR NAND, NAND RO Write FS, TWL NAND, NAND W FS, and CARD SPI FS require the corresponding process exheader access control mount flag to be set, in the exheader for any of the currently running ARM11 processes, for [[Filesystem_services_PXI|FSPXI]]. The access rights checked by [[Filesystem services|FS]] module for archive mounting with fs:USER, are stored in the process' exheader accessinfo. |
Line 1,022: |
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 |
− | | CHAR - Text-based path with 8-bit characters. | + | | ASCII - Text-based path with 7-bit ASCII characters padded to 8-bits each (signed char) |
| |- | | |- |
| | 0x4 | | | 0x4 |
− | | WCHAR - Text-based path with 16-bit characters. | + | | 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,084: |
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,115: |
Line 1,229: |
| |- | | |- |
| | 2 | | | 2 |
− | | [[Mediatypes|Mediatype]] | + | | ([[Mediatypes|Mediatype]] & 0xFF) | (uninitialized_data? & 0xFFFFFF00) |
| |- | | |- |
| | 3 | | | 3 |
− | | Reserved | + | | Number of something? Hardcoded per-archive, 0 for ExeFS, 200 for area:, 100 for rate:, 40 for eula:, etc. |
| |} | | |} |
| | | |
Line 1,145: |
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,199: |
Line 1,315: |
| | SD | | | SD |
| |- | | |- |
− | | 2 | + | | 3 |
| | TWL Photo | | | TWL Photo |
| |} | | |} |
Line 1,380: |
Line 1,496: |
| | 0x10 | | | 0x10 |
| | 0x120 | | | 0x120 |
− | | The [[nand/private/movable.sed]], encrypted with AES-CTR using the above MAC for the counter. | + | | The [[nand/private/movable.sed]], encrypted with AES-CBC using the above MAC for the counter. |
| |} | | |} |
| | | |