2.2.2.2 Members in Custom-Marshaled INFO structures
This section specifies common members of custom-marshaled INFO structures, which are used consistently with corresponding members of IDL-marshaled INFO structures (section 2.2.1.3), according to the following rules:
MEMBERNAME is derived by trimming the leading "p" from the pointer, string pointer, or multisz pointer member of the IDL-marshaled INFO structure.
The custom-marshaled INFO structure form contains an Offset member whose name is derived by appending "Offset" to MEMBERNAME.
The Offset member is a 32-bit unsigned integer that specifies the number of bytes from the start of the structure to the start of the bytes making up the pointed-to data, string, or multisz. That data, string, or multisz area is represented in the custom-marshaled structure by a member whose name is derived by appending "Array" to MEMBERNAME. The length of that member is variable and includes the terminating null character for string data or the two terminating null characters for multisz data, respectively.
If the pointer, string pointer, or multisz pointer member in the IDL-marshaled structure form is optional—that is, NULL—it can be represented by a zero Offset in a custom-marshaled structure. The corresponding Array member is then considered optional and is present only if the Offset is not zero.
Unless noted otherwise, all other members of IDL-marshaled INFO structure forms are represented identically in the corresponding custom-marshaled INFO structure forms.