A PROPERTY_LIST is a self-describing data structure that contains a sequence of value lists. A PROPERTY_LIST structure MUST consist of the following elements:
A count of the properties in the list.
One value list for each property.
Each property value list, in turn, MUST consist of the following elements:
A property name.
One or more property values. Each property value is represented by a data structure that is appropriate to the type of data. Each property value can consist of multiple data values, such as a string, an array, or a structure.
A CLUSPROP_SYNTAX enumeration set to CLUSPROP_SYNTAX_ENDMARK.
Conceptually, a PROPERTY_LIST can be illustrated as in the following diagram.
Figure 1: Property list
The PROPERTY_LIST is a custom-marshaled contiguous buffer with fields that are specified as follows.
propertyCount (4 bytes): An unsigned 32-bit integer. The PROPERTY_LIST buffer MUST begin with an unsigned long indicating the count of properties in the PROPERTY_LIST. The count of properties MUST be followed by the properties in the form of property values.
The layout of the property name, value list, and value list end mark is repeated in the PROPERTY_LIST buffer for each property in the PROPERTY_LIST. There MUST be one end mark structure for each property in the PROPERTY_LIST. The number of property names and value lists MUST sum to the count of properties that are specified at the beginning of the PROPERTY_LIST buffer. Therefore, the following statement MUST hold true:
propertyCount = number of properties
where each individual property contains a name and a value list.