Changes

Jump to navigation Jump to search
1,175 bytes added ,  20:19, 12 October 2022
no edit summary
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.
  

Navigation menu