New FreeBusy Rights In Exchange/Outlook 2007

[This is now documented here: https://msdn.microsoft.com/en-us/library/dd188684.aspx ]

Development just gave me permission to document this.

Exchange 2007 and Outlook 2007 introduce the concept of a Freebusy access rights to user mailboxes. This is part of the push to eliminate the dependency on Public Folders. Previous versions of Exchange and Outlook depended on a special Public Folder where user's Freebusy information would be published. Other users could then access this folder to determine if someone was free for a meeting.

This system had many drawbacks: Public Folder replication, stale data, incomplete data, etc. It also can't work at all if there are no Public Folders.

So a new system was developed. In the new system, the client would not rely on possibly incorrect data published in a Public Folder. Instead, it uses the new Availability Service to get Freebusy information. In addition, two new rights were exposed on the permissions tab in Outlook 2007, "Free/Busy time" and "Free/Busy time, subject, location".

The use of these permissions is documented elsewhere. Here's how to get at and set them programmatically.

Like other permissions on MAPI folders, these are accessed through PR_ACL_TABLE (see this and this for some sample code). However, suddenly returning new rights in the table was likely to break existing code, so to see/set these rights, you have to request them. This is done by passing ACLTABLE_FREEBUSY as a flag in GetTable. Once this is done the new free busy rights, frightsFreeBusySimple and frightsFreeBusyDetailed, will show in PR_MEMBER_RIGHTS. ACLTABLE_FREEBUSY also needs to be passed in ModifyTable when setting these new rights.

Additionally, we introduced a new security descriptor property, PR_FREEBUSY_NT_SECURITY_DESCRIPTOR, which you will find on the Calendar folder. This property is of the same format as PR_NT_SECURITY_DESCRIPTOR and can be read with similar code (see this to get started, or borrow the CMySecInfo class from MFCMAPI). The access mask will also show the new permissions, as fsdrightFreeBusySimple and fsdrightFreeBusyDetailed. The effective permissions read via this property are the same as those set through the ACL table, so changes made to one will be reflected in the other.

Finally, ACLTABLE_FREEBUSY and the new property PR_FREEBUSY_NT_SECURITY_DESCRIPTOR can only be accessed using MAPI from Outlook 2007 or the MAPI download. Outlook and Exchange 2003's versions of MAPI do not understand them.

Without further ado, here are the constants you'll need:

 #define ACLTABLE_FREEBUSY        ((ULONG) 0x00000002) 
#define frightsFreeBusySimple    0x0000800L 
#define frightsFreeBusyDetailed  0x0001000L 
#define fsdrightFreeBusySimple   0x00000001 
#define fsdrightFreeBusyDetailed 0x00000002
#define PR_FREEBUSY_NT_SECURITY_DESCRIPTOR (PROP_TAG(PT_BINARY,0x0F00))