#pragma once

enum __NonPropFlag
{
	flagSearchFlag = 0x10000, // ensure that all flags in the enum are > 0xffff
	flagSearchState,
	flagTableStatus,
	flagTableType,
	flagObjectType,
	flagSecurityVersion,
	flagSecurityInfo,
	flagACEFlag,
	flagACEType,
	flagACEMaskContainer,
	flagACEMaskNonContainer,
	flagACEMaskFreeBusy,
	flagStreamFlag,
	flagRestrictionType,
	flagBitmask,
	flagRelop,
	flagAccountType,
	flagBounceCode,
	flagOPReply,
	flagOpForward,
	flagFuzzyLevel,
	flagRulesVersion,
	flagNotifEventType,
	flagTableEventType,
	flagTZRule,
	flagRuleFlag,
	flagExtendedFolderFlagType,
	flagExtendedFolderFlag,
	flagRecurFrequency,
	flagPatternType,
	flagCalendarType,
	flagDOW,
	flagN,
	flagEndType,
	flagFirstDOW,
	flagOverrideFlags,
	flagReportTagVersion,
	flagGlobalObjectIdMonth,
	flagOneOffEntryId,
	flagEntryId0,
	flagEntryId1,
	flagMessageDatabaseObjectType,
	flagContabVersion,
	flagContabType,
	flagContabIndex,
	flagExchangeABVersion,
	flagMDBVersion,
	flagMDBFlag,
	flagPropDefVersion,
	flagPDOFlag,
	flagVarEnum,
	flagInternalType,
	flagPersistID,
	flagElementID,
	flagWABEntryIDType,
	flagWebViewVersion,
	flagWebViewType,
	flagWebViewFlags,
	flagFolderType,
	flagFieldCap,
	flagCcsf,
	flagIet,
	flagV2Magic,
	flagV2Version,
};

#define PR_FREEBUSY_NT_SECURITY_DESCRIPTOR (PROP_TAG(PT_BINARY,0x0F00))

// http://support.microsoft.com/kb/171670
// Entry ID for the Calendar
#define PR_IPM_APPOINTMENT_ENTRYID (PROP_TAG(PT_BINARY,0x36D0))
// Entry ID for the Contact Folder
#define PR_IPM_CONTACT_ENTRYID (PROP_TAG(PT_BINARY,0x36D1))
// Entry ID for the Journal Folder
#define PR_IPM_JOURNAL_ENTRYID (PROP_TAG(PT_BINARY,0x36D2))
// Entry ID for the Notes Folder
#define PR_IPM_NOTE_ENTRYID (PROP_TAG(PT_BINARY,0x36D3))
// Entry ID for the Task Folder
#define PR_IPM_TASK_ENTRYID (PROP_TAG(PT_BINARY,0x36D4))
// Entry IDs for the Reminders Folder
#define PR_REM_ONLINE_ENTRYID (PROP_TAG(PT_BINARY,0x36D5))
#define PR_REM_OFFLINE_ENTRYID PROP_TAG(PT_BINARY, 0x36D6)
// Entry ID for the Drafts Folder
#define PR_IPM_DRAFTS_ENTRYID (PROP_TAG(PT_BINARY,0x36D7))

#define PR_FREEBUSY_ENTRYIDS PROP_TAG(PT_MV_BINARY, 0x36E4)
#ifndef PR_RECIPIENT_TRACKSTATUS
#define PR_RECIPIENT_TRACKSTATUS PROP_TAG(PT_LONG, 0x5FFF)
#endif
#define PR_RECIPIENT_FLAGS PROP_TAG(PT_LONG, 0x5FFD)
#define PR_RECIPIENT_ENTRYID PROP_TAG(PT_BINARY, 0x5FF7)
#define PR_ICON_INDEX PROP_TAG(PT_LONG, 0x1080)

#ifndef PR_NT_SECURITY_DESCRIPTOR
#define PR_NT_SECURITY_DESCRIPTOR (PROP_TAG(PT_BINARY,0x0E27))
#endif
#ifndef PR_BODY_HTML
#define PR_BODY_HTML (PROP_TAG(PT_TSTRING,0x1013))
#endif

#ifndef PR_SEND_INTERNET_ENCODING
#define PR_SEND_INTERNET_ENCODING PROP_TAG(PT_LONG, 0x3A71)
#endif
#ifndef PR_ATTACH_FLAGS
#define PR_ATTACH_FLAGS PROP_TAG(PT_LONG, 0x3714)
#endif

// http://support.microsoft.com/kb/837364
#ifndef PR_CONFLICT_ITEMS
#define PR_CONFLICT_ITEMS PROP_TAG(PT_MV_BINARY,0x1098)
#endif

// http://support.microsoft.com/kb/278321
#ifndef PR_INETMAIL_OVERRIDE_FORMAT
#define PR_INETMAIL_OVERRIDE_FORMAT PROP_TAG(PT_LONG,0x5902)
#endif

// http://support.microsoft.com/kb/312900
#define PR_CERT_DEFAULTS                PROP_TAG(PT_LONG,       0x0020)
// Values for PR_CERT_DEFAULTS
#define MSG_DEFAULTS_NONE               0
#define MSG_DEFAULTS_FOR_FORMAT         1 // Default certificate for S/MIME.
#define MSG_DEFAULTS_GLOBAL             2 // Default certificate for all formats.
#define MSG_DEFAULTS_SEND_CERT          4 // Send certificate with message.

// http://support.microsoft.com/kb/194955
#define PR_AGING_GRANULARITY    PROP_TAG(PT_LONG,0x36EE)

// http://msdn2.microsoft.com/en-us/library/bb176434.aspx
#define PR_AGING_DEFAULT          PROP_TAG(PT_LONG,0x685E)

#define AG_DEFAULT_FILE			0x01
#define AG_DEFAULT_ALL			0x02

// IMPORTANT NOTE: This property holds additional Ren special folder EntryIDs.
// The EntryID is for the special folder is located at sf* - sfRenMVEntryIDs
// This is the only place you should add new special folder ids, and the order
// of these entry ids must be preserved for legacy clients.
// Also, all new (as of Office.NET) special folders should have the extended
// folder flag XEFF_SPECIAL_FOLDER to tell the folder tree data to check if
// this folder is actually special or not.
// See comment above for places in Outlook that will need modification if you
// add a new sf* index.
// It currently contains:
//       sfConflicts       0
//       sfSyncFailures    1
//       sfLocalFailures   2
//       sfServerFailures  3
//       sfJunkEmail       4
//       sfSpamTagDontUse  5
//
// NOTE: sfSpamTagDontUse is not the real special folder but used #5 slot
// Therefore, we need to skip it when enum through sf* special folders.
#define PR_ADDITIONAL_REN_ENTRYIDS    PROP_TAG(PT_MV_BINARY, 0x36D8)

// http://msdn2.microsoft.com/en-us/library/bb820966.aspx
#define	PR_PROFILE_SERVER_FULL_VERSION PROP_TAG( PT_BINARY, pidProfileMin+0x3b)

// [MS-NSPI].pdf
#define DT_CONTAINER    ((ULONG) 0x00000100)
#define DT_TEMPLATE     ((ULONG) 0x00000101)
#define DT_ADDRESS_TEMPLATE ((ULONG) 0x00000102)
#define DT_SEARCH       ((ULONG) 0x00000200)

// http://msdn2.microsoft.com/en-us/library/bb821036.aspx
#define PR_FLAG_STATUS PROP_TAG( PT_LONG, 0x1090 )
enum FollowUpStatus
{
	flwupNone = 0,
	flwupComplete,
	flwupMarked
};

// http://msdn2.microsoft.com/en-us/library/bb821062.aspx
#define PR_FOLLOWUP_ICON PROP_TAG( PT_LONG, 0x1095 )
enum OlFlagIcon
{
	olNoFlagIcon=0,
	olPurpleFlagIcon=1,
	olOrangeFlagIcon=2,
	olGreenFlagIcon=3,
	olYellowFlagIcon=4,
	olBlueFlagIcon=5,
	olRedFlagIcon=6,
};

// http://msdn2.microsoft.com/en-us/library/bb821130.aspx
enum Gender
{
	genderMin = 0,
	genderUnspecified = genderMin,
	genderFemale,
	genderMale,
	genderCount,
	genderMax = genderCount - 1
};

// [MS-OXCFOLD]
// Use CI searches exclusively (never use old-style search)
#define CONTENT_INDEXED_SEARCH		((ULONG) 0x00010000)

// Never use CI search (old-style search only)
#define NON_CONTENT_INDEXED_SEARCH	((ULONG) 0x00020000)

// Make the search static (no backlinks/dynamic updates).  This is independent
// of whether or not the search uses CI.
#define STATIC_SEARCH				((ULONG) 0x00040000)

// http://msdn.microsoft.com/en-us/library/ee219969(EXCHG.80).aspx
// The search used the content index (CI) in some fashion, and is
// non-dynamic
// NOTE: If SEARCH_REBUILD is set, the query is still being processed, and
// the static-ness may not yet have been determined (see SEARCH_MAYBE_STATIC).
#define SEARCH_STATIC			((ULONG) 0x00010000)

// The search is still being evaluated (SEARCH_REBUILD should always
// be set when this bit is set), and could become either static or dynamic.
// This bit is needed to distinguish this in-progress state separately from
// static-only (SEARCH_STATIC) or dynamic-only (default).
#define SEARCH_MAYBE_STATIC		((ULONG) 0x00020000)

// CI TWIR Search State for a query request.
// Currently, we have 4 different search states for CI/TWIR, they are:
// CI Totally, CI with TWIR residual, TWIR Mostly, and TWIR Totally
#define SEARCH_COMPLETE         ((ULONG) 0x00001000)
#define SEARCH_PARTIAL          ((ULONG) 0x00002000)
#define CI_TOTALLY              ((ULONG) 0x01000000)
#define CI_WITH_TWIR_RESIDUAL   ((ULONG) 0x02000000)
#define TWIR_MOSTLY             ((ULONG) 0x04000000)
#define TWIR_TOTALLY            ((ULONG) 0x08000000)

// [MS-OXCSPAM].pdf
#define PR_SENDER_ID_STATUS PROP_TAG( PT_LONG, 0x4079)
// Values that PR_SENDER_ID_STATUS can take
#define SENDER_ID_NEUTRAL				0x1
#define SENDER_ID_PASS					0x2
#define SENDER_ID_FAIL					0x3
#define SENDER_ID_SOFT_FAIL				0x4
#define SENDER_ID_NONE					0x5
#define SENDER_ID_TEMP_ERROR			0x80000006
#define SENDER_ID_PERM_ERROR			0x80000007

#define PR_JUNK_THRESHOLD PROP_TAG(PT_LONG, 0x6101)
#define SPAM_FILTERING_NONE						0xFFFFFFFF
#define SPAM_FILTERING_LOW						0x00000006
#define SPAM_FILTERING_MEDIUM					0x00000005
#define SPAM_FILTERING_HIGH						0x00000003
#define SPAM_FILTERING_TRUSTED_ONLY				0x80000000

// [MS-OXOCAL].pdf
#define RECIP_UNSENDABLE	(int) 0x0000
#define RECIP_SENDABLE		(int) 0x0001
#define RECIP_ORGANIZER		(int) 0x0002   // send bit plus this one
#define RECIP_EXCEPTIONAL_RESPONSE	(int) 0x0010 // recipient has exceptional response
#define RECIP_EXCEPTIONAL_DELETED	(int) 0x0020 // recipient is NOT in this exception
#define RECIP_ORIGINAL		(int) 0x0100	// this was an original recipient on the meeting request

#define	respNone			0
#define	respOrganized		1
#define respTentative		2
#define respAccepted		3
#define respDeclined		4
#define respNotResponded	5

// [MS-OXOFLAG].pdf
#define PR_TODO_ITEM_FLAGS PROP_TAG(PT_LONG, 0x0e2b)
#define TDIP_None			0x00000000
#define TDIP_Active			0x00000001 // Object is time flagged
#define TDIP_ActiveRecip	0x00000008 // SHOULD only be set on a draft message object, and means that the object is flagged for recipients.

// [MS-OXORule].pdf
#define PR_RULE_MSG_STATE PROP_TAG(PT_LONG, 0x65e9)

// [MS-OXOSRCH].pdf
#define PR_WB_SF_STORAGE_TYPE PROP_TAG(PT_LONG, 0x6846)
enum t_SmartFolderStorageType
{
	SFST_NUMBER = 0x01,			// for template's data (numbers)
	SFST_TEXT = 0x02,			// for template's data (strings)
	SFST_BINARY = 0x04,			// for template's data (binary form, such as entry id, etc.)
	SFST_MRES = 0x08,			// for condition in MRES format
	SFST_FILTERSTREAM = 0x10,	// for condition in IStream format
	SFST_FOLDERNAME = 0x20,		// for folder list's names
	SFST_FOLDERLIST = 0x40,		// for the binary folder entrylist

	SFST_TIMERES_MONTHLY = 0x1000,	// monthly update
	SFST_TIMERES_WEEKLY = 0x2000,	// weekly update
	SFST_TIMERES_DAILY = 0x4000,	// the restriction(or filter) has a time condition in it
	SFST_DEAD= 0x8000,				// used to indicate there is not a valid SPXBIN
};

// [MS-OXOCAL].pdf
#define dispidBusyStatus 0x8205
enum OlBusyStatus
{
	olFree=0,
	olTentative=1,
	olBusy=2,
	olOutOfOffice=3,
};
#define dispidApptAuxFlags 0x8207
#define	auxApptFlagCopied 0x0001
#define	auxApptFlagForceMtgResponse 0x0002
#define	auxApptFlagForwarded 0x0004

#define dispidApptColor 0x8214
#define dispidApptStateFlags 0x8217
#define	asfNone			0x0000
#define	asfMeeting		0x0001
#define asfReceived		0x0002
#define asfCancelled	0x0004
#define asfForward		0x0008

#define dispidResponseStatus 0x8218
#define dispidRecurType 0x8231
#define rectypeNone		(int) 0
#define rectypeDaily	(int) 1
#define rectypeWeekly	(int) 2
#define rectypeMonthly	(int) 3
#define rectypeYearly	(int) 4

#define dispidConfType 0x8241
enum confType
{
	confNetMeeting = 0,
	confNetShow,
	confExchange
};

#define dispidChangeHighlight 0x8204
#define BIT_CH_START		0x00000001
#define BIT_CH_END			0x00000002
#define BIT_CH_RECUR		0x00000004
#define BIT_CH_LOCATION		0x00000008
#define BIT_CH_SUBJECT		0x00000010
#define BIT_CH_REQATT		0x00000020
#define BIT_CH_OPTATT		0x00000040
#define BIT_CH_BODY			0x00000080
#define BIT_CH_CUSTOM		0x00000100
#define BIT_CH_SILENT		0x00000200
#define BIT_CH_ALLOWPROPOSE 0x00000400
#define BIT_CH_CONF			0x00000800
#define BIT_CH_ATT_REM		0x00001000
#define BIT_CH_NOTUSED		0x80000000

#define dispidMeetingType 0x0026
#define mtgEmpty         0x00000000
#define mtgRequest       0x00000001
#define mtgFull          0x00010000
#define mtgInfo          0x00020000
#define mtgOutofDate     0x00080000
#define mtgDelegatorCopy 0x00100000

#define dispidIntendedBusyStatus 0x8224

#define PR_ATTACHMENT_FLAGS PROP_TAG(PT_LONG, 0x7FFD)
#define afException				0x02   // This is an exception to a recurrence

#define dispidNonSendToTrackStatus 0x8543
#define dispidNonSendCcTrackStatus 0x8544
#define dispidNonSendBccTrackStatus 0x8545

#define LID_CALENDAR_TYPE 0x001C
#define CAL_DEFAULT           0
#define CAL_JAPAN_LUNAR      14
#define CAL_CHINESE_LUNAR    15
#define CAL_SAKA             16
#define CAL_LUNAR_KOREAN     20

// [MS-OXCMSG].pdf
#define dispidSideEffects 0x8510
#define seOpenToDelete		0x0001	// Additional processing is required on the Message object when deleting.
#define seNoFrame			0x0008	// No UI is associated with the Message object.
#define seCoerceToInbox		0x0010	// Additional processing is required on the Message object when moving or
									// copying to a Folder object with a PR_CONTAINER_CLASS of 'IPF.Note'.
#define seOpenToCopy		0x0020	// Additional processing is required on the Message object when copying to
									// another folder.
#define seOpenToMove		0x0040	// Additional processing is required on the Message object when moving to
									// another folder.
#define seOpenForCtxMenu    0x0100  // Additional processing is required on the Message object when displaying verbs
									// to the end-user.
#define seCannotUndoDelete	0x0400	// Cannot undo delete operation, MUST NOT be set unless seOpenToDelete is set.
#define seCannotUndoCopy	0x0800	// Cannot undo copy operation, MUST NOT be set unless seOpenToCopy is set.
#define seCannotUndoMove	0x1000	// Cannot undo move operation, MUST NOT be set unless seOpenToMove is set.
#define seHasScript			0x2000	// The Message object contains end-user script.
#define seOpenToPermDelete	0x4000	// Additional processing is required to permanently delete the Message object.

// [MS-OXOCNTC].pdf
#define dispidFileUnderId 0x8006
#define dispidFileUnderList 0x8026
enum
{
	FILEUNDERID_NONE = 0,
	FILEUNDERID_CUSTOM = 0xffffffff,
	FILEUNDERID_CALLINIT = 0xfffffffe,
	FILEUNDERID_CALCULATE = 0xfffffffd
};
#define dispidLastNameAndFirstName 0x8017
#define dispidCompanyAndFullName 0x8018
#define dispidFullNameAndCompany 0x8019
#define dispidLastFirstNoSpace			0x8030
#define dispidLastFirstSpaceOnly		0x8031
#define dispidCompanyLastFirstNoSpace	0x8032
#define dispidCompanyLastFirstSpaceOnly	0x8033
#define dispidLastFirstNoSpaceCompany	0x8034
#define dispidLastFirstSpaceOnlyCompany	0x8035
#define dispidLastFirstAndSuffix		0x8036
#define dispidFirstMiddleLastSuffix		0x8037
#define dispidLastFirstNoSpaceAndSuffix	0x8038

#define dispidPostalAddressId 0x8022
enum PostalAddressIndex
{
	ADDRESS_NONE = 0,
	ADDRESS_HOME,
	ADDRESS_WORK,
	ADDRESS_OTHER
};

// [MS_OXOTASK].pdf
#define dispidTaskMode 0x8518
enum TaskDelegMsgType
{
	tdmtNothing = 0,	// The task object is not assigned.
	tdmtTaskReq,		// The task object is embedded in a task request.
	tdmtTaskAcc,		// The task object has been accepted by the task assignee.
	tdmtTaskDec,		// The task object was rejected by the task assignee.
	tdmtTaskUpd,		// The task object is embedded in a task update.
	tdmtTaskSELF		// The task object was assigned to the task assigner (self-delegation).
};

#define dispidTaskStatus 0x8101
enum TaskStatusValue
{
	tsvNotStarted = 0, // The user has not started work on the task object. If this value is set,
	                   // dispidPercentComplete MUST be 0.0.
	tsvInProgress,     // The user&#x2019;s work on this task object is in progress. If this value is set,
	                   // dispidPercentComplete MUST be greater than 0.0 and less than 1.0
	tsvComplete,       // The user&#x2019;s work on this task object is complete. If this value is set,
	                   // dispidPercentComplete MUST be 1.0, dispidTaskDateCompleted
	                   // MUST be the current date, and dispidTaskComplete MUST be true.
	tsvWaiting,        // The user is waiting on somebody else.
	tsvDeferred        // The user has deferred work on the task object.
};

#define dispidTaskState 0x8113
enum TaskDelegState
{
	tdsNOM = 0, // This task object was created to correspond to a task object that was
	            // embedded in a task rejection but could not be found locally.
	tdsOWNNEW,  // The task object is not assigned.
	tdsOWN,     // The task object is the task assignee&#x2019;s copy of an assigned task object.
	tdsACC,     // The task object is the task assigner&#x2019;s copy of an assigned task object.
	tdsDEC      // The task object is the task assigner&#x2019;s copy of a rejected task object.
};

#define dispidTaskHistory 0x811A
enum TaskHistory
{
	thNone = 0,       // No changes were made.
	thAccepted,       // The task assignee accepted this task object.
	thDeclined,       // The task assignee rejected this task object.
	thUpdated,        // Another property was changed.
	thDueDateChanged, // The dispidTaskDueDate property changed.
	thAssigned        // The task object has been assigned to a task assignee.
};

#define dispidTaskMultRecips 0x8120
enum TaskMultRecips
{
	tmrNone				= 0x0000,	// none
	tmrSent				= 0x0001,	// The task object has multiple primary recipients.
	tmrRcvd				= 0x0002,	// Although the 'Sent' hint was not present, the client detected
									// that the task object has multiple primary recipients.
	tmrTeamTask			= 0x0004,	// This value is reserved.
};

#define dispidTaskOwnership 0x8129
enum TaskOwnershipValue
{
	tovNew,   // The task object is not assigned.
	tovDeleg, // The task object is the task assigner&#x2019;s copy of the task object.
	tovMe     // The task object is the task assignee&#x2019;s copy of the task object.
};

#define dispidTaskDelegValue 0x812A
enum TaskDelegValue
{
	tdvNone,      // The task object is not assigned.
	tdvUnknown,   // The task object&#x2019;s acceptance status is unknown.
	tdvAccepted,  // The task assignee has accepted the task object. This value is set when
	// the client processes a task acceptance.
	tdvDeclined   // The task assignee has rejected the task object. This value is set when the
	// client processes a task rejection.
};

#define dispidLogFlags 0x870C
#define lfContactLog ((ULONG) 0x40000000L) // This journal object has a journal associated attachment

// [MS-OXOMSG].pdf
#define dispidSniffState 0x851A
enum SniffState
{
	ssNone,    // Don't auto-process the message.
	ssOnSniff, // Process the message automatically or when the message is opened.
	ssOnOpen   // Process when the message is opened only.
};

#define dispidNoteColor 0x8B00
#define ncBlue 0
#define ncGreen 1
#define ncPink 2
#define ncYellow 3
#define ncWhite	4

// http://msdn.microsoft.com/en-us/library/bb821181.aspx
#define dispidTimeZoneStruct 0x8233
#define dispidApptTZDefStartDisplay 0x825E
#define dispidApptTZDefEndDisplay 0x825F
#define dispidApptTZDefRecur 0x8260

#define PR_EXTENDED_FOLDER_FLAGS PROP_TAG(PT_BINARY, 0x36DA)
enum ExtendedFolderPropByte
{
	EFPB_FLAGS						= 1,
	EFPB_CLSIDID					= 2,
	EFPB_SFTAG						= 3,
	EFPB_TODO_VERSION				= 5,
};
// possible values for PR_EXTENDED_FOLDER_FLAGS
enum
{
	XEFF_NORMAL					= 0x00000000,
	XEFF_SHOW_UNREAD_COUNT		= 0x00000001,
	XEFF_SHOW_CONTENT_COUNT		= 0x00000002,
	XEFF_SHOW_NO_POLICY			= 0x00000020,
};

#define dispidFlagStringEnum 0x85C0

// [MS-OXOCAL].pdf
#define dispidApptRecur 0x8216
#define ARO_SUBJECT          0x0001
#define ARO_MEETINGTYPE      0x0002
#define ARO_REMINDERDELTA    0x0004
#define ARO_REMINDER         0x0008
#define ARO_LOCATION         0x0010
#define ARO_BUSYSTATUS       0x0020
#define ARO_ATTACHMENT       0x0040
#define ARO_SUBTYPE          0x0080
#define ARO_APPTCOLOR        0x0100
#define ARO_EXCEPTIONAL_BODY 0x0200

enum IdGroup
{
	IDC_RCEV_PAT_ORB_DAILY = 0x200A,
	IDC_RCEV_PAT_ORB_WEEKLY,
	IDC_RCEV_PAT_ORB_MONTHLY,
	IDC_RCEV_PAT_ORB_YEARLY,
	IDC_RCEV_PAT_ERB_END=0x2021,
	IDC_RCEV_PAT_ERB_AFTERNOCCUR,
	IDC_RCEV_PAT_ERB_NOEND,
};

enum
{
	rptMinute = 0,
	rptWeek,
	rptMonth,
	rptMonthNth,
	rptMonthEnd,
	rptHjMonth = 10,
	rptHjMonthNth,
	rptHjMonthEnd
};

const ULONG rpn1st = 1;
const ULONG rpn2nd = 2;
const ULONG rpn3rd = 3;
const ULONG rpn4th = 4;
const ULONG rpnLast = 5;

const ULONG rdfSun = 0x01;
const ULONG rdfMon = 0x02;
const ULONG rdfTue = 0x04;
const ULONG rdfWed = 0x08;
const ULONG rdfThu = 0x10;
const ULONG rdfFri = 0x20;
const ULONG rdfSat = 0x40;

// [MS-OXOTASK].pdf
#define dispidTaskRecur 0x8116
#define dispidTaskMyDelegators 0x8117

// [MS-OXOCAL].pdf
#define LID_GLOBAL_OBJID 0x0003
#define LID_CLEAN_GLOBAL_OBJID 0x0023

// [MS-OXOSRCH].pdf
#define PR_WB_SF_DEFINITION PROP_TAG(PT_BINARY, 0x6845)
#define PR_WB_SF_LAST_USED PROP_TAG(PT_LONG, 0x6834)
#define PR_WB_SF_EXPIRATION PROP_TAG(PT_LONG, 0x683A)
#define PT_SVREID ((ULONG) 0x00FB)

// [MS-OXOPFFB].pdf
#define PR_FREEBUSY_PUBLISH_START PROP_TAG(PT_LONG, 0x6847)
#define PR_FREEBUSY_PUBLISH_END PROP_TAG(PT_LONG, 0x6848)

// [MS-OSCDATA].pdf
#define OOP_DONT_LOOKUP ((ULONG) 0x10000000)

// [MS-OXCDATA].pdf
#define eitLTPrivateFolder		(0x1) // PrivateFolder
#define eitLTPublicFolder		(0x3) // PublicFolder
#define eitLTWackyFolder		(0x5)	// MappedPublicFolder
#define eitLTPrivateMessage		(0x7) // PrivateMessage
#define eitLTPublicMessage		(0x9) // PublicMessage
#define eitLTWackyMessage		(0xB) // MappedPublicMessage
#define eitLTPublicFolderByName	(0xC) // PublicNewsgroupFolder

// Exchange Address Book Version
#define EMS_VERSION         0x000000001

// Wrapped Message Store Version
#define MAPIMDB_VERSION	((BYTE) 0x00)

// Wrapped Message Store Flag
#define MAPIMDB_NORMAL	((BYTE) 0x00)

// Contact Address Book Version
#define CONTAB_VERSION    0x000000003

// Contact Addess Book Types
#define CONTAB_USER       0x00000004
#define CONTAB_DISTLIST   0x00000005

// Contact Address Book Index
enum EEmailIndex
{
	EEI_EMAIL_1 = 0,
	EEI_EMAIL_2,
	EEI_EMAIL_3,
	EEI_FAX_1,
	EEI_FAX_2,
	EEI_FAX_3,
};
#define EMAIL_TYPE_UNDEFINED 0xFF

enum
{
	BFLAGS_INTERNAL_MAILUSER	= 0x03,		// Outlook Contact
	BFLAGS_INTERNAL_DISTLIST,				// Outlook Distribution List
	BFLAGS_EXTERNAL_MAILUSER,				// external (MAPI) Contact
	BFLAGS_EXTERNAL_DISTLIST,				// external (MAPI) Distribution List
	BFLAGS_MASK_OUTLOOK			= 0x80,		// bit pattern 1000 0000
};

#define dispidEmail1OriginalEntryID 0x8085
#define dispidEmail2OriginalEntryID 0x8095
#define dispidEmail3OriginalEntryID 0x80A5
#define dispidFax1EntryID 0x80B5
#define dispidFax2EntryID 0x80C5
#define dispidFax3EntryID 0x80D5
#define dispidSelectedOriginalEntryID 0x800A
#define dispidAnniversaryEventEID 0x804E
#define dispidOrigStoreEid 0x8237
#define dispidReferenceEID 0x85BD
#define dispidSharingInitiatorEid 0x8A09
#define dispidSharingFolderEid 0x8A15
#define dispidSharingOriginalMessageEid 0x8A29
#define dispidSharingBindingEid 0x8A2D
#define dispidSharingIndexEid 0x8A2E
#define dispidSharingParentBindingEid 0x8A5C

// Property Definition Stream
#define	PropDefV1			0x102
#define PropDefV2			0x103

#define	PDO_IS_CUSTOM		0x00000001	// This FieldDefinition structure contains a definition of a user-defined field.
#define	PDO_REQUIRED		0x00000002	// For a form control bound to this field, the checkbox for A value is required for this field is selected in the Validation tab of the Properties dialog box.
#define PDO_PRINT_SAVEAS	0x00000004	// For a form control bound to this field, the checkbox for Include this field for printing and Save As is selected in the Validation tab of the Properties dialog box.
#define PDO_CALC_AUTO		0x00000008	// For a form control bound to this field, the checkbox for Calculate this formula automatically option is selected in the Value tab of the Properties dialog box.
#define PDO_FT_CONCAT		0x00000010	// This is a field of type Combination and it has the 'Joining fields and any text fragments with each other' option selected in its Combination Formula Field dialog.
#define PDO_FT_SWITCH		0x00000020	// This field is of type Combination and has the Showing only the first non-empty field, ignoring subsequent ones option selected in the Combination Formula Field dialog box.
#define PDO_PRINT_SAVEAS_DEF	0x000000040	// This flag is not used

enum iTypeEnum
{
	iTypeUnknown = -1,
	iTypeString,		// 0
	iTypeNumber,		// 1
	iTypePercent,		// 2
	iTypeCurrency,		// 3
	iTypeBool,			// 4
	iTypeDateTime,		// 5
	iTypeDuration,		// 6
	iTypeCombination,	// 7
	iTypeFormula,		// 8
	iTypeIntResult,		// 9
	iTypeVariant,		// 10
	iTypeFloatResult,	// 11
	iTypeConcat,		// 12
	iTypeKeywords,		// 13
	iTypeInteger,		// 14
};

// [MS-OXOSFLD].pdf
#define PR_ADDITIONAL_REN_ENTRYIDS_EX PROP_TAG( PT_BINARY, 0x36d9)

#define		RSF_PID_TREAT_AS_SF			0x8000
#define		RSF_PID_RSS_SUBSCRIPTION	(RSF_PID_TREAT_AS_SF | 1)
#define		RSF_PID_SEND_AND_TRACK		(RSF_PID_TREAT_AS_SF | 2)
#define		RSF_PID_TODO_SEARCH			(RSF_PID_TREAT_AS_SF | 4)
#define		RSF_PID_CONV_ACTIONS		(RSF_PID_TREAT_AS_SF | 6)
#define		RSF_PID_COMBINED_ACTIONS	(RSF_PID_TREAT_AS_SF | 7)
#define		RSF_PID_SUGGESTED_CONTACTS	(RSF_PID_TREAT_AS_SF | 8)

#define		RSF_ELID_ENTRYID			1
#define		RSF_ELID_HEADER				2

#define PR_TARGET_ENTRYID PROP_TAG( PT_BINARY, 0x3010)

#define PR_SCHDINFO_DELEGATE_ENTRYIDS PROP_TAG( PT_MV_BINARY, 0x6845)

#define PR_EMSMDB_SECTION_UID PROP_TAG( PT_BINARY, 0x3d15)

#define EDK_PROFILEUISTATE_ENCRYPTNETWORK 0x4000

#define PR_CONTAB_FOLDER_ENTRYIDS PROP_TAG( PT_MV_BINARY, 0x6620)
#define PR_CONTAB_STORE_ENTRYIDS PROP_TAG( PT_MV_BINARY, 0x6626)
#define PR_CONTAB_STORE_SUPPORT_MASKS PROP_TAG( PT_MV_LONG, 0x6621)
#define PR_DELEGATE_FLAGS PROP_TAG( PT_MV_LONG, 0x686b)

#define PR_EXTENDED_RULE_MSG_CONDITION PROP_TAG( PT_BINARY, 0x0E9A)

// [MS-OXOCNTC].pdf
#define dispidDLOneOffMembers 0x8054
#define dispidDLMembers 0x8055
#define dispidABPEmailList 0x8028
#define dispidABPArrayType 0x8029

#define PR_CONVERSATION_ID PROP_TAG( PT_BINARY, 0x3013)
#define PR_FOLDER_WEBVIEWINFO PROP_TAG( PT_BINARY, 0x36DF)

#define WEBVIEW_PERSISTENCE_VERSION 0x000000002
#define WEBVIEWURL 0x00000001
#define WEBVIEW_FLAGS_SHOWBYDEFAULT 0x00000001

#define dispidContactLinkEntry 0x8585

#define dispidApptUnsendableRecips 0x825D
#define dispidForwardNotificationRecipients 0x8261

// http://msdn.microsoft.com/en-us/library/ee218029(EXCHG.80).aspx
#define PR_NATIVE_BODY_INFO PROP_TAG( PT_LONG, 0x1016)
enum NBI
{
	nbiUndefined = 0,
	nbiPlainText,
	nbiRtfCompressed,
	nbiHtml,
	nbiClearSigned,
};

#define ptagSenderFlags PROP_TAG( PT_LONG, 0x4019)
#define ptagSentRepresentingFlags PROP_TAG( PT_LONG, 0x401A)

#define PR_LAST_VERB_EXECUTED PROP_TAG( PT_LONG, 0x1081)
#define NOTEIVERB_OPEN				0
#define NOTEIVERB_REPLYTOSENDER		102
#define NOTEIVERB_REPLYTOALL		103
#define NOTEIVERB_FORWARD			104
#define NOTEIVERB_PRINT				105
#define NOTEIVERB_SAVEAS			106
#define NOTEIVERB_REPLYTOFOLDER		108
#define NOTEIVERB_SAVE				500
#define NOTEIVERB_PROPERTIES		510
#define NOTEIVERB_FOLLOWUP			511
#define NOTEIVERB_ACCEPT			512
#define NOTEIVERB_TENTATIVE			513
#define NOTEIVERB_REJECT			514
#define NOTEIVERB_DECLINE			515
#define NOTEIVERB_INVITE			516
#define NOTEIVERB_UPDATE			517
#define NOTEIVERB_CANCEL			518
#define NOTEIVERB_SILENTINVITE		519
#define NOTEIVERB_SILENTCANCEL		520
#define NOTEIVERB_RECALL_MESSAGE	521
#define NOTEIVERB_FORWARD_RESPONSE	522
#define NOTEIVERB_FORWARD_CANCEL	523
#define NOTEIVERB_FOLLOWUPCLEAR		524
#define NOTEIVERB_FORWARD_APPT		525
#define NOTEIVERB_OPENRESEND		526
#define NOTEIVERB_STATUSREPORT		527
#define NOTEIVERB_JOURNALOPEN		528
#define NOTEIVERB_JOURNALOPENLINK	529
#define NOTEIVERB_COMPOSEREPLACE	530
#define NOTEIVERB_EDIT				531
#define NOTEIVERB_DELETEPROCESS		532
#define NOTEIVERB_TENTPNTIME		533
#define NOTEIVERB_EDITTEMPLATE		534
#define NOTEIVERB_FINDINCALENDAR	535
#define NOTEIVERB_FORWARDASFILE		536
#define NOTEIVERB_CHANGE_ATTENDEES	537
#define NOTEIVERB_RECALC_TITLE		538
#define NOTEIVERB_PROP_CHANGE		539
#define NOTEIVERB_FORWARD_AS_VCAL	540
#define NOTEIVERB_FORWARD_AS_ICAL	541
#define NOTEIVERB_FORWARD_AS_BCARD	542
#define NOTEIVERB_DECLPNTIME		543
#define NOTEIVERB_PROCESS			544
#define NOTEIVERB_OPENWITHWORD		545
#define NOTEIVERB_OPEN_INSTANCE_OF_SERIES	546
#define NOTEIVERB_FILLOUT_THIS_FORM	547
#define NOTEIVERB_FOLLOWUP_DEFAULT	548
#define NOTEIVERB_REPLY_WITH_MAIL	549
#define NOTEIVERB_TODO_TODAY		566
#define NOTEIVERB_TODO_TOMORROW		567
#define NOTEIVERB_TODO_THISWEEK		568
#define NOTEIVERB_TODO_NEXTWEEK		569
#define NOTEIVERB_TODO_THISMONTH	570
#define NOTEIVERB_TODO_NEXTMONTH	571
#define NOTEIVERB_TODO_NODATE		572
#define NOTEIVERB_FOLLOWUPCOMPLETE	573
#define NOTEIVERB_COPYTOPOSTFOLDER	574
#define NOTEIVERB_PARTIALRECIP_SILENTINVITE		575
#define NOTEIVERB_PARTIALRECIP_SILENTCANCEL		576

#define PR_NT_USER_NAME_W CHANGE_PROP_TYPE(PR_NT_USER_NAME, PT_UNICODE)

#define PR_PROFILE_OFFLINE_STORE_PATH_A PROP_TAG(PT_STRING8, 0x6610)
#define PR_PROFILE_OFFLINE_STORE_PATH_W PROP_TAG(PT_UNICODE, 0x6610)

// Documented via widely shipped mapisvc.inf files.
#define CONFIG_USE_SMTP_ADDRESSES ((ULONG)0x00000040)

#define CONFIG_OST_CACHE_PRIVATE  ((ULONG)0x00000180)
#define CONFIG_OST_CACHE_PUBLIC   ((ULONG)0x00000400)

#define PR_STORE_UNICODE_MASK PROP_TAG(PT_LONG, 0x340F)

#define PR_PST_CONFIG_FLAGS PROP_TAG(PT_LONG, 0x6770)
#define PST_CONFIG_CREATE_NOWARN           0x00000001
#define	PST_CONFIG_PRESERVE_DISPLAY_NAME   0x00000002
#define OST_CONFIG_POLICY_DELAY_IGNORE_OST 0x00000008
#define OST_CONFIG_CREATE_NEW_DEFAULT_OST  0x00000010
#define PST_CONFIG_UNICODE                 0x80000000

// http://msdn.microsoft.com/en-us/library/dd941354.aspx
#define dispidImgAttchmtsCompressLevel 0x8593
enum PictureCompressLevel
{
 pclOriginal = 0,
 pclEmail = 1,
 pclWeb = 2,
 pclDocuments = 3,
};

// http://msdn.microsoft.com/en-us/library/dd941362.aspx
#define dispidOfflineStatus 0x85B9
enum MSOCOST
{
	costNil,
	costCheckedOut,
	costSimpleOffline
};

// http://msdn.microsoft.com/en-us/library/ff368035(EXCHG.80).aspx
#define dispidClientIntent 0x0015
enum ClientIntent
{
	ciNone                             = 0x0000,
	ciManager                          = 0x0001,
	ciDelegate                         = 0x0002,
	ciDeletedWithNoResponse            = 0x0004,
	ciDeletedExceptionWithNoResponse   = 0x0008,
	ciRespondedTentative               = 0x0010,
	ciRespondedAccept                  = 0x0020,
	ciRespondedDecline                 = 0x0040,
	ciModifiedStartTime                = 0x0080,
	ciModifiedEndTime                  = 0x0100,
	ciModifiedLocation                 = 0x0200,
	ciRespondedExceptionDecline        = 0x0400,
	ciCanceled                         = 0x0800,
	ciExceptionCanceled                = 0x1000,
};

// http://support.microsoft.com/kb/278321
#define INTERNET_FORMAT_DEFAULT 0
#define INTERNET_FORMAT_MIME 1
#define INTERNET_FORMAT_UUENCODE 2
#define INTERNET_FORMAT_BINHEX 3

// http://msdn.microsoft.com/en-us/library/cc765809.aspx
#define dispidContactItemData 0x8007
#define	dispidEmail1DisplayName 0x8080
#define	dispidEmail2DisplayName 0x8090
#define	dispidEmail3DisplayName 0x80A0

// http://blogs.msdn.com/b/stephen_griffin/archive/2010/09/13/you-chose-wisely.aspx
#define PR_AB_CHOOSE_DIRECTORY_AUTOMATICALLY PROP_TAG( PT_BOOLEAN, 0x3D1C)

// http://blogs.msdn.com/b/stephen_griffin/archive/2011/04/13/setsearchpath-not-really.aspx
enum SearchPathReorderType
{
	SEARCHPATHREORDERTYPE_RAW = 0,
	SEARCHPATHREORDERTYPE_ACCT_PREFERGAL,
	SEARCHPATHREORDERTYPE_ACCT_PREFERCONTACTS,
};

#define PR_USERFIELDS PROP_TAG( PT_BINARY, 0x36E3)

#define ftNull        0x00
#define ftString      0x01
#define ftInteger     0x03
#define ftTime        0x05
#define ftBoolean     0x06
#define ftDuration    0x07
#define ftMultiString 0x0B
#define ftFloat       0x0C
#define ftCurrency    0x0E
#define ftCalc        0x12
#define ftSwitch      0x13
#define ftConcat      0x17

#define FCAPM_CAN_EDIT			0x00000001	// field is editable
#define FCAPM_CAN_SORT			0x00000002	// field is sortable
#define FCAPM_CAN_GROUP			0x00000004	// Field is groupable
#define FCAPM_MULTILINE_TEXT	0x00000100	// can hold multiple lines of text
#define FCAPM_PERCENT			0x01000000	// FLOAT this is a percentage field
#define FCAPM_DATEONLY			0x01000000	// TIME a date-only 'time' field
#define FCAPM_UNITLESS			0x01000000	// INT no unit allowed in display
#define FCAPM_CAN_EDIT_IN_ITEM	0x80000000	// Field can be edited in the item (specifically for custom forms)

#define PR_SPAM_THRESHOLD PROP_TAG(PT_LONG, 0x041B)
#define SPAM_FILTERING_NONE						0xFFFFFFFF
#define SPAM_FILTERING_LOW						0x00000006
#define SPAM_FILTERING_MEDIUM					0x00000005
#define SPAM_FILTERING_HIGH						0x00000003
#define SPAM_FILTERING_TRUSTED_ONLY				0x80000000

// Constants - http://msdn2.microsoft.com/en-us/library/bb905201.aspx
#define CCSF_SMTP             0x0002 // the converter is being passed an SMTP message
#define CCSF_NOHEADERS        0x0004 // the converter should ignore the headers on the outside message
#define CCSF_USE_TNEF         0x0010 // the converter should embed TNEF in the MIME message
#define CCSF_INCLUDE_BCC      0x0020 // the converter should include Bcc recipients
#define CCSF_8BITHEADERS      0x0040 // the converter should allow 8 bit headers
#define CCSF_USE_RTF          0x0080 // the converter should do HTML->RTF conversion
#define CCSF_PLAIN_TEXT_ONLY  0x1000 // the converter should just send plain text
#define CCSF_NO_MSGID         0x4000 // don't include Message-Id field in outgoing messages
#define CCSF_EMBEDDED_MESSAGE 0x8000 // sent/unsent information is persisted in X-Unsent

#define PidTagFolderId PROP_TAG(PT_I8, 0x6748)
#define PidTagMid PROP_TAG(PT_I8, 0x674A)

#define MDB_STORE_EID_V2_VERSION (0x1)
#define MDB_STORE_EID_V2_MAGIC (0xf32135d8)

// http://blogs.msdn.com/b/dvespa/archive/2009/03/16/how-to-sign-or-encrypt-a-message-programmatically-from-oom.aspx
#define PR_SECURITY_FLAGS       PROP_TAG(PT_LONG, 0x6E01)
#define SECFLAG_NONE            0x0000       // Message has no security
#define SECFLAG_ENCRYPTED       0x0001       // Message is sealed
#define SECFLAG_SIGNED          0x0002       // Message is signed