Property ID 0
To enable users of property sets to attach meaning to properties beyond those
provided by the type indicator, property ID 0 is reserved for an optional
dictionary of displayable names for the property set.
The dictionary contains a count of entries in the list, followed by a list of
dictionary entries.
typedef struct tagDICTIONARY
{
DWORD cEntries ; // Count of entries in the list
ENTRY rgEntry[ cEntries ] ; // Property ID/String pair
} DICTIONARY ;
Each dictionary entry in the list is a Property Identifier/String pair. This
can be illustrated using the following pseudo-structure definition for a
dictionary entry (it’s a pseudo-structure because the sz[] member is variable
in size):
typedef struct tagENTRY
{
DWORD propid ; // Property ID
DWORD cch ; // Count of characters in the string
char sz[cch]; // Zero-terminated string
} ENTRY ;
Note the following about property set dictionaries:
-
Property ID 0 does not have a type indicator. The DWORD that indicates the
count of entries sits in the type indicator position.
-
The count of characters in the string (cch) includes the zero character
that terminates the string. When the codepage of the property set is not
Unicode, this field is actually a byte count. This count may not
exceed 256.
-
The dictionary is entirely optional. Not all the names of properties in the
set need appear in the dictionary. Conversely, not all names in the dictionary
need to correspond to properties in the set. The dictionary should omit
entries for properties assumed to be universally known by clients that
manipulate the property set. Typically, names for the base property sets for
widely accepted standards are omitted, but special purpose property sets may
include dictionaries for use by browsers.
-
Property names in the dictionary are stored in the code page indicated by
Property ID 1 (see below). For ANSI code pages, each dictionary entry is
byte-aligned. Thus, there is no padding between property names with Property
ID 0. This is the only case where DWORD values (the property ID and property
name length DWORDs) are not required to be aligned on 32-bit boundaries. For
Unicode pages, each dictionary entry is 32-bit aligned.
-
Property names that begin with the binary Unicode characters 0x0001 through
0x001F are reserved for future use.
-
The property name associated with property ID 0 represents the name of the
entire property set.