• Sign In
 
  • MSDN Blogs
  • Microsoft Blog Images
  • More ...

  • Advanced search options...
  • Blog Home
  • About
  • Email Blog Author
  • Share this
  • RSS for posts
  • Atom
  • RSS for comments
  • CDO (20)
  • Code Snippet (42)
  • Custom Providers (15)
  • Debugging (7)
  • DevMsgTeam (268)
  • Documentation (96)
  • DST (8)
  • EWS (7)
  • Exchange (98)
  • Gotchas (89)
  • Hotfix (26)
  • MAPI (212)
  • MAPI Download (47)
  • MFCMAPI (87)
  • MSDN (49)
  • Non Dev (11)
  • OOM (17)
  • Outlook (154)
  • Outlook 2007 Auxiliary Reference (44)
  • Outlook Integration API (11)
  • Protocol Docs (20)
  • PST/OST (21)
  • Public Folders (3)
  • Vista (12)
  • WrapPST (14)
Links:
  • Download MFCMAPI
  • MFCMAPI on Facebook
  • Troubleshooting Outlook Crashes
  • Office Update Center
  • Developer Messaging Team Blog
This site is provided "AS IS" with no warranties, and confers no rights. Use of included code samples are subject to the terms specified in the Terms of Use.
Archives
  • January 2012 (1)
  • December 2011 (3)
  • November 2011 (1)
  • October 2011 (3)
  • September 2011 (1)
  • August 2011 (1)
  • July 2011 (4)
  • June 2011 (3)
  • May 2011 (3)
  • April 2011 (3)
  • March 2011 (5)
  • February 2011 (1)
  • January 2011 (2)
  • December 2010 (1)
  • November 2010 (4)
  • October 2010 (1)
  • September 2010 (3)
  • August 2010 (5)
  • July 2010 (3)
  • June 2010 (3)
  • May 2010 (1)
  • April 2010 (3)
  • March 2010 (3)
  • February 2010 (3)
  • January 2010 (2)
  • December 2009 (3)
  • November 2009 (5)
  • October 2009 (4)
  • September 2009 (5)
  • August 2009 (5)
  • July 2009 (11)
  • June 2009 (6)
  • May 2009 (5)
  • April 2009 (3)
  • March 2009 (18)
  • February 2009 (10)
  • January 2009 (3)
  • December 2008 (2)
  • November 2008 (2)
  • October 2008 (5)
  • September 2008 (4)
  • August 2008 (10)
  • July 2008 (6)
  • June 2008 (8)
  • May 2008 (2)
  • April 2008 (4)
  • March 2008 (2)
  • February 2008 (2)
  • January 2008 (5)
  • December 2007 (3)
  • November 2007 (2)
  • October 2007 (3)
  • September 2007 (1)
  • August 2007 (4)
  • July 2007 (5)
  • June 2007 (3)
  • May 2007 (4)
  • April 2007 (1)
  • March 2007 (6)
  • February 2007 (3)
  • January 2007 (2)
  • December 2006 (4)
  • November 2006 (3)
  • October 2006 (1)
  • August 2006 (1)
  • June 2006 (5)
  • May 2006 (5)
  • December 2005 (1)
  • November 2005 (4)
  • October 2005 (2)
  • September 2005 (1)
  • April 2005 (3)
  • December 2004 (2)
  • September 2004 (2)
  • August 2004 (3)
  • July 2004 (3)

A Brief History Of MFCMAPI

MSDN Blogs > SGriffin's MAPI Internals > A Brief History Of MFCMAPI

A Brief History Of MFCMAPI

Stephen Griffin - MSFT
4 Jan 2008 11:17 AM
  • Comments 1

As promised, though a bit late, here are the change lists I put together for a couple of versions of MFCMAPI, along with a history lesson.

Versions 1-3 of MFCMAPI were essentially toys, built as I learned what could be done with MAPI. I can't even find them now - I wasn't very good at source control back then.

The oldest build of MFCMAPI I possess is 4.0.0.4, from 9/26/2001. At the time, it was for me just a collection of sample code that I would share with customers and other Dev Support engineers. Somewhere along the line, I found that Exchange and Outlook support folks wanted to use MFCMAPI as a tool. So I set up an internal site here at Microsoft where they could grab the latest stable build and use it. I didn't consider it ready for customers to use as a tool though, so I asked that I be kept in the loop any time it was sent out the door.

At some point (9/27/2002 to be exact) I bumped the major build number to 5.* to reflect the number of changes I had made recently. I also started work on the classic KB article: http://support.microsoft.com/kb/291794. It went live on 7/24/2003 with version 5.0.0.8. Minor build numbers were introduced along the way and I kept the article updated with builds and source. The last build I published in the KB was 5.0.18.1978 and it was built on 2/14/2005.

In August of 2004, a program manager for Exchange contacted me about having MFCMAPI officially replace MDBVU for Exchange 12, eventually known as Exchange 2007. Of course, I jumped at the chance. The experience of checking my code into the Exchange build tree was incredibly instructive. We ended up changing over half the code to get it up to the Exchange team's standards. We took our time getting the official Exchange build ready, so I kept up the KB releases for a while. Finally on 6/7/2006, we released the newly christened "MAPI Editor". Since this version was built out of the Exchange 2003 build tree, the version number was 06.05.7830.

As I stated at the time, my eventual goal was to get the source for this new build published. I also wanted to continually update the binary as I added features and bug fixes. But as we all know, when you hand control over to someone else - and their priorities aren't in sync with yours - what you want and what you get aren't always the same.

So - this past year, with the blessing of the Exchange team, I took control back. They can still publish an official build of "MAPI Editor" if they want, but I've put all the source and the releases for MFCMAPI up on CodePlex. The first release went live on 8/30/2007, and I've done three updates since then. Since I took over building the project, I resumed my old version numbering scheme, bumping the major build number to 6.

I've rambled enough - here are those diffs:

KB (5.0.18.1978) -> MAPI Editor Download (06.05.7830):

Features:

  • Hex Editor!
  • Icons!
  • Checkbox to dismiss Help/About dialog
  • Tooltips on column headers
  • No more static linking of MAPI - all dynamic and configurable now
  • Set Personal Address Book (IAddrBook::SetPAB)
  • Display Address Book details (IAddrBook::Details)
  • Open contact from contact address book entry (CONTAB_ENTRYID)
  • Open owner for a Distribution List (PR_EMS_AB_OWNER_O)
  • Progress bars (IMAPIProgess)
  • Modify embedded messages and attachments (MAPI_MODIFY)
  • SaveChanges on embedded messages and attachments
  • Turn notifications on/off at the session level
  • Window titles based on PR_DISPLAY_NAME can also use PR_SUBJECT, PR_RULE_NAME or PR_MEMBER_NAME when appropriate
  • Delete Attachments - point at a set of messages and delete every attachment or every attachment with a certain file name
  • Property name parsing now knows ALL names for a property  number - from a table instead of a massive switch statement
  • Property name table used in new PropertyTagEditor for inputting property tags
  • "Extra props" switched from internal, add-only list to user editable list using TagArrayEditor
  • Flag parsing now uses a table instead of a massive switch statement - flag parsing now shows up nearly everywhere
  • Built in Base64 decoding
  • Persist column order on the prop list pane
  • Restrict tables using FindRow
  • Expand/Collapse tables sorted with SortOrders
  • Remove one-off form properties from messages
  • Abort submission of a message (IMsgStore::AbortSubmit)
  • Open Message Store by Entry ID
  • Open a mailbox by DN
  • Copy named props from one item to another
  • Look up registered named props by associated GUID
  • Add Unicode PSTs to a profile
  • Add arbitrary services to a profile
  • New ACL editor - allows adding, modifying and deleting ACLs
  • CompareEntryIDs support
  • IMAPIFormContainer support
  • IAddrBook::RecipOptions support
  • IMAPISession::QueryDefaultMessageOpt support
  • IAddrBook::QueryDefaultRecipOpt support
  • IAttachmentSecurity support - IsAttachmentBlocked
  • IID_IExchangeManageStore3, IID_IExchangeManageStore4 and IID_IExchangeManageStore5 support
  • IID_IProxyStoreObject support - UnWrapNoRef
  • IID_IMessageRaw support

Cleanup:

  • Replaced all hardcoded strings with resource strings
  • Canonicalized TestFunction framework
  • Removed all try/catch blocks (better just to write code that doesn't throw)
  • Fixed a number of potential integer overflows
  • Changed most output file formats to XML
  • Added a lot more columns to the default "nice" views of tables
  • Lots of expansion to the CEditor class to support everything else
  • Lots of cleanup of string handling
  • Most structure->string parsing code overhauled
  • Lots of menu cleanup
  • Keep log file open the whole time (was opening and closing it every time!)
  • Lots of debug output cleanup
  • Los of error handling cleanup
  • Cleanup of property editor dialog code
  • Registry settings saved in HKEY_CURRENT_USER now instead of HKEY_LOCAL_MACHINE - now runs non-admin!
  • Name changed to MAPI Editor
  • Removed dependencies that blocked loading on NT4 and Windows 98
  • Lots of new property tags added

MAPI Editor Download (06.05.7830) -> Initial Codeplex population (6.0.0.1000):

Features:

  • Added MAPI<->MIME conversion APIs (IConverterSession) - thanks to JasonJoh for writing the first draft of this!
  • Added code to display MSG file properties without logging on
  • Added code to read and parse FreeBusy ACLs
  • Added more default columns (deleted message size/count) to GetMailboxTable
  • Added DASL form of a property tag to the property editor dialog
  • Added ability to add properties to message recipients
  • Added ability to parse timezone properties
  • Updated logic to locate MAPISVC.INF and exposed a function to find it
  • Added code to read and parse the Exchange version from a profile
  • Added code to call HrDispatchNotifications at will
  • Removed TestFunction in favor of full Add-In support
  • Added time zone structure parsing
  • Property name, flag, and guid parsing now use a dynamic (not static) table that can be augmented by add-ins

Fixes:

  • Potential hang when errors occur while processing a menu item (bad message handling logic)
  • Mem leak/crash when editing a binary property and inputting an odd number of hex digits (bad error handling)
  • MAPI not initialized errors on some menu items (now we ensure it's initialized first)
  • Flag conversions weren't always displaying (bad conversion logic)
  • PT_SYSTIME alt format displayed the low member twice (bad format string)
  • When saving multiple attachments, there was no way to cancel (inserted cancel logic)
  • Crash when viewing forward rules with multiple attachments (bad format string)
  • MSG files were huge (tweaked export logic to not pass STGM_NOSCRATCH and instead use a scratch file)
  • "Display Inbox" was inconsistent with the other "Display" menu items (made it consistent)
  • In prop tag editor, lookup of a named prop that didn't exist did not clear named prop mapping fields (cleared the field)
  • Restriction parsing didn't parse flags for RES_PROPERTY (added parsing)
  • Stream editing doesn't allow user to pick Unicode or ANSI (added choice)
  • Sorting by Date style columns doesn't work (was sorting by wrong index)
  • Vista's new visual styles conflicted with dialog sizing logic (updated logic to understand themes properly)
  • Find All Named Properties did nothing (bad logic)
  • Hex Editor didn't remove whitespace when converting hex and base64 to other formats (now it's removed)
  • Hex Editor didn't blank other fields when data in the current field is invalid (now it does)
  • Fixed memory leak in certain error cases when editing a prop
  • Made property editing work in "row data only" view

Cleanup:

  • Multitude of spelling/grammar errors (fixed them)
  • Missing help strings (added them)
  • Numerous new property tags (added them)
  • More known flag values (added them)
  • More comments
  • End of line spaces banished
  • Dead code removed
  • 1 Comments
MAPI, MFCMAPI, DevMsgTeam, Vista
Comments
  • SGriffin's MAPI Internals
    15 Jun 2009 9:44 AM

    I’ve touched on the history of MFCMAPI before . The rebranding of MFCMAPI as MAPI Editor and posting

Page 1 of 1 (1 items)
Leave a Comment
  • Please add 7 and 4 and type the answer here:
  • Post
  • © 2012 Microsoft Corporation.
  • Terms of Use
  • Trademarks
  • Privacy Statement
  • Report Abuse
  • 5.6.131.143