Changes

Jump to navigation Jump to search
657 bytes added ,  10:05, 31 August 2019
Use official struct names
=== IContentMetaDatabase ===
This is "nn::ncm::IContentMetaDatabase".
 
Note the official name for Meta Record is "ContentMetaKey".
{| class="wikitable" border="1"
! Cmd || Name || Notes
|-
| 0 || Set || Takes a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]], a type-5 [[CNMT#Content_records|Content Records]] buffer and a u64 size.
|-
| 1 || Get || Takes a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]], a type-6 buffer to write [[CNMT#Content_records|Content Records]] to and a u64 size. Returns the actual number of bytes read into the buffer. First 8 bytes of the data is header (u16 numExtraDataBytes, numContentRecords, numMetaRecords, padding). After the header is numExtraDataBytes of additional data, after which follow content records and content meta recordskeys. Set takes this same data as input.
|-
| 2 || Remove || Takes a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]], and removes the associated record.
|-
| 3 || GetContentIdByType || Takes a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]] and a u8 [[#Title_TypesContentMetaType|Title Content Meta Type]]. Returns a [[#NcaID]].
|-
| 4 || ListContentInfo || Takes a type-6 buffer to write [[CNMT#Content_records|Content Record]] entries to, a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]], and a u32 index into the Content Record entries to start copying from. Returns a u32 entries_read.
|-
| 5 || List || Takes a type-6 buffer to write [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]]s to, a u32 [[#Title_TypesContentMetaType|Title Content Meta Type]], a u64 TID, a u64 TID_LOW, and u64 TID_HIGH. Writes into the buffer all Content Meta Records Keys with low <= record->title_id <= high, and record->type == type. Returns u32 numEntriesTotal, numEntriesWritten. Additionally requires record->title_id == TID, if record->type is Application, Patch, Add-On, or Delta, otherwise, you can pass 0 for type to ignore the type and list them all in the range.
|-
| 6 || GetLatestContentMetaKey || Takes a u64 title id, and returns the [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]] with the highest version field for that title id.
|-
| 7 || [[#ListApplication]] ||
|-
| 8 || Has || Takes a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]] and returns whether that record is present in the database.
|-
| 9 || HasAll || Takes a type-5 buffer containing [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordsKey]] (code assumes there are size/sizeof(meta_record) records in the buffer), and returns whether all of those records are present in the database.
|-
| 10 || GetSize || Takes a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]], and returns the size of the associated [[CNMT#Content_records|Content Records]].
|-
| 11 || GetRequiredSystemVersion || Takes a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]], and returns u32 from ContentRecords + 16 (only if the Meta record content meta key has type Application or Patch).
|-
| 12 || GetPatchId || Takes a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]], and returns the update title id for that record.
|-
| 13 || DisableForcibly || Closes the meta database, and causes all future IPC commands to the current session to return error 0xDC05.
| 15 || Commit || Flushes the in-memory database to savedata.
|-
| 16 || HasContent || Takes a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]] and an [[#NcaID]]. Returns whether the content records for that content meta record key contain the NcaID.
|-
| 17 || ListContentMetaInfo || Takes a type-6 [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]] output buffer, a u32 offset into that buffer, and an input [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]].
|-
| 18 || GetAttributes || Takes a [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]], and returns u8 from ContentRecords + 6.
|-
| 19 || [2.0.0+] GetRequiredApplicationVersion || Does the same thing as GetEntryUnknownRecordSize, but for AddOnContents.
==== ReadEntryMetaRecords ====
Takes a type-6 [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]] output buffer, a u32 offset into that buffer, and an input [[CNMT#Meta_recordsContentMetaKey|Content Meta RecordKey]] entry. Returns a u32 for total_read_entries.
Reads the content meta records keys stored in the entry's content records into the output buffer.
This is used, for example, with System Update title 0100000000000816, which contains Meta Records content meta keys for all other systitles in its Content Records.
==== LookupOrphanContent ====
The NcaID is the same as the first 0x10-bytes from the calculated SHA256 hash, from hashing the entire output from [[#ReadContentIdFile]].
==ContentInstallType = Enums =This is "nn::ncm::ContentInstallType" {| class="wikitable" border="1"|-! Value! Description|-| 0x0| Full|-| 0x1| FragmentOnly|-| 0x7| Unknown (Invalid Content Install Type)|} ==ContentMetaType == Title Types ====This is "nn::ncm::ContentMetaType"
{| class="wikitable" border="1"
! Value
! Description
|-
| 0x00
| Unknown (Invalid Content Meta Type)
|-
| 0x01
| 0x83
| Delta
|}
 
== ContentMetaKey ==
This is "nn::ncm::ContentMetaKey"
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| Title id
|-
| 0x8
| 0x4
| Version
|-
| 0xC
| 0x1
| [[#ContentMetaType|Content Meta Type]]
|-
| 0xD
| 0x1
| [[#ContentInstallType|Content Install Type]]
|-
| 0xE
| 0x2
| Padding
|}
48

edits

Navigation menu