Line 3: |
Line 3: |
| The official name for CNMT is "PackagedContentMeta". | | The official name for CNMT is "PackagedContentMeta". |
| | | |
− | == Header == | + | = PackagedContentMetaHeader = |
| + | This is "nn::ncm::PackagedContentMetaHeader". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 12: |
Line 14: |
| | 0x0 | | | 0x0 |
| | 0x8 | | | 0x8 |
− | | ID | + | | Id |
| |- | | |- |
| | 0x8 | | | 0x8 |
Line 20: |
Line 22: |
| | 0xC | | | 0xC |
| | 0x1 | | | 0x1 |
− | | [[NCM_services#ContentMetaType|Content Meta Type]] | + | | [[NCM_services#ContentMetaType|ContentMetaType]] |
| |- | | |- |
| | 0xD | | | 0xD |
Line 28: |
Line 30: |
| | 0xE | | | 0xE |
| | 0x2 | | | 0x2 |
− | | Extended Header Size | + | | ExtendedHeaderSize |
| |- | | |- |
| | 0x10 | | | 0x10 |
| | 0x2 | | | 0x2 |
− | | Content Count | + | | ContentCount |
| |- | | |- |
| | 0x12 | | | 0x12 |
| | 0x2 | | | 0x2 |
− | | Content Meta Count | + | | ContentMetaCount |
| |- | | |- |
| | 0x14 | | | 0x14 |
| | 0x1 | | | 0x1 |
− | | Content Meta Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless) | + | | ContentMetaAttributes (0=None, 1=IncludesExFatDriver, 2=Rebootless, 4=Compacted) |
| |- | | |- |
| | 0x15 | | | 0x15 |
Line 48: |
Line 50: |
| | 0x18 | | | 0x18 |
| | 0x4 | | | 0x4 |
− | | Required Download System Version | + | | RequiredDownloadSystemVersion |
| |- | | |- |
| | 0x1C | | | 0x1C |
Line 55: |
Line 57: |
| |} | | |} |
| | | |
− | == SystemUpdate Extended Header == | + | = SystemUpdateMetaExtendedHeader = |
| + | This is "nn::ncm::SystemUpdateMetaExtendedHeader". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 64: |
Line 68: |
| | 0x0 | | | 0x0 |
| | 0x4 | | | 0x4 |
− | | Extended Data Size | + | | ExtendedDataSize |
| |} | | |} |
| | | |
− | == Application Extended Header == | + | = ApplicationMetaExtendedHeader = |
| + | This is "nn::ncm::ApplicationMetaExtendedHeader". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 76: |
Line 82: |
| | 0x0 | | | 0x0 |
| | 0x8 | | | 0x8 |
− | | Patch ID | + | | PatchId |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x4 | | | 0x4 |
− | | Required System Version | + | | RequiredSystemVersion |
| |- | | |- |
| | 0xC | | | 0xC |
| | 0x4 | | | 0x4 |
− | | Required Application Version | + | | RequiredApplicationVersion |
| |} | | |} |
| | | |
− | == Patch Extended Header == | + | = PatchMetaExtendedHeader = |
| + | This is "nn::ncm::PatchMetaExtendedHeader". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 96: |
Line 104: |
| | 0x0 | | | 0x0 |
| | 0x8 | | | 0x8 |
− | | Application ID | + | | ApplicationId |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x4 | | | 0x4 |
− | | Required System Version | + | | RequiredSystemVersion |
| |- | | |- |
| | 0xC | | | 0xC |
| | 0x4 | | | 0x4 |
− | | Extended Data Size | + | | ExtendedDataSize |
| |- | | |- |
| | 0x10 | | | 0x10 |
Line 111: |
Line 119: |
| |} | | |} |
| | | |
− | == AddOnContent Extended Header == | + | = AddOnContentMetaExtendedHeader = |
| + | This is "nn::ncm::AddOnContentMetaExtendedHeader". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 120: |
Line 130: |
| | 0x0 | | | 0x0 |
| | 0x8 | | | 0x8 |
− | | Application ID | + | | ApplicationId |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x4 | | | 0x4 |
− | | Required Application Version | + | | RequiredApplicationVersion |
| + | |- |
| + | | 0xC |
| + | | 0x1 |
| + | | [15.0.0+] ContentAccessibilityIndividual ([1.0.0-14.1.2] Reserved) |
| + | |- |
| + | | 0xD |
| + | | 0x3 |
| + | | Reserved |
| + | |- |
| + | | 0x10 |
| + | | 0x8 |
| + | | [15.0.0+] DataPatchId |
| + | |} |
| + | |
| + | = DeltaMetaExtendedHeader = |
| + | This is "nn::ncm::DeltaMetaExtendedHeader". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x8 |
| + | | ApplicationId |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | ExtendedDataSize |
| |- | | |- |
| | 0xC | | | 0xC |
Line 131: |
Line 171: |
| |} | | |} |
| | | |
− | == Delta Extended Header == | + | = DataPatchMetaExtendedHeader = |
| + | This is "nn::ncm::DataPatchMetaExtendedHeader". |
| + | |
| + | This was added with [15.0.0+]. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 140: |
Line 184: |
| | 0x0 | | | 0x0 |
| | 0x8 | | | 0x8 |
− | | Application ID | + | | DataId |
| |- | | |- |
| | 0x8 | | | 0x8 |
| + | | 0x8 |
| + | | ApplicationId |
| + | |- |
| + | | 0x10 |
| | 0x4 | | | 0x4 |
− | | Extended Data Size | + | | RequiredApplicationVersion |
| |- | | |- |
− | | 0xC | + | | 0x14 |
| | 0x4 | | | 0x4 |
| + | | ExtendedDataSize |
| + | |- |
| + | | 0x18 |
| + | | 0x8 |
| | Reserved | | | Reserved |
| |} | | |} |
| | | |
− | == Packaged Content Info == | + | = PackagedContentInfo = |
| + | This is "nn::ncm::PackagedContentInfo". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 165: |
Line 218: |
| | 0x20 | | | 0x20 |
| | 0x10 | | | 0x10 |
− | | Content ID | + | | ContentId |
| |- | | |- |
| | 0x30 | | | 0x30 |
Line 173: |
Line 226: |
| | 0x35 | | | 0x35 |
| | 0x1 | | | 0x1 |
− | | [15.0.0+] Content Attributes | + | | [15.0.0+] ContentAttributes |
| |- | | |- |
| | 0x36 | | | 0x36 |
| | 0x1 | | | 0x1 |
− | | Content Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]]) | + | | ContentType (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]]) |
| |- | | |- |
| | 0x37 | | | 0x37 |
| | 0x1 | | | 0x1 |
− | | ID Offset | + | | IdOffset |
| |} | | |} |
| | | |
− | == Content Meta Info == | + | = ContentMetaInfo = |
| + | This is "nn::ncm::ContentMetaInfo". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 194: |
Line 248: |
| | 0x0 | | | 0x0 |
| | 0x8 | | | 0x8 |
− | | ID | + | | Id |
| |- | | |- |
| | 0x8 | | | 0x8 |
Line 202: |
Line 256: |
| | 0xC | | | 0xC |
| | 0x1 | | | 0x1 |
− | | [[NCM_services#Title_Types|Content Meta Type]] | + | | [[NCM_services#Title_Types|ContentMetaType]] |
| |- | | |- |
| | 0xD | | | 0xD |
| | 0x1 | | | 0x1 |
− | | Content Meta Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless) | + | | ContentMetaAttributes (0=None, 1=IncludesExFatDriver, 2=Rebootless, 4=Compacted) |
| |- | | |- |
| | 0xE | | | 0xE |
Line 215: |
Line 269: |
| This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]]. | | This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]]. |
| | | |
− | == SystemUpdate Extended Data == | + | = SystemUpdateMetaExtendedData = |
| + | This is "nn::ncm::SystemUpdateMetaExtendedData". |
| | | |
| If the Version field is 1, the format is: | | If the Version field is 1, the format is: |
Line 230: |
Line 285: |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | Variation Count | + | | VariationCount |
| |- | | |- |
| | 0x8 | | | 0x8 |
− | | 0x20 * Variation Count | + | | 0x20 * VariationCount |
− | | [[CNMT#Firmware_Variation_Info_(Version_1)|Firmware Variation Info (Version 1)]] | + | | [[#FirmwareVariationInfo|FirmwareVariationInfo]] (Version 1) |
| |} | | |} |
| | | |
Line 250: |
Line 305: |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | Variation Count | + | | VariationCount |
| |- | | |- |
| | 0x8 | | | 0x8 |
− | | 0x4 * Variation Count | + | | 0x4 * VariationCount |
− | | Firmware Variation ID | + | | FirmwareVariationId |
| |- | | |- |
− | | | + | | Variable |
− | | 0x20 * Variation Count | + | | 0x20 * VariationCount |
− | | [[CNMT#Firmware_Variation_Info_(Version_2)|Firmware Variation Info (Version 2)]] | + | | [[#FirmwareVariationInfo|FirmwareVariationInfo]] (Version 2) |
| |- | | |- |
− | | | + | | Variable |
− | | 0x10 * Meta Count (From [[CNMT#Firmware_Variation_Info_(Version_2)|Firmware Variation Info (Version 2)]]) | + | | 0x10 * MetaCount (from [[#FirmwareVariationInfo|FirmwareVariationInfo]] (Version 2)) |
− | | [[CNMT#Content_Meta_Info|Content Meta Info]] (If Refer To Base is False) | + | | [[#ContentMetaInfo|ContentMetaInfo]] (if ReferToBase is False) |
| |} | | |} |
| | | |
− | === Firmware Variation Info (Version 1) === | + | == FirmwareVariationInfo == |
| + | This is "FirmwareVariationInfo ". |
| | | |
| + | If the Version field is 1, the format is: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 275: |
Line 332: |
| | 0x0 | | | 0x0 |
| | 0x4 | | | 0x4 |
− | | Firmware Variation ID | + | | FirmwareVariationId |
| |- | | |- |
| | 0x4 | | | 0x4 |
Line 282: |
Line 339: |
| |} | | |} |
| | | |
− | === Firmware Variation Info (Version 2) ===
| + | If the Version field is 2, the format is: |
− | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 292: |
Line 348: |
| | 0x0 | | | 0x0 |
| | 0x1 | | | 0x1 |
− | | Refer To Base (0=False, 1=True) | + | | ReferToBase (0=False, 1=True) |
| |- | | |- |
| | 0x1 | | | 0x1 |
Line 300: |
Line 356: |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | Meta Count | + | | MetaCount |
| |- | | |- |
| | 0x8 | | | 0x8 |
Line 307: |
Line 363: |
| |} | | |} |
| | | |
− | == Patch Extended Data == | + | = PatchMetaExtendedData = |
| + | This is "nn::ncm::PatchMetaExtendedData". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 317: |
Line 374: |
| | 0x0 | | | 0x0 |
| | 0x4 | | | 0x4 |
− | | History Count | + | | PatchHistoryHeaderCount |
| |- | | |- |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | Delta History Count | + | | PatchDeltaHistoryCount |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x4 | | | 0x4 |
− | | Delta Count | + | | PatchDeltaHeaderCount |
| |- | | |- |
| | 0xC | | | 0xC |
| | 0x4 | | | 0x4 |
− | | Fragment Set Count | + | | FragmentSetCount |
| |- | | |- |
| | 0x10 | | | 0x10 |
| | 0x4 | | | 0x4 |
− | | History Content Count | + | | PatchHistoryContentInfoCount |
| |- | | |- |
| | 0x14 | | | 0x14 |
| | 0x4 | | | 0x4 |
− | | Delta Content Count | + | | PatchDeltaPackagedContentInfoCount |
| |- | | |- |
| | 0x18 | | | 0x18 |
Line 344: |
Line 401: |
| |- | | |- |
| | 0x1C | | | 0x1C |
− | | 0x38 * History Count | + | | 0x38 * PatchHistoryHeaderCount |
− | | [[CNMT#History_Header|History Headers]] | + | | [[#PatchHistoryHeader|PatchHistoryHeader]] |
| |- | | |- |
− | | | + | | Variable |
− | | 0x28 * Delta History Count | + | | 0x28 * PatchDeltaHistoryCount |
− | | [[CNMT#Delta_History|Delta Histories]] | + | | [[#PatchDeltaHistory|PatchDeltaHistory]] |
| |- | | |- |
− | | | + | | Variable |
− | | 0x28 * Delta Count | + | | 0x28 * PatchDeltaHeaderCount |
− | | [[CNMT#Delta_Header|Delta Headers]] | + | | [[#PatchDeltaHeader|PatchDeltaHeader]] |
| |- | | |- |
− | | | + | | Variable |
− | | 0x34 * Fragment Set Count | + | | 0x34 * FragmentSetCount |
− | | [[CNMT#Fragment_Set|Fragment Sets]] | + | | [[#FragmentSet|FragmentSet]] |
| |- | | |- |
− | | | + | | Variable |
− | | 0x18 * History Content Count | + | | 0x18 * PatchHistoryContentInfoCount |
− | | [[CNMT#Packaged_Content_Info|History Content Info]] (Packaged Content Info without the Hash entry) | + | | [[#PackagedContentInfo|PatchHistoryContentInfo]] ([[#PackagedContentInfo|PackagedContentInfo]] without the Hash entry) |
| |- | | |- |
− | | | + | | Variable |
− | | 0x38 * Delta Content Count | + | | 0x38 * PatchDeltaPackagedContentInfoCount |
− | | [[CNMT#Packaged_Content_Info|Delta Packaged Content Info]] | + | | [[#PackagedContentInfo|PatchDeltaPackagedContentInfo]] |
| |- | | |- |
− | | | + | | Variable |
− | | 0x4 * Fragment Indicator Count (From [[CNMT#Fragment_Set|Fragment Sets]]) | + | | 0x4 * FragmentIndicatorCount (from [[#FragmentSet|FragmentSet]]) |
− | | [[CNMT#Fragment_Indicator|Fragment Indicators]] | + | | [[#FragmentIndicator|FragmentIndicator]] |
| |} | | |} |
| | | |
− | === History Header === | + | == PatchHistoryHeader == |
| + | This is "nn::ncm::PatchHistoryHeader". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 382: |
Line 440: |
| | 0x0 | | | 0x0 |
| | 0x10 | | | 0x10 |
− | | Content Meta Key (Slightly different Content Meta Info) | + | | ContentMetaKey |
| |- | | |- |
| | 0x10 | | | 0x10 |
Line 390: |
Line 448: |
| | 0x30 | | | 0x30 |
| | 0x2 | | | 0x2 |
− | | Content Info Count | + | | ContentInfoCount |
| |- | | |- |
| | 0x32 | | | 0x32 |
Line 397: |
Line 455: |
| |} | | |} |
| | | |
− | === Delta History === | + | == PatchDeltaHistory == |
| + | This is "nn::ncm::PatchDeltaHistory". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 407: |
Line 466: |
| | 0x0 | | | 0x0 |
| | 0x8 | | | 0x8 |
− | | Source Patch ID | + | | SourcePatchId |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x8 | | | 0x8 |
− | | Destination Patch ID | + | | DestinationPatchId |
| |- | | |- |
| | 0x10 | | | 0x10 |
| | 0x4 | | | 0x4 |
− | | Source Version | + | | SourceVersion |
| |- | | |- |
| | 0x14 | | | 0x14 |
| | 0x4 | | | 0x4 |
− | | Destination Version | + | | DestinationVersion |
| |- | | |- |
| | 0x18 | | | 0x18 |
| | 0x8 | | | 0x8 |
− | | Download Size | + | | DownloadSize |
| |- | | |- |
| | 0x20 | | | 0x20 |
Line 430: |
Line 489: |
| |} | | |} |
| | | |
− | === Delta Header === | + | == PatchDeltaHeader == |
| + | This is "nn::ncm::PatchDeltaHeader". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 440: |
Line 500: |
| | 0x0 | | | 0x0 |
| | 0x8 | | | 0x8 |
− | | Source Patch ID | + | | SourcePatchId |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 8 | | | 8 |
− | | Destination Patch ID | + | | DestinationPatchId |
| |- | | |- |
| | 0x10 | | | 0x10 |
| | 0x4 | | | 0x4 |
− | | Source Version | + | | SourceVersion |
| |- | | |- |
| | 0x14 | | | 0x14 |
| | 0x4 | | | 0x4 |
− | | Destination Version | + | | DestinationVersion |
| |- | | |- |
| | 0x18 | | | 0x18 |
| | 0x2 | | | 0x2 |
− | | Fragment Set Count | + | | FragmentSetCount |
| |- | | |- |
| | 0x1A | | | 0x1A |
Line 464: |
Line 524: |
| | 0x20 | | | 0x20 |
| | 0x2 | | | 0x2 |
− | | Content Info Count | + | | ContentInfoCount |
| |- | | |- |
| | 0x22 | | | 0x22 |
Line 471: |
Line 531: |
| |} | | |} |
| | | |
− | === Fragment Set === | + | == FragmentSet == |
| + | This is "nn::ncm::FragmentSet". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 481: |
Line 542: |
| | 0x0 | | | 0x0 |
| | 0x10 | | | 0x10 |
− | | Source Content ID | + | | SourceContentId |
| |- | | |- |
| | 0x10 | | | 0x10 |
| | 0x10 | | | 0x10 |
− | | Destination Content ID | + | | DestinationContentId |
| |- | | |- |
| | 0x20 | | | 0x20 |
| | 0x6 | | | 0x6 |
− | | Source Size | + | | SourceSize |
| |- | | |- |
| | 0x26 | | | 0x26 |
| | 0x6 | | | 0x6 |
− | | Destination Size | + | | DestinationSize |
| |- | | |- |
| | 0x2C | | | 0x2C |
| | 0x2 | | | 0x2 |
− | | Fragment Indicator Count | + | | FragmentIndicatorCount |
| |- | | |- |
| | 0x2E | | | 0x2E |
| | 0x1 | | | 0x1 |
− | | Fragment Target Content Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]]) | + | | FragmentTargetContentType (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]]) |
| |- | | |- |
| | 0x2F | | | 0x2F |
| | 0x1 | | | 0x1 |
− | | Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create) | + | | UpdateType (0=ApplyAsDelta, 1=Overwrite, 2=Create) |
| |- | | |- |
| | 0x30 | | | 0x30 |
Line 512: |
Line 573: |
| |} | | |} |
| | | |
− | === Fragment Indicator === | + | == FragmentIndicator == |
| + | This is "nn::ncm::FragmentIndicator". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 522: |
Line 584: |
| | 0x0 | | | 0x0 |
| | 0x2 | | | 0x2 |
− | | Content Info Index | + | | ContentInfoIndex |
| |- | | |- |
| | 0x2 | | | 0x2 |
| | 0x2 | | | 0x2 |
− | | Fragment Index | + | | FragmentIndex |
| |} | | |} |
| | | |
− | == Delta Extended Data == | + | = DeltaMetaExtendedData = |
| + | This is "nn::ncm::DeltaMetaExtendedData". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 539: |
Line 602: |
| | 0x0 | | | 0x0 |
| | 0x8 | | | 0x8 |
− | | Source Patch ID | + | | SourcePatchId |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x8 | | | 0x8 |
− | | Destination Patch ID | + | | DestinationPatchId |
| |- | | |- |
| | 0x10 | | | 0x10 |
| | 0x4 | | | 0x4 |
− | | Source Version | + | | SourceVersion |
| |- | | |- |
| | 0x14 | | | 0x14 |
| | 0x4 | | | 0x4 |
− | | Destination Version | + | | DestinationVersion |
| |- | | |- |
| | 0x18 | | | 0x18 |
| | 0x2 | | | 0x2 |
− | | Fragment Set Count | + | | FragmentSetCount |
| |- | | |- |
| | 0x1A | | | 0x1A |
Line 562: |
Line 625: |
| |- | | |- |
| | 0x20 | | | 0x20 |
− | | 0x34 * Fragment Set Count | + | | 0x34 * FragmentSetCount |
− | | [[CNMT#Fragment_Set|Fragment Sets]] | + | | [[#FragmentSet|FragmentSet]] |
| |- | | |- |
− | | | + | | Variable |
− | | 0x4 * Fragment Indicator Count (From [[CNMT#Fragment_Set|Fragment Sets]]) | + | | 0x4 * FragmentIndicatorCount (from [[#FragmentSet|FragmentSet]]) |
− | | [[CNMT#Fragment_Indicator|Fragment Indicators]] | + | | [[#FragmentIndicator|FragmentIndicator]] |
| |} | | |} |
| | | |
− | == Digest ==
| + | = Digest = |
− | | |
| Always found at the end of the file. | | Always found at the end of the file. |
| | | |