2.6.2.6.3 VHDX Parent Locator

The only parent-locator type defined by this specification is the VHDX locator type with a GUID value of "B04AEFB7-D19E-4A81-B789-25B8E9445913".

The VHDX parent locator has several possible key-value pair entries, some of which are required, as shown in the following table. The entries are UTF-16 encoded, with no escape characters.

Entry

Type

Example

parent_linkage

GUID

{83ed0ec3-24c8-49a6-a959-5e4bf1288bfb}

parent_linkage2

GUID

{83ed0ec3-24c8-49a6-a959-5e4bf1288bfb}

relative_path

Path

..\..\path2\sub3\parent.vhdx

volume_path

Path

\\?\Volume{26A21BDA-A627-11D7-9931-806E6F6E6963}\path2\sub3\parent.vhdx

absolute_win32_path

Path

\\?\d:\path2\sub3\parent.vhdx

The two entries with key values of parent_linkage and parent_linkage2 specify possible values of the parent's identity. The parent_linkage entry MUST be present, and parent_linkage2 can't be present. The value field is encoded as a lowercase string with enclosing braces; for example: {83ED0EC3-24C8-49A6-A959-5E4BF1288BFB}. When a differencing VHDX file is created, the implementation MUST populate the parent's DataWriteGuid field in this field. When opening the parent VHDX file of a differencing VHDX, the implementation MUST verify that the DataWriteGuid field of the parent's header matches one of these two fields.<12>

At least one entry with key value of relative_path, volume_path, or absolute_win32_path MUST be present to locate the parent VHDX file. An implementation has to evaluate the paths in a specific order to locate the parent: relative_path, volume_path and then absolute_path. Upon successful open of a chain, an implementation has to update any existing stale path entries to point to its current parent file.

The entry with key value of relative_path specifies the path of the parent VHDX file relative to the path of the current VHDX file, using "\" as the path separator and ".." to mean parent directory. For example, if the VHDX file is in "d:\path1\sub2\file.vhdx" and the parent file is in "d:\path2\sub3\parent.vhdx", the value field for this entry could contain "..\..\path2\sub3\parent.vhdx".

The entry with key value of volume_path specifies the path of the parent VHDX using an absolute Win32 path containing the volume GUID of the volume on which the parent resides (for example, "\\?\Volume{26A21BDA-A627-11D7-9931-806E6F6E6963}\path2\sub3\parent.vhdx"). This helps locate the parent when drive letters are not available or stable. It MUST NOT contain other forms of Win32 paths.

The entry with key value of absolute_win32_path specifies the path of the parent VHDX using an absolute extended-length Win32 path on a local drive. This path MUST begin with "\\?\" and can be followed by a drive letter (for example, "d:") or a UNC share (for example,"\\ServerName\ShareName"), then the path to the file on that drive using "\" as the path separator (for example, "\path2\sub3\parent.vhdx"). The value field for this entry could contain "\\?\d:\path1\sub2\file.vhdx" or "\\?\MyServer\MyShare\ path3\sub4\file.vhdx".