How to: Parse a Stream from a Binary Property to Read the TZREG Structure

How to: Parse a Stream from a Binary Property to Read the TZREG Structure

This topic shows how to read the TZREG structure from the persisted format stored in the binary property dispidTimeZoneStruct.

  TZREG* BinToTZREG(ULONG cbReg, LPBYTE lpbReg) 
{
    if (!lpbReg) return NULL; 
// Update this if parsing code is changed.
if (cbReg < 3*sizeof(long) + 2*sizeof(WORD) + 2*sizeof(SYSTEMTIME)) return NULL;

TZREG tzReg = {0};
LPBYTE lpPtr = lpbReg;

tzReg.lBias = *((long*)lpPtr);
lpPtr += sizeof(long);
tzReg.lStandardBias = *((long*)lpPtr);
lpPtr += sizeof(long);
tzReg.lDaylightBias = *((long*)lpPtr);
lpPtr += sizeof(long);
lpPtr += sizeof(WORD);// reserved

tzReg.stStandardDate = *((SYSTEMTIME*)lpPtr);
lpPtr += sizeof(SYSTEMTIME);
lpPtr += sizeof(WORD);// reserved
tzReg.stDaylightDate = *((SYSTEMTIME*)lpPtr);
lpPtr += sizeof(SYSTEMTIME);

TZREG* ptzReg = NULL;
ptzReg = new TZREG;
if (ptzReg)
{
    *ptzReg = tzReg;
}

return ptzReg;

}

See Also

How to: Read Time Zone Properties from an Appointment