Filesystem services: Difference between revisions
No edit summary |
|||
Line 14: | Line 14: | ||
== OpenCodeFileSystem == | == OpenCodeFileSystem == | ||
Takes an u64 | Takes an u64 [[NCM_services#ProgramId|ProgramId]] and a [[#ContentPath]]. Returns an [[#IFileSystem]]. | ||
== IsArchivedProgram == | == IsArchivedProgram == | ||
Line 39: | Line 39: | ||
== RegisterProgram == | == RegisterProgram == | ||
Takes a storageID, a pid, a | Takes a storageID, a pid, a [[NCM_services#ProgramId|ProgramId]], a 0x1C type-A buffer for the [[NPDM#FS_Access_Header| FS Access Header]], and a 0x2C type-A buffer for the [[NPDM#FS_Access_Control| FS Access Control]] | ||
Final FS permissions are stored as (ACI0_perms & ACID_perms). Will panic(svcBreak) when buffer sizes from ipc-rawdata are invalid. | Final FS permissions are stored as (ACI0_perms & ACID_perms). Will panic(svcBreak) when buffer sizes from ipc-rawdata are invalid. | ||
Line 554: | Line 554: | ||
After the [[#FileSystemType]] specific permissions are checked, it then gets the func retval for permissions-type 0x25 and func0. | After the [[#FileSystemType]] specific permissions are checked, it then gets the func retval for permissions-type 0x25 and func0. | ||
When [[#FileSystemType]] is '''ContentMeta''', it uses in64=0xffffffffffffffff internally, otherwise it checks if in64 is set to 0xffffffffffffffff then throws an error if so. When the in64 used internally is not 0xffffffffffffffff, it's compared with the NCA | When [[#FileSystemType]] is '''ContentMeta''', it uses in64=0xffffffffffffffff internally, otherwise it checks if in64 is set to 0xffffffffffffffff then throws an error if so. When the in64 used internally is not 0xffffffffffffffff, it's compared with the NCA [[NCM_services#ProgramId|ProgramId]], then an error is thrown on mismatch. | ||
== OpenBisFileSystem == | == OpenBisFileSystem == | ||
Line 656: | Line 656: | ||
== OpenDataStorageByDataId == | == OpenDataStorageByDataId == | ||
Takes a [[NCM_services#StorageId|StorageID]] and a | Takes a [[NCM_services#StorageId|StorageID]] and a [[NCM_services#ProgramId|ProgramId]]. | ||
Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives. | Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives. | ||
Line 1,036: | Line 1,036: | ||
== GetGameCardUpdatePartitionInfo == | == GetGameCardUpdatePartitionInfo == | ||
Returns a | Returns a [[NCM_services#ProgramId|ProgramId]] and the title-version for it. | ||
* Output u32 with ARMS-gamecard: title-version v131162. This is the title-version for [[2.1.0]], which is the sysupdate included with this gamecard. Launch-day gamecards return title-version v450. | * Output u32 with ARMS-gamecard: title-version v131162. This is the title-version for [[2.1.0]], which is the sysupdate included with this gamecard. Launch-day gamecards return title-version v450. | ||
* Output u64 with ARMS-gamecard: | * Output u64 with ARMS-gamecard: [[NCM_services#ProgramId|ProgramId]] 0100000000000816. | ||
[[NS_Services|NS]] appears to only use this with [[ | [[NS_Services|NS]] appears to only use this with [[NCM_services|NCM]] for checking whether a sysupdate is required. | ||
== GetGameCardDeviceCertificate == | == GetGameCardDeviceCertificate == | ||
Line 2,024: | Line 2,024: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
| | | [[NCM_services#ProgramId|ProgramId]] (0 for SystemSaveData)</br>SaveData: 0 can be used for accessing the savedata associated with the current FS session [[NCM_services#ProgramId|ProgramId]], otherwise when set this is the [[NCM_services#ProgramId|ProgramId]] associated with the savedata to access. | ||
|- | |- | ||
| 0x8 | | 0x8 | ||
Line 2,090: | Line 2,090: | ||
| 0x18 | | 0x18 | ||
| 0x8 | | 0x8 | ||
| OwnerId</br>Official user-processes only uses 0 here for SystemSaveData/SaveData. For the dedicated save-creation code with SaveData/DeviceSaveData, this value comes from an input param with official user-processes. For BcatSaveData, this is the hard-coded [[ | | OwnerId</br>Official user-processes only uses 0 here for SystemSaveData/SaveData. For the dedicated save-creation code with SaveData/DeviceSaveData, this value comes from an input param with official user-processes. For BcatSaveData, this is the hard-coded [[NCM_services#ProgramId|ProgramId]] of the bcat-sysmodule. | ||
|- | |- | ||
| 0x20 | | 0x20 | ||
Line 2,115: | Line 2,115: | ||
= BcatSaveData = | = BcatSaveData = | ||
This is accessed using the same commands for SaveData with the same input u8. The [[#SaveDataAttribute]] is the same as DeviceSaveData, except that the | This is accessed using the same commands for SaveData with the same input u8. The [[#SaveDataAttribute]] is the same as DeviceSaveData, except that the [[NCM_services#ProgramId|ProgramId]] field is set to <input ProgramId>. See above regarding [[#SaveDataCreationInfo]]. | ||
The 0x10-byte struct passed to [[#CreateSaveDataFileSystem]] has the first 0x5-bytes set to all-zero. | The 0x10-byte struct passed to [[#CreateSaveDataFileSystem]] has the first 0x5-bytes set to all-zero. | ||
Line 2,154: | Line 2,154: | ||
| 0x28 | | 0x28 | ||
| 0x8 | | 0x8 | ||
| Application | | Application [[NCM_services#ProgramId|ProgramId]], for regular SaveData. | ||
|- | |- | ||
| 0x30 | | 0x30 |