2.2.29 ValueTable

The ValueTable encodes the literal values of the properties or references to their values in the heap. However, for a specific property, the value here is relevant only if the corresponding NDTable bits for that property are both not set, that is, 0. Otherwise, the value in ValueTable for the property is ignored.

 ValueTable = *EncodedValue

Depending on the type of the CIM property, each EncodedValue (section 2.2.71) has variable length. The sequence of EncodedValues is packed at the octet level with no alignment or padding.

To find the value for a property, navigate from the PropertyLookupTable (section 2.2.21) to its PropertyLookup (section 2.2.23), and from there get the PropertyInfoRef (section 2.2.25), which gives the PropertyInfo (section 2.2.30). From PropertyInfo, get the ValueTableOffset (section 2.2.34). Use this offset in the ValueTable (section 2.2.29) to discover the value.

If the value is numerical, the value MUST be directly located within this table. If the value is a string or an array type, the value table MUST contain a reference, HeapRef (section 2.2.69), into the Heap (section 2.2.66) to find the actual value.

ValueTable length can be calculated by NdTableValueTableLength minus the length of NdTable, as specified in section 2.2.26.

When encoding or decoding ValueTable under ClassPart, the NdTableValueTableLength specified in ClassHeader of the ClassPart MUST be used for calculating length. When encoding or decoding ValueTable under InstanceData of InstanceType, the NdTableValueTableLength specified in InstanceType.CurrentClass.ClassPart.ClassHeader MUST be used.