The information in this document has been compiled from Microsoft Documentation (Win32
SDK) by Michael Vorburger <mike@vorburger.ch >.
Feel free to use it for your own purpose. However, if you plan on implementing something
similar to SumInf, you might want to contact contact alpha ware. (More
Info about SumInf)
1. HEADER
typedef struct tagPROPERTYSETHEADER
{
// Header
WORD wByteOrder ; // Always 0xFFFE
WORD wFormat ; // Always 0
WORD dwOSVer ; // System version
CLSID clsID ; // Application CLSID
DWORD reserved ; // Should be 1
} PROPERTYSETHEADER;
2. FORMATID/offset
typedef struct tagFORMATIDOFFSET
{
FMTID fmtid ; // The name of the section.
DWORD dwOffset ; // The offset for the section FROM START OF STREAM
} FORMATIDOFFSET;
// For example, the FMTID for the OLE Document Summary Information
// property set is: F29F85E0-4FF9-1068-AB91-08002B27B3D9
3a. Section containing actual values
Offsets are the distance from the start of the section to the start of the property
(type, value) pair. This allows a section to be copied as an array of bytes without any
translation of internal structure. The following pseudo-structures illustrate the format
of a section:
typedef struct tagPROPERTYSECTIONHEADER
{
DWORD cbSection ; // Size of Section
DWORD cProperties ; // Count of Properties in section
} PROPERTYSECTIONHEADER;
3b. _Array_ of names & offsets
typedef struct tagPROPERTYIDOFFSET
{
DWORD propid; // Name of property
DWORD dwOffset; // Offset from start of section to that property
} PROPERTYIDOFFSET;
3c. _Array_ of types & values
typedef struct tag SERIALIZEDPROPERTYVALUE
{
DWORD dwType; // Property Type
BYTE rgb[]; // Property Value
} SERIALIZEDPROPERTYVALUE ;
|