2.3.6.5 HashTable

The HashTable defines an associative structure (hash table) consisting of two arrays: one containing keys, the other containing values. These arrays are ArraySingleObject records in the serialized octet stream referenced using MemberReference records serialized as the sixth and seventh member values following this record. Both arrays MUST have the same length. The serialized value for the first member value MUST be 0.72.


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

RecordTypeEnum

ObjectId

...

ClassName (29 bytes)

...

...

...

MemberCount

...

MemberName1

...

...

...

MemberName2

...

...

MemberName3

...

...

MemberName4 (17 bytes)

...

...

...

MemberName5

...

...

MemberName6

...

MemberName7

...

BinaryTypeEnum1

BinaryTypeEnum2

BinaryTypeEnum3

BinaryTypeEnum4

BinaryTypeEnum5

BinaryTypeEnum6

BinaryTypeEnum7

AdditionalInfo1

AdditionalInfo2

AdditionalInfo3 (29 bytes)

...

...

...

AdditionalInfo4 (37 bytes)

...

...

...

AdditionalInfo5

RecordTypeEnum (1 byte): A RecordTypeEnumeration value that identifies the record type. Its value MUST be 0x04.

ObjectId (4 bytes): An INT32 value ([MS-DTYP] section 2.2.22) that uniquely identifies the object in the serialization stream. An implementation MAY use any algorithm to generate the unique IDs. If the ObjectId is referenced by a MemberReference record elsewhere in the serialization stream, the ObjectId MUST be positive. If the ObjectId is not referenced by any RecordTypeEnumeration in the serialization stream, then the ObjectId SHOULD be positive, but MAY be negative.

ClassName (29 bytes): A LengthPrefixedString identifying the class name. Its value MUST be "System.Collections.Hashtable".

MemberCount (4 bytes): An INT32 value ([MS-DTYP] section 2.2.22) that specifies the number of members in this type. Its value MUST be 0x00000007.

MemberName1 (11 bytes): A LengthPrefixedString containing the first member name. The value MUST be "LoadFactor".

MemberName2 (8 bytes): A LengthPrefixedString containing the second member name. The value MUST be "Version".

MemberName3 (9 bytes): A LengthPrefixedString containing the third member name. The value MUST be "Comparer".

MemberName4 (17 bytes): A LengthPrefixedString containing the fourth member name. The value MUST be "HashCodeProvider".

MemberName5 (9 bytes): A LengthPrefixedString containing the fifth member name. The value MUST be "HashSize".

MemberName6 (5 bytes): A LengthPrefixedString containing the sixth member name. The value MUST be "Keys".

MemberName7 (7 bytes): A LengthPrefixedString containing the seventh member name. The value MUST be "Values".

BinaryTypeEnum1 (1 byte): A BinaryTypeEnumeration value that specifies the binary type of the first member value. The value MUST be 0x00 (Primitive).

BinaryTypeEnum2 (1 byte): A BinaryTypeEnumeration value that specifies the binary type of the second member value. The value MUST be 0x00 (Primitive).

BinaryTypeEnum3 (1 byte): A BinaryTypeEnumeration value that specifies the binary type of the third member value. The value MUST be 0x03 (SystemClass).

BinaryTypeEnum4 (1 byte): A BinaryTypeEnumeration value that specifies the binary type of the fourth member value. The value MUST be 0x03 (SystemClass).

BinaryTypeEnum5 (1 byte): A BinaryTypeEnumeration value that specifies the binary type of the fifth member value. The value MUST be 0x00 (Primitive).

BinaryTypeEnum6 (1 byte): A BinaryTypeEnumeration value that specifies the binary type of the sixth member value. The value MUST be 0x05 (ObjectArray).

BinaryTypeEnum7 (1 byte): A BinaryTypeEnumeration value that specifies the binary type of the seventh member value. The value MUST be 0x05 (ObjectArray).

AdditionalInfo1 (1 byte): A PrimitiveTypeEnumeration value that specifies the primitive type of the first member value. The value MUST be 0x0b (Single).

AdditionalInfo2 (1 byte): A PrimitiveTypeEnumeration value that specifies the primitive type of the second member value. The value MUST be 0x08 (Int32).

AdditionalInfo3 (29 bytes): A LengthPrefixedString containing the name of the class of the third member value. The value MUST be "System.Collections.IComparer".

AdditionalInfo4 (37 bytes): A LengthPrefixedString containing the name of the class of the fourth member value. The value MUST be "System.Collections.IHashCodeProvider".

AdditionalInfo5 (1 byte): A PrimitiveTypeEnumeration value that specifies the primitive type of the fifth member value. The value MUST be 0x08 (Int32).