<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SGriffin's MAPI Internals</title><link>http://blogs.msdn.com/stephen_griffin/default.aspx</link><description>MAPI - Not dead yet</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>MFCMAPI and Old Versions of Visual Studio</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/07/09/mfcmapi-and-old-versions-of-visual-studio.aspx</link><pubDate>Thu, 09 Jul 2009 21:45:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9827684</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9827684.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9827684</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9827684</wfw:comment><description>&lt;p&gt;Ever since I went to the new &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2008/11/18/november-2008-release-of-mfcmapi.aspx"&gt;Vista style icon&lt;/a&gt; for MFCMAPI, it’s &lt;a href="http://mfcmapi.codeplex.com/Thread/View.aspx?ThreadId=46894"&gt;not been possible to compile in Visual Studio 6&lt;/a&gt;. I’ve spent some time looking at this, and it appears the only clean way to get VS 6 working again is to remove compression from the icon, something I really don’t want to do. So I’m considering dropping support for Visual Studio 6 altogether. While I’m at it, it’s been a while since I tried to compile in VS 2003 or 2005, so I was thinking about dropping support for those two as well. The only compiler I’d test would be Visual Studio 2008 (and 2010 whenever it comes out). Note that other than the known break in VS 6 I’m not planning on actively breaking compilation for 2003 or 2005. I just wouldn’t test them, so over time, I probably would break them.&lt;/p&gt;  &lt;p&gt;Before I do this – I wanted to get feedback. Would anybody care if MFCMAPI no longer compiled in Visual Studios 6, 2003, or 2005?&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/07/09/mfcmapi-and-old-versions-of-visual-studio.aspx";digg_title = "MFCMAPI and Old Versions of Visual Studio";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9827684" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Gotchas/default.aspx">Gotchas</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MFCMAPI/default.aspx">MFCMAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Exchange MAPI and the Form Manager</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/07/08/exchange-mapi-and-the-form-manager.aspx</link><pubDate>Wed, 08 Jul 2009 15:27:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9824148</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9824148.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9824148</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9824148</wfw:comment><description>&lt;p&gt;Had a customer contact me recently asking why &lt;a href="http://msdn.microsoft.com/en-us/library/cc839517.aspx"&gt;MAPIOpenFormMgr&lt;/a&gt; doesn’t work with the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=E17E7F31-079A-43A9-BFF2-0A110307611E&amp;amp;displaylang=en"&gt;Exchange MAPI download&lt;/a&gt;. Actually, it wasn’t working in Exchange 2003 either. I’m not sure exactly when it last worked in Exchange’s implementation of MAPI. We might have to go all the way back to the &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Exchange_Client"&gt;Exchange Client&lt;/a&gt; to find a version of Exchange’s MAPI where it worked.&lt;/p&gt;  &lt;p&gt;There was more to this story that I wanted to post. A few years ago, on a whim, I debugged why MAPIOpenFormMgr was broken. I found it was looking for a forms manager DLL that Exchange hadn’t shipped in a long long time. However, there was a mechanism for directing Exchange’s MAPI to use a different forms manager, and one of the DLLs Exchange shipped could act as a forms manager. Since this wasn’t likely supported, and no one was asking about it, I filed it away as an interesting tidbit.&lt;/p&gt;  &lt;p&gt;Since I did get asked about it, my plan was to post the reg key that controls which forms manager is used with a warning that since it isn’t supported or tested, it’s quite possible it will break on you. However, when I went to try it out, I found that when you try it out with the Exchange MAPI download, you crash right away. This isn’t surprising considering no one’s run the code in 10+ years.&lt;/p&gt;  &lt;p&gt;So there’s no point in posting the key, though someone who was really determined could figure it out pretty quickly, and with a little debugging even figure out which DLL to point at. I guess I’ll leave that as an exercise for the reader. The official answer here is that Exchange’s implementation of MAPI doesn’t include a functioning forms manager, so none of the forms management portions of MAPI, such as MAPIOpenFormMgr or &lt;a href="http://msdn.microsoft.com/en-us/library/cc765748.aspx"&gt;MAPIOpenLocalFormContainer&lt;/a&gt;, are available.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/07/08/exchange-mapi-and-the-form-manager.aspx";digg_title = "Exchange MAPI and the Form Manager";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9824148" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI/default.aspx">MAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Gotchas/default.aspx">Gotchas</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MFCMAPI/default.aspx">MFCMAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI+Download/default.aspx">MAPI Download</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>June Cumulative Update for Office 2007</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/07/01/june-cumulative-update-for-office-2007.aspx</link><pubDate>Wed, 01 Jul 2009 14:03:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9811093</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9811093.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9811093</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9811093</wfw:comment><description>&lt;p&gt;Since I’ve got a few customers who were waiting on this update I figured I should announce it here. Yesterday we released the June Cumulative Update for Office 2007: &lt;a href="http://support.microsoft.com/kb/972632"&gt;http://support.microsoft.com/kb/972632&lt;/a&gt;. In there, you’ll find links to update packages for everything in Office 2007. We highlight two:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/972574"&gt;MAPI Profile Crash&lt;/a&gt;: Basically, SP2 caused MAPI to stumble over certain profiles because it didn’t like their names. This update fixes that.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/970944"&gt;The Big Rollup&lt;/a&gt;: This is the mother-load of fixes. In this one, you’ll find fixes for the following issues:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;EMSMDB32 doesn’t handle PR_STORE_UNICODE_MASK properly &lt;/li&gt;    &lt;li&gt;Custom forms with code can crash the preview pane &lt;/li&gt;    &lt;li&gt;Outlook won’t display custom form icons when Windows is in High DPI mode &lt;/li&gt;    &lt;li&gt;Categories created with the OOM aren’t preserved across restarts &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;BTW – if you’re looking for a central place to monitor for the latest Cumulative Update, flag this article: &lt;a title="http://support.microsoft.com/kb/953878" href="http://support.microsoft.com/kb/953878"&gt;http://support.microsoft.com/kb/953878&lt;/a&gt;. It’s updated with every Cumulative Update release to point at the latest one.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/07/01/june-cumulative-update-for-office-2007.aspx";digg_title = "June Cumulative Update for Office 2007";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9811093" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI/default.aspx">MAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Hotfix/default.aspx">Hotfix</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Outlook 2003 Also Rules</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/06/26/outlook-2003-also-rules.aspx</link><pubDate>Fri, 26 Jun 2009 17:15:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9805705</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9805705.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9805705</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9805705</wfw:comment><description>&lt;p&gt;A little follow-up to the &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2008/01/11/outlook-rules-at-least-when-you-tell-it-to.aspx"&gt;Outlook Rules post&lt;/a&gt;, concerning getting rules to fire when you’ve got a wrapped PST store. I had noted in the original post that rules “just worked” in Outlook 2003. Turns out I was partially right. They can work in Outlook 2003, but you have to do something a little special that I had somehow overlooked in my original investigation. Here’s how I explained your should fire a notification for Outlook 2003:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;In Outlook 2003, the way you solve this is to use the IMAPISupport object that was passed to you during &lt;a href="http://msdn2.microsoft.com/en-us/library/bb821126.aspx"&gt;logon&lt;/a&gt;. From there, you would call &lt;a href="http://msdn2.microsoft.com/en-us/library/ms529982(VS.85).aspx"&gt;Notify&lt;/a&gt;, passing &lt;a href="http://msdn2.microsoft.com/en-us/library/ms528898(VS.85).aspx"&gt;fnewNewMail&lt;/a&gt; and the details of the new message.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The tweak here is in the structure you pass to into the Notify call. Since we’re passing fnevNewMail, we use a &lt;a href="http://msdn.microsoft.com/en-us/library/cc765897.aspx"&gt;NEWMAIL_NOTIFICATION&lt;/a&gt; structure, which contains a ulFlags member. The only flag currently documented for this structure is MAPI_UNICODE. To get notifications working in Outlook 2003, we need to OR in a new flag, MSGFLAG_OUTLOOK_NON_EMS_XP. This flag has the same effect the NON_EMS_XP_SAVE flag has for Outlook 2007, which is to let Outlook know this message did not originate from the Exchange transport, so it knows rules need to be processed client side. This flag is only required for Outlook 2003, though we’ve seen no side-effect to also passing it in Outlook 2007. Unlike Outlook 2007, Outlook 2003 does NOT use the ITEMPROC_FORCE flag.&lt;/p&gt;  &lt;p&gt;Definition of the new flag:&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="960"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="133"&gt;MSGFLAG_OUTLOOK_NON_EMS_XP&lt;/td&gt;        &lt;td valign="top" width="133"&gt;0x00010000&lt;/td&gt;        &lt;td valign="top" width="692"&gt;A client can call IMAPISupport::Notify with a fnevNewMail notification, passing MSGFLAG_OUTLOOK_NON_EMS_XP in the ulFlags member of the NEWMAIL_NOTIFICATION structure to indicate that the message is being delivered to a PST and should be eligible for rules processing.This flag is only available if the message is being saved to a PST.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;We will most likely not be adding this flag to the Outlook MAPI documentation since it only applies to Outlook 2003.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/06/26/outlook-2003-also-rules.aspx";digg_title = "Outlook 2003 Also Rules";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9805705" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI/default.aspx">MAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/WrapPST/default.aspx">WrapPST</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Outlook+2007+Auxiliary+Reference/default.aspx">Outlook 2007 Auxiliary Reference</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Named Properties in Exchange 2007 SP2 and Beyond</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/06/17/named-properties-in-exchange-2007-sp2-and-beyond.aspx</link><pubDate>Wed, 17 Jun 2009 16:57:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9769834</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9769834.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9769834</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9769834</wfw:comment><description>&lt;p&gt;With the recent Rollup 8 for Service Pack 1, the Exchange team previewed a change designed to reduce the impact of inbound SMTP messages on the named property map for a store. &lt;a href="http://msexchangeteam.com/archive/2009/04/06/451003.aspx"&gt;Jason talked about it here&lt;/a&gt;. The gist of the change is that before, random e-mails with random x-headers could exhaust the map, making it impossible for legitimate applications, like Outlook, to map new named properties. With Rollup 8, those x-headers will only be promoted if they’ve already been mapped, or if the mail was submitted by an authenticated user.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://http://msexchangeteam.com/archive/2009/06/11/451596.aspx"&gt;Jason’s latest post&lt;/a&gt; details where we’re taking this in SP2 and Exchange 2010. An x-header will only be promoted to a named property if the mapping already exists, either because it was mapped before SP2 was applied, or a MAPI based application requested the mapping. We know this breaks a few scenarios, but felt it was a reasonable tradeoff to preserve the stability of the Exchange server.&lt;/p&gt;  &lt;p&gt;Jason has asked for feedback on this change, so please head &lt;a href="http://msexchangeteam.com/archive/2009/06/11/451596.aspx"&gt;over there&lt;/a&gt; and give it. Thanks!&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/06/17/named-properties-in-exchange-2007-sp2-and-beyond.aspx";digg_title = "Named Properties in Exchange 2007 SP2 and Beyond";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9769834" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI/default.aspx">MAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Gotchas/default.aspx">Gotchas</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>So Long Mapi Editor…And Thanks For All The Fish</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/06/15/so-long-mapi-editor-and-thanks-for-all-the-fish.aspx</link><pubDate>Mon, 15 Jun 2009 13:44:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9753214</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9753214.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9753214</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9753214</wfw:comment><description>&lt;p&gt;I’ve touched on the history of MFCMAPI &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2008/01/04/a-brief-history-of-mfcmapi.aspx"&gt;before&lt;/a&gt;. The rebranding of MFCMAPI as MAPI Editor and posting it on the Microsoft Download site back in 2006 served a purpose, one for which at the time there were few alternatives. However, since then, I have taken back control over publishing of the tool so I can get updates and fixes to my users faster (as opposed to “never”, which was the case with that download).&lt;/p&gt;  &lt;p&gt;Since setting up the &lt;a href="http://mfcmapi.codeplex.com/"&gt;Codeplex&lt;/a&gt; site, one thing that’s been bugging me is that the “MAPI Editor” download was still fairly popular. No amount of evangelizing the new builds on the Codeplex site would prevent people from searching for MFCMAPI on Microsoft.com and coming up with what I view as an old and buggy build. So, last week, we “fixed the glitch”. If you visit the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=55FDFFD7-1878-4637-9808-1E21ABB3AE37&amp;amp;displaylang=en"&gt;download page&lt;/a&gt; now, instead of MAPI Editor, you’ll find a link to Codeplex. And if you download the file that’s there (apparently – there has to be a file to have a page on the download site), it’s a PDF that also directs you to Codeplex.&lt;/p&gt;  &lt;p&gt;The switch was flipped last Thursday, and my download stats already show a &lt;a href="http://mfcmapi.codeplex.com/stats"&gt;huge spike&lt;/a&gt;. So the redirection must be working! Hopefully now I’ll stop seeing problem reports on that old build.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/06/15/so-long-mapi-editor-and-thanks-for-all-the-fish.aspx";digg_title = "So Long Mapi Editor…And Thanks For All The Fish";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9753214" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI/default.aspx">MAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MFCMAPI/default.aspx">MFCMAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Troubleshooting Outlook Crashes</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/06/11/troubleshooting-outlook-crashes.aspx</link><pubDate>Thu, 11 Jun 2009 13:42:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9726567</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9726567.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9726567</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9726567</wfw:comment><description>&lt;p&gt;I recently reviewed an excellent article on &lt;a href="http://support.microsoft.com/kb/2000071"&gt;troubleshooting Outlook crashes&lt;/a&gt; which was just published in the Knowledge Base. While I no longer work in Outlook product support directly, in my role as a Developer Support engineer, I see Outlook crashes all the time. This article encapsulates just about everything I or other engineers here would do to narrow down and define an issue before we attach a debugger. Even if you’re already familiar with most of the techniques given in the article, it’s still handy to keep around because it puts everything you need in one place. For instance, it includes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Complete list of everything which changes in Safe Mode&lt;/li&gt;    &lt;li&gt;An always current pointer to the latest updates for Office&lt;/li&gt;    &lt;li&gt;Registry keys for disabling add-ins&lt;/li&gt;    &lt;li&gt;Lists of temp files which are safe to delete&lt;/li&gt;    &lt;li&gt;Command line parameters&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you support Outlook, I highly recommend keeping this article in your bookmarks.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/06/11/troubleshooting-outlook-crashes.aspx";digg_title = "Troubleshooting Outlook Crashes";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9726567" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>But I Really Need To Open 500 PSTs!</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/06/09/but-i-really-need-to-open-500-psts.aspx</link><pubDate>Tue, 09 Jun 2009 14:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9716103</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9716103.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9716103</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9716103</wfw:comment><description>&lt;P&gt;Today we’re revisiting an issue I first encountered in Outlook 2003. We had a customer, a law firm, who kept all the mail associated with a particular case in a PST. Their users would pass these PSTs around, and depending on their case load, a single user might have over 100 PSTs open at the same time. This worked fine when they had Outlook 2000, but when they installed Outlook 2003 they found if they tried to open more than 20 or so PSTs, they started getting errors such as “Outlook failed to add the personal store to the session” and "Out of memory or system resources. Close some windows or programs and try again."&lt;/P&gt;
&lt;P&gt;Although we don’t recommend opening so many PSTs at the same time, we investigated to find out what had changed, and whether we could help them out. In order to understand what had changed, it helps to know a bit about how the PST provider, and by proxy, Outlook, manages open PSTs. &lt;/P&gt;
&lt;P&gt;There are two mechanisms involved in the PST provider’s management of PST files to consider. The first is the per-PST cache. Any time you’re dealing with random reads/writes to a file, maintaining an in memory cache is critical to performance. The PST provider uses an algorithm based on the file size and other internal details about the PST to determine how large of an in-memory cache to allocate. In Outlook 2002, we greatly increased the size of the caches we use for all types of PST files. Larger blocks of memory mean we consume more of the address space available to the process. In practical terms, this meant we could open about 20 average sized PSTs before we were no longer able to allocate a block of memory large enough to hold the cache for the next file. As a test, I tried to open brand new PSTs and was able to get 85 of them before we ran out of memory.&lt;/P&gt;
&lt;P&gt;Based on our investigation, and the needs of this and other customers, we decided to go in and fine tune the cache sizes to allow more PSTs to be opened at once. This involved a tradeoff in performance, so we placed this change behind a registry key. The KB article &lt;A href="http://support.microsoft.com/kb/907651" mce_href="http://support.microsoft.com/kb/907651"&gt;907651&lt;/A&gt; documents the hotfix we generated for Outlook 2003, as well as the &lt;STRONG&gt;UseLegacyCacheSize &lt;/STRONG&gt;registry key. Outlook 2007 includes the fine tuned cache as well, but the path to the registry key changes slightly. Whereas in Outlook 2003 the key is under “HKEY_CURRENT_USER\Software\Microsoft\Office\&lt;STRONG&gt;11.0&lt;/STRONG&gt;\Outlook\PST”, in Outlook 2007 you’ll set it under “HKEY_CURRENT_USER\Software\Microsoft\Office\&lt;STRONG&gt;12.0&lt;/STRONG&gt;\Outlook\PST”. (Incidentally, this fix was &lt;A href="http://support.microsoft.com/kb/899526" mce_href="http://support.microsoft.com/kb/899526"&gt;backported&lt;/A&gt; to Outlook XP too. There, the reg key will have a &lt;STRONG&gt;10.0 &lt;/STRONG&gt;in it.)&lt;/P&gt;
&lt;P&gt;Now, once this registry key is set, if we try and stress test how many PSTs we can open, we’ll see we hit a practical limit of just under 300, but, unlike before, our address space isn’t exhausted. And where before, if your MAPI based process could only open 20 PSTs, you could always run another process and open 20 more, this new upper limit is spread across all MAPI processes on the box. This is due to the second mechanism the PST provider uses, shared memory.&lt;/P&gt;
&lt;P&gt;As you might recall from my discussion of &lt;A href="http://blogs.msdn.com/stephen_griffin/archive/2009/02/16/pst-files-in-multiple-profiles.aspx" mce_href="http://blogs.msdn.com/stephen_griffin/archive/2009/02/16/pst-files-in-multiple-profiles.aspx"&gt;PST files in multiple profiles&lt;/A&gt;, the PST provider uses shared memory to track and coordinate access to PSTs across multiple processes. Each PST opened incurs a tax on this shared memory, and after enough PSTs are opened, there is no longer space in this block to track any more PSTs. As part of the work we did in introducing the &lt;STRONG&gt;UseLegacyCacheSize&lt;/STRONG&gt;, we also increased the size of this shared memory block, which is what will allow you to reach nearly 300 open PSTs across multiple processes.&lt;/P&gt;
&lt;P&gt;Now – just because you can open nearly 300 PSTs doesn’t mean you should. You’ll start to see noticeable performance issues when you get over 100 PSTs. In fact, if shouldn’t set &lt;STRONG&gt;UseLegacyCacheSize&lt;/STRONG&gt; at all if you don’t need it. The smaller cache has a performance penalty. If you have an application which for some reason needs to open a large number of PSTs, I would consider designing it not to need all of them open at the same time. Only open the PST when you need it and unload it immediately after.&lt;/P&gt;
&lt;DIV style="TEXT-ALIGN: right; PADDING-BOTTOM: 4px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 4px" class=wlWriterHeaderFooter&gt;
&lt;SCRIPT type=text/javascript&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/06/09/but-i-really-need-to-open-500-psts.aspx";digg_title = "But I Really Need To Open 500 PSTs!";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/SCRIPT&gt;

&lt;SCRIPT type=text/javascript src="http://digg.com/tools/diggthis.js" mce_src="http://digg.com/tools/diggthis.js"&gt;&lt;/SCRIPT&gt;

&lt;SCRIPT type=text/javascript&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/SCRIPT&gt;
&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9716103" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI/default.aspx">MAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Gotchas/default.aspx">Gotchas</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/PST_2F00_OST/default.aspx">PST/OST</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Accepting Appointments With CDO May Break Embedded Message Attachments</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/06/08/accepting-appointments-with-cdo-may-break-embedded-message-attachments.aspx</link><pubDate>Mon, 08 Jun 2009 19:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9709221</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9709221.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9709221</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9709221</wfw:comment><description>&lt;P&gt;This is an issue that has only been reproduced so far with &lt;A href="http://support.microsoft.com/lifecycle/?LN=en-us&amp;amp;p1=1773&amp;amp;x=16&amp;amp;y=13" mce_href="http://support.microsoft.com/lifecycle/?LN=en-us&amp;amp;p1=1773&amp;amp;x=16&amp;amp;y=13"&gt;Exchange 2003&lt;/A&gt;, but I wanted to document it here in case anyone else is running in to it. Suppose you have a &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=E17E7F31-079A-43A9-BFF2-0A110307611E&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=E17E7F31-079A-43A9-BFF2-0A110307611E&amp;amp;displaylang=en"&gt;CDO 1.21&lt;/A&gt; based application which uses &lt;A href="http://msdn.microsoft.com/en-us/library/ms527158(EXCHG.10).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms527158(EXCHG.10).aspx"&gt;GetAssociatedAppointment&lt;/A&gt; to accept meeting requests. Suppose further that this application receives and processes a meeting request that contains an embedded message. The resulting appointment item created on the calendar will have an attachment on it, but this attachment will be unusable.&lt;/P&gt;
&lt;P&gt;What’s going on: When you invoke CDO’s GetAssociatedAppointment call, if CDO doesn’t find a matching appointment on the calendar, it creates one. Part of this creation includes copying any attachments on the source meeting request over to the new appointment item. CDO does this by walking the attachment table on the source message, calling &lt;A href="http://msdn.microsoft.com/en-us/library/cc842318.aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc842318.aspx"&gt;OpenAttach&lt;/A&gt; on each attachment. On the destination message, it calls &lt;A href="http://msdn.microsoft.com/en-us/library/cc765541.aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc765541.aspx"&gt;CreateAttach&lt;/A&gt;, then uses &lt;A href="http://msdn.microsoft.com/en-us/library/cc839922.aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc839922.aspx"&gt;CopyTo&lt;/A&gt; to copy from the source to the destination. No properties are excluded and no specific properties are requested. On the embedded messages, this call doesn’t return an error code, but looking with &lt;A href="http://mfcmapi.codeplex.com/" mce_href="http://mfcmapi.codeplex.com/"&gt;MFCMAPI&lt;/A&gt;, we see that &lt;A href="http://msdn.microsoft.com/en-us/library/cc842329.aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc842329.aspx"&gt;PR_ATTACH_DATA_OBJ&lt;/A&gt; doesn’t get copied.&lt;/P&gt;
&lt;P&gt;To understand this, I debugged the Store process on the Exchange 2003 server. This CopyTo operation is handled by a special function in Store that deals with copying attachments. This function has two main code paths, one called &lt;EM&gt;fast&lt;/EM&gt; and one called &lt;EM&gt;slow&lt;/EM&gt;, though it doesn’t look like one is necessarily faster than the other. The &lt;EM&gt;fast&lt;/EM&gt; code path looks like it copies everything at once, while the &lt;EM&gt;slow&lt;/EM&gt; code path reads all the properties from the source attachments and writes them one at a time on the destination. Oh – and PR_ATTACH_DATA_OBJ is specifically excluded from this copy. Since this property, which essentially &lt;EM&gt;is&lt;/EM&gt; the embedded message, isn’t copied, the resulting attachment is no good as an embedded message. It’s unclear why the slow path excludes this property – it appears to have always worked this way, at least as far back as Exchange 5.5.&lt;/P&gt;
&lt;P&gt;What’s also unclear is when we take this slow path. Given that this problem has only just now been observed, we must normally take the fast path. The specific test being made to determine which path to take is whether the column set of the destination attachment table is a subset of the column set of the source attachment table. It appears that usually, it is, and the fast path is chosen. But there are apparently circumstances, on Exchange 2003 at least, and perhaps depending on how the meeting request entered Exchange, under which the destination attachment table has columns not present in the source attachment table, and the slow path is taken, which doesn’t copy the embedded message portion of the attachment.&lt;/P&gt;
&lt;P&gt;The good news here is that in &lt;A href="http://www.microsoft.com/exchange/2010/en/us/default.aspx" mce_href="http://www.microsoft.com/exchange/2010/en/us/default.aspx"&gt;Exchange 2010&lt;/A&gt;, these two paths have been merged. The winner in the merge was the slow path, but this path has been augmented specifically to handle the embedded message case. So this problem should be impossible to hit with Exchange 2010.&lt;/P&gt;
&lt;P&gt;I didn’t get a chance to test workarounds for this issue, but someone who is encountering it might try checking the attachment table on the meeting request, and if embedded messages are found, delete them from the new appointment and recopy them manually.&lt;/P&gt;
&lt;P&gt;[Edit] The customer who reported this to me wanted to point out that the problem seems to only happen when the embedded message comes from another Active Directory domain. The problem has not been observed in single domain scenarios.&lt;/P&gt;
&lt;DIV style="TEXT-ALIGN: right; PADDING-BOTTOM: 4px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 4px" class=wlWriterHeaderFooter&gt;
&lt;SCRIPT type=text/javascript&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/06/08/accepting-appointments-with-cdo-may-break-embedded-message-attachments.aspx";digg_title = "Accepting Appointments With CDO May Break Embedded Message Attachments";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/SCRIPT&gt;

&lt;SCRIPT type=text/javascript src="http://digg.com/tools/diggthis.js" mce_src="http://digg.com/tools/diggthis.js"&gt;&lt;/SCRIPT&gt;

&lt;SCRIPT type=text/javascript&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/SCRIPT&gt;
&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9709221" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Gotchas/default.aspx">Gotchas</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/CDO/default.aspx">CDO</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI+Download/default.aspx">MAPI Download</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>The Fifth MAPI Multithreading Rule</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/05/22/the-fifth-mapi-multithreading-rule.aspx</link><pubDate>Fri, 22 May 2009 14:37:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9635234</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9635234.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9635234</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9635234</wfw:comment><description>&lt;p&gt;We had an issue recently where DDE broadcasts were being blocked on a system. The customer noticed that the problem happened after they called MAPIInitialize on their worker thread. Our investigation gives us a chance to add a 5th rule to the &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2004/09/24/mapi-multithreading-rules.aspx"&gt;MAPI Multithreading Rules&lt;/a&gt; I wrote about a few years ago:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;5. The first thread to initialize MAPI must pump messages.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;To understand this, first we need to know a bit about DDE. Turns out, Raymond &lt;a href="http://blogs.msdn.com/oldnewthing/archive/2005/06/27/432303.aspx"&gt;wrote&lt;/a&gt; about it a &lt;a href="http://blogs.msdn.com/oldnewthing/archive/2007/02/26/1763683.aspx"&gt;couple times&lt;/a&gt; already, so I don’t need to rehash that. The second thing to know is that MAPI uses a hidden window for idle processing. If you dig around a bit, you might even find the window, named “WMS Idle”. MAPI only needs one of these per process, so it’s created on the first thread to initialize MAPI. And as we know, any thread with a window on it &lt;a href="http://blogs.msdn.com/timng/archive/2006/09/06/743795.aspx"&gt;must pump messages&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In the customer’s case, they were pumping on the main thread, but not on the MAPI worker thread. Once they inserted message pumping into the MAPI worker thread, DDE was no longer blocked. Alternatively, they could have called &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2007/05/30/outlook-2007-public-folders-mapi-and-you.aspx"&gt;HrDispatchNotifications&lt;/a&gt;, which is a simple way to pump messages, or called MAPIInitialize on the main thread.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/05/22/the-fifth-mapi-multithreading-rule.aspx";digg_title = "The Fifth MAPI Multithreading Rule";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9635234" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI/default.aspx">MAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Gotchas/default.aspx">Gotchas</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>(Less Than) Portable Search Folders</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/05/21/less-than-portable-search-folders.aspx</link><pubDate>Thu, 21 May 2009 20:47:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9634298</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9634298.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9634298</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9634298</wfw:comment><description>&lt;p&gt;Let’s have fun with the object model and search folders:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Outlook running a profile in online mode. &lt;/li&gt;    &lt;li&gt;Create this macro:      &lt;p&gt;Sub TestAdvancedSearchComplete()&lt;/p&gt;      &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Dim sch As Outlook.Search&lt;/p&gt;      &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; set sch = Application.AdvancedSearch(&amp;quot;Inbox&amp;quot;, &amp;quot;urn:schemas-microsoft-com:office:office#Keywords like 'Test'&amp;quot;, True, &amp;quot;MySearchFolder&amp;quot;)&lt;/p&gt;      &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; sch.Save (&amp;quot;MySearchFolder&amp;quot;)&lt;/p&gt;      &lt;p&gt;End Sub&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;Run the macro, observe the folder. &lt;/li&gt;    &lt;li&gt;On the same machine, create a new profile in cached mode and start Outlook &lt;/li&gt;    &lt;li&gt;Run macro, get “Run-time error '-2147219964 (80040604)': Cannot create folder.” &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;If we want to have more fun, instead of running the macro the second time, we can locate the folder “&lt;em&gt;MySearchFolder”&lt;/em&gt; under the Search Folder node in Outlook. If we click on it, Outlook creates a search folder, but it doesn’t populate with the items we expect to find.&lt;/p&gt;  &lt;p&gt;What’s going on here? To answer that, we have to know a bit about how Outlook’s persisted search folder feature works. When you create a search folder, either using the Object Model, or directly in Outlook, the folder isn’t the first thing created. The first thing created is the search folder definition message. This is a message with the message class “IPM.Microsoft.WunderBar.SFInfo” which lives in the associated contents of the Common Views folder. We can use MFCMAPI to take a look at this message:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/LessThanPortableSearchFolders_EC0A/SearchFolderDefinitionMessage_1.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Our search folder definition message from Common Views" border="0" alt="Our search folder definition message from Common Views" src="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/LessThanPortableSearchFolders_EC0A/SearchFolderDefinitionMessage_thumb_1.jpg" width="742" height="203" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And we can use MFCMAPI’s Smart View feature to parse the search folder definition stored in &lt;a href="http://msdn.microsoft.com/en-us/library/cc815685.aspx"&gt;PR_WB_SF_DEFINITION&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/LessThanPortableSearchFolders_EC0A/SearchFolderDefinition_1.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PR_WB_SF_DEFINITION, with parsing courtesy Smart View" border="0" alt="PR_WB_SF_DEFINITION, with parsing courtesy Smart View" src="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/LessThanPortableSearchFolders_EC0A/SearchFolderDefinition_thumb_1.jpg" width="477" height="549" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;From this, we find that the search folder definition contains the restriction that will form the basis of the search folder:&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Restriction:
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;lpRes-&amp;gt;rt = RES_CONTENT
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;lpRes-&amp;gt;res.resContent.ulFuzzyLevel = FL_IGNORECASE | FL_FULLSTRING = 0x00010000
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;lpRes-&amp;gt;res.resContent.ulPropTag = 0x8010101F (PT_MV_UNICODE)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;lpRes-&amp;gt;res.resContent.lpProp-&amp;gt;ulPropTag = 0x8010001F (PT_UNICODE)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;lpRes-&amp;gt;res.resContent.lpProp-&amp;gt;Value = Test
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  Alt: cb: 8 lpb: 5400650073007400&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Note that this restriction includes a property in the 0x8000 range, meaning it’s a &lt;a href="http://msdn.microsoft.com/en-us/library/cc765864.aspx"&gt;named property&lt;/a&gt;. In fact, it’s &lt;a href="http://msdn.microsoft.com/en-us/library/cc842379.aspx"&gt;the named property “Keywords” in the PS_PUBLIC_STRINGS namespace&lt;/a&gt;. Note also that there’s nothing in the restriction which tells me this. I only know it because I created the search folder and I know what the search folder is supposed to be looking for.&lt;/p&gt;

&lt;p&gt;Now – what happens when we go to a different profile looking at the same mailbox? The search folder itself doesn’t get synched back to the server. Only this search folder definition message gets synced. When Outlook encounters this message, it places a dummy node under Search Folders and waits for the user to click on it. If the user does click on it, it builds the search folder using the information from PR_WB_SF_DEFINITION.&lt;/p&gt;

&lt;p&gt;And that’s where the problem comes in: &lt;a href="http://msdn.microsoft.com/en-us/library/cc839749.aspx"&gt;Named property mappings&lt;/a&gt; are store specific. A named property mapping that’s valid for one store will most likely be invalid for another store. When we switched to cached mode, we’re now working with the OST, not Exchange. Even if there happens to be an 0x8010101F property in this store, it’s not going to be the “Keywords” property. So when we clicked on the folder in Outlook, it created a search folder that searched for a bogus property.&lt;/p&gt;

&lt;p&gt;What happened when we ran the macro is even more interesting: Outlook looked at our search string and built a search folder definition message with the appropriate PR_WB_SF_DEFINITION. However, it couldn’t save the message because it already existed, with a different definition!&lt;/p&gt;

&lt;p&gt;Why don’t we have a problem when we create search folders directly in Outlook? The Outlook user interface severely restricts the kinds of restrictions you can set up. Because of that, Outlook is able to store the PR_WB_SF_DEFINITION in a different format (using SFST_FILTERSTREAM instead of SFST_MRES). That format is more flexible with named properties, but isn’t capable of storing the wide variety of restrictions that could be specified through the Outlook Object Model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workaround&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We did look at taking a fix for this, but the limitations of SFST_FILTERSTREAM eliminated it as a possibility for a fix. And the fact that this problem only happens if the restriction contains a named property (IE it won’t repro on a search for subject or recipients) limited the scope of the problem.&lt;/p&gt;

&lt;p&gt;However, for the case where the search folder is being created by a macro and we’re getting the “Cannot create folder” error, we found a neat workaround. We can use Outlook’s &lt;a href="http://msdn.microsoft.com/en-us/library/bb176395.aspx"&gt;PropertyAccessor&lt;/a&gt; to delete the search folder definition message so it can be recreated. Here’s a sketch of the code:&lt;/p&gt;

&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Sub DeleteSFItem()
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Dim CommonViewsEIDBin As String
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Dim CommonViewsEIDString As String
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Dim CommonViewsFolder As Folder
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Dim ACTable As Table
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Dim oRow As Row
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Dim SFDefinitionEID As String
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Dim SFDefinitionItem As StorageItem
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    CommonViewsEID = Session.DefaultStore.PropertyAccessor.GetProperty( _
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        &amp;quot;&lt;span style="color: #8b0000"&gt;http://schemas.microsoft.com/mapi/proptag/0x35E60102&lt;/span&gt;&amp;quot;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    CommonViewsEIDString = Session.DefaultStore.PropertyAccessor.BinaryToString( _
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        CommonViewsEID)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Set CommonViewsFolder = Session.GetFolderFromID(CommonViewsEIDString)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Set ACTable = CommonViewsFolder.GetTable( _
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        &amp;quot;&lt;span style="color: #8b0000"&gt;[Subject] = 'MySearchFolder'&lt;/span&gt;&amp;quot;, olHiddenItems)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Set oRow = ACTable.GetNextRow()
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    If (Not (oRow Is Nothing)) Then
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        SFDefinitionEID = oRow(&amp;quot;&lt;span style="color: #8b0000"&gt;EntryID&lt;/span&gt;&amp;quot;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        Set SFDefinitionItem = Session.GetItemFromID(SFDefinitionEID)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        SFDefinitionItem.Delete
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    End If
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;End Sub
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;For further reading on the inner workings of search folder definition messages, check out the Exchange Protocol Doc &lt;a href="http://msdn.microsoft.com/en-us/library/cc433476.aspx"&gt;[MS-OSOSRCH]&lt;/a&gt;.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/05/21/less-than-portable-search-folders.aspx";digg_title = "(Less Than) Portable Search Folders";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9634298" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI/default.aspx">MAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Code+Snippet/default.aspx">Code Snippet</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Gotchas/default.aspx">Gotchas</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/OOM/default.aspx">OOM</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MFCMAPI/default.aspx">MFCMAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Protocol+Docs/default.aspx">Protocol Docs</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>May 2009 Release of MFCMAPI</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/05/20/may-2009-release-of-mfcmapi.aspx</link><pubDate>Wed, 20 May 2009 14:26:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9632261</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9632261.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9632261</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9632261</wfw:comment><description>&lt;p&gt;The May 2009 Release (build 6.0.0.1013) is live: &lt;a href="http://mfcmapi.codeplex.com"&gt;http://mfcmapi.codeplex.com&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The coolest new feature has to be the addition of Smart View parsing to the Hex Editor. I actually had the idea to do this the morning I published the March 2009 release, but didn’t want to delay that release any longer. One side effect of exposing the parsing in the Hex Editor is I was able to do much better testing of the existing parsing engine and fix a bunch of memory leaks and crashes.&lt;/p&gt;  &lt;p&gt;Here's a change list - see the &lt;a href="http://www.codeplex.com/MFCMAPI/WorkItem/List.aspx"&gt;Issue Tracker&lt;/a&gt; on Codeplex for more details, or look at the code:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Added ability to copy attachments from one message to another&lt;/li&gt;    &lt;li&gt;Added Outlook version feature - uses MSI to retrieve installed version of Outlook&lt;/li&gt;    &lt;li&gt;Added Smart View to hex editor&lt;/li&gt;    &lt;li&gt;Fixed issue converting MAPI to MIME from an MSG file&lt;/li&gt;    &lt;li&gt;Fixed parsing of fuzzy level flags&lt;/li&gt;    &lt;li&gt;Updated MAPI headers&lt;/li&gt;    &lt;li&gt;Removed extraneous pointer address output from restriction parsing&lt;/li&gt;    &lt;li&gt;Added smart view parsing for Entry Lists, Properties, Restrictions, and Search Folder Definitions&lt;/li&gt;    &lt;li&gt;Cleaned up memory leaks and crashes in smart view parsing&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/05/20/may-2009-release-of-mfcmapi.aspx";digg_title = "May 2009 Release of MFCMAPI";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9632261" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI/default.aspx">MAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MFCMAPI/default.aspx">MFCMAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Protocol+Docs/default.aspx">Protocol Docs</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Unaligned Data and the PST Provider Redux</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/05/08/unaligned-data-and-the-pst-provider-redux.aspx</link><pubDate>Fri, 08 May 2009 15:31:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9597152</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9597152.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9597152</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9597152</wfw:comment><description>&lt;p&gt;Just wanted to note that the &lt;a href="http://support.microsoft.com/kb/968858"&gt;April Cumulative Update for Outlook 2007&lt;/a&gt; fixes the &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2009/03/05/unaligned-data-and-the-pst-provider.aspx"&gt;unaligned data issue&lt;/a&gt; with the PST provider. So passing a statically allocated NULL string as a PST password should no longer be a problem.&lt;/p&gt;  &lt;p&gt;BTW – Outlook’s update isn’t listed in the &lt;a href="http://support.microsoft.com/kb/968765"&gt;overview article for the April Update&lt;/a&gt;. This is because the Outlook package was delayed for a few days. The overview article should eventually be updated to include Outlook.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/05/08/unaligned-data-and-the-pst-provider-redux.aspx";digg_title = "Unaligned Data and the PST Provider Redux";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9597152" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/MAPI/default.aspx">MAPI</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Gotchas/default.aspx">Gotchas</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Hotfix/default.aspx">Hotfix</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/PST_2F00_OST/default.aspx">PST/OST</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Exchange Client Extension Dead In Outlook 2010</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/05/04/exchange-client-extension-dead-in-outlook-2010.aspx</link><pubDate>Mon, 04 May 2009 23:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9587054</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9587054.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9587054</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9587054</wfw:comment><description>Randy makes the official announcement &lt;a href="http://blogs.msdn.com/outlook/archive/2009/05/04/announcing-the-deprecation-of-exchange-client-extensions.aspx" mce_href="http://blogs.msdn.com/outlook/archive/2009/05/04/announcing-the-deprecation-of-exchange-client-extensions.aspx"&gt;over here&lt;/a&gt;. This shouldn't come as a shock considering we've been pushing Com Add-Ins for some time now and hinting that ECEs weren't long for this world. So - if your solution uses an Exchange Client Extension and you want it to work with Outlook 2010, you better get started rewriting it as a Com Add-In now. Have fun!  &lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/05/04/exchange-client-extension-dead-in-outlook-2010.aspx";digg_title = "Exchange Client Extension Dead In Outlook 2010";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9587054" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Gotchas/default.aspx">Gotchas</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Office 2007 SP2 is Live!</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/04/28/office-2007-sp2-is-live.aspx</link><pubDate>Tue, 28 Apr 2009 18:28:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9573986</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>15</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9573986.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9573986</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9573986</wfw:comment><description>&lt;p&gt;Get it here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyId=B444BF18-79EA-46C6-8A81-9DB49B4AB6E5&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B444BF18-79EA-46C6-8A81-9DB49B4AB6E5"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=B444BF18-79EA-46C6-8A81-9DB49B4AB6E5&lt;/a&gt;&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/stephen_griffin/archive/2009/04/28/office-2007-sp2-is-live.aspx";digg_title = "Office 2007 SP2 is Live!";digg_bgcolor = "#FFFFFF";digg_skin = "compact";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9573986" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Hotfix/default.aspx">Hotfix</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item></channel></rss>