Changes

2,702 bytes added ,  16:24, 17 August 2023
m
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.
 
|}
 
|}
  
15

edits