2.6.1.2 Metadata Table Entry


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

ItemID

...

...

...

Offset

Length

A

B

C

Reserved

Reserved2

ItemID (16 bytes): Specifies a 128-bit identifier (a GUID) for the metadata item. The ItemId and IsUser value pair for an entry MUST be unique within the table.

Offset (4 bytes): Specifies the byte offset of the metadata item in bytes. The Offset field MUST be at least 64 KB and is relative to the beginning of the metadata region.

The item specified by the Offset and Length pair MUST fall entirely within the metadata region without overlapping any other item.

Length (4 bytes): Specifies the length of the metadata item in bytes. Length MUST be less than or equal to 1 MB. If Length is zero, then Offset MUST also be zero, in which case the metadata item SHOULD be considered present but empty.

A - IsUser (1 bit): Specifies whether this metadata item is considered system or user metadata. No more than 1,024 entries can have this bit set; otherwise, the metadata table is invalid. An implementation SHOULD NOT allow users to query metadata items that have this bit set to False.

B - IsVirtualDisk (1 bit): Specifies whether the metadata is file metadata or virtual disk metadata. This determines the behavior when forking a new differencing VHDX file from an existing VHDX file, or when merging a differencing VHDX file into its parent. When forking, an implementation MUST copy all metadata items with this field set in the existing VHDX file to the new file, while leaving items with this field clear. When merging, an implementation MUST destroy any metadata with this field set in the parent, and copy all metadata with this field set in the child to the parent.

C - IsRequired (1 bit): Specifies whether the implementation MUST understand this metadata item to be able load the file. If this field is set to True and the implementation does not recognize this metadata item, the implementation MUST fail to load the file.

Reserved (29 bits): MUST be set to 0.

Reserved2 (4 bytes): MUST be set to 0.