<?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>Inside the PST</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/10/26/inside-the-pst.aspx</link><pubDate>Mon, 26 Oct 2009 17:12:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9913045</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9913045.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9913045</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9913045</wfw:comment><description>&lt;p&gt;As &lt;a href="http://community.winsupersite.com/blogs/paul/archive/2009/10/26/microsoft-opens-up-the-pst-format.aspx"&gt;Paul Thurrott&lt;/a&gt; notes, we just announced that we’re &lt;a href="http://blogs.msdn.com/interoperability/archive/2009/10/26/roadmap-for-outlook-personal-folders-pst-documentation.aspx"&gt;documenting the PST file structure&lt;/a&gt;. I haven’t decided yet if I’ll be writing a standalone parser/viewer/validator, but I’m sure I’ll be adding some interesting stuff to &lt;a href="http://mfcmapi.codeplex.com/"&gt;MFCMAPI&lt;/a&gt;. I’ll let you know when I know more.&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/10/26/inside-the-pst.aspx";digg_title = "Inside the PST";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=9913045" 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/Documentation/default.aspx">Documentation</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 MAPI Download Version 6.5.8131.0</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/10/20/exchange-mapi-download-version-6-5-8131-0.aspx</link><pubDate>Tue, 20 Oct 2009 13:45:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9909889</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9909889.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9909889</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9909889</wfw:comment><description>&lt;p&gt;Just had someone ask me what changed in &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=E17E7F31-079A-43A9-BFF2-0A110307611E&amp;amp;displaylang=en"&gt;this version&lt;/a&gt; compared to the last build. Most of the changes were tweaks to various timezones, such as the addition of a timezone for &lt;a href="http://en.wikipedia.org/wiki/Yakutsk"&gt;Yakutsk&lt;/a&gt;, my favorite &lt;a href="http://en.wikipedia.org/wiki/Risk_(game)#territories"&gt;Risk territory&lt;/a&gt;. Additionally, we fixed a problem with &lt;a href="http://support.microsoft.com/kb/961978"&gt;ITnef::AddProps&lt;/a&gt;. You’d only need to worry about the TNEF change if you’re actually calling into the TNEF API directly.&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/10/20/exchange-mapi-download-version-6-5-8131-0.aspx";digg_title = "Exchange MAPI Download Version 6.5.8131.0";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=9909889" width="1" height="1"&gt;</description></item><item><title>So Long System Attendant Mailbox</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/10/09/so-long-system-attendant-mailbox.aspx</link><pubDate>Fri, 09 Oct 2009 22:39:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9905586</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9905586.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9905586</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9905586</wfw:comment><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/dvespa/default.aspx"&gt;Dave&lt;/a&gt; has a post up about the &lt;a href="http://blogs.msdn.com/dvespa/archive/2009/10/06/say-so-long-to-the-system-attendant-mailbox.aspx"&gt;fate of the System Attendant Mailbox in Exchange 2010&lt;/a&gt;. Since this mailbox isn’t there anymore in 2010, if you have a solution that depended on it, you’ll need to rework it. Dave gives a few suggestions, such as creating your own mailbox/account (the best option since you can then control your exact permission set) or using the &lt;a href="http://blogs.technet.com/evand/archive/2004/12/17/323636.aspx"&gt;System Mailbox&lt;/a&gt;.&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/10/09/so-long-system-attendant-mailbox.aspx";digg_title = "So Long System Attendant Mailbox";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=9905586" 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/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/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Outlook 2010 and Shutting Down Add-Ins</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/10/05/outlook-2010-and-shutting-down-add-ins.aspx</link><pubDate>Mon, 05 Oct 2009 14:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9903235</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9903235.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9903235</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9903235</wfw:comment><description>&lt;P&gt;Ryan has a new post up about &lt;A href="http://blogs.msdn.com/rgregg/archive/2009/10/02/additional-shutdown-changes-for-outlook-2010-beta.aspx" mce_href="http://blogs.msdn.com/rgregg/archive/2009/10/02/additional-shutdown-changes-for-outlook-2010-beta.aspx"&gt;changes we’re making to Outlook 2010 to make shutdown faster&lt;/A&gt;. These changes are building on the previous changes we made introducing Fast Shutdown. Two key takeaways:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;MAPI Providers now get &lt;A href="http://blogs.msdn.com/stephen_griffin/archive/2009/03/03/fastest-shutdown-in-the-west.aspx" mce_href="http://blogs.msdn.com/stephen_griffin/archive/2009/03/03/fastest-shutdown-in-the-west.aspx"&gt;Fast Shutdown&lt;/A&gt; by default. They may still opt out of Fast Shutdown by implementing &lt;A href="http://msdn.microsoft.com/en-us/library/dd941348(office.14).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd941348(office.14).aspx"&gt;IMAPIClientShutdown&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Outlook 2010 will not call the &lt;A href="http://msdn.microsoft.com/en-us/library/extensibility.idtextensibility2.onbeginshutdown(VS.80).aspx" mce_href="http://msdn.microsoft.com/en-us/library/extensibility.idtextensibility2.onbeginshutdown(VS.80).aspx"&gt;OnBeginShutdown&lt;/A&gt; or &lt;A href="http://msdn.microsoft.com/en-us/library/extensibility.idtextensibility2.ondisconnection(VS.80).aspx" mce_href="http://msdn.microsoft.com/en-us/library/extensibility.idtextensibility2.ondisconnection(VS.80).aspx"&gt;OnDisconnection&lt;/A&gt; of addins during shutdown.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Ryan gives plenty of best practices for rewriting your addins to deal with these changes (and improve the user experience in the process), including policies you can use to revert the changes if you’re an admin and you have add-ins that cannot be rewritten.&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/10/05/outlook-2010-and-shutting-down-add-ins.aspx";digg_title = "Outlook 2010 and Shutting Down Add-Ins";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=9903235" 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/Documentation/default.aspx">Documentation</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Custom+Providers/default.aspx">Custom Providers</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>EnumAccounts Sample and Some New Account Management Props</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/09/30/enumaccounts-sample-and-some-new-account-management-props.aspx</link><pubDate>Wed, 30 Sep 2009 16:57:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9901309</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9901309.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9901309</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9901309</wfw:comment><description>&lt;p&gt;A while back, &lt;a href="https://blogs.msdn.com/jasonjoh/archive/2005/12/27/outlook-account-management-api-sample.aspx"&gt;Jason&lt;/a&gt; posted an &lt;a href="http://msdn.microsoft.com/en-us/library/bb821156.aspx"&gt;Account Management API&lt;/a&gt; sample. I’ve &lt;strike&gt;threatened&lt;/strike&gt; &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2008/07/02/managing-the-outlook-account-management-dialogs.aspx"&gt;promised&lt;/a&gt; before that I would post an update to this sample, and I finally got around to it. You can download the updated sample &lt;a href="http://stephengriffin.members.winisp.net/AccountMgmt/EnumAccounts.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In addition to adding a –W command to call DisplayAccountList and show the Account Settings Wizard, I’ve also added a couple new properties that dev have decided to document:&lt;/p&gt;  &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;#define PROP_ACCT_USER_EMAIL_ADDR PROP_TAG(PT_UNICODE, 0x000C)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;#define PROP_MAPI_IDENTITY_ENTRYID PROP_TAG(PT_BINARY, 0x2002)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; 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: #fbfbfb; 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;PROP_ACCT_USER_EMAIL_ADDR is simply the e-mail address for the account, and PROP_MAPI_IDENTITY_ENTRYID is the address book entry ID for the account, similar to what you’d expect from &lt;a href="http://msdn.microsoft.com/en-us/library/cc815657.aspx"&gt;QueryIdentity&lt;/a&gt;. Neither property is expected on every account. For instance, in one profile here, an Exchange account has PROP_MAPI_IDENTITY_ENTRYID but not PROP_ACCT_USER_EMAIL_ADDR, while for an SMTP/POP3 account the situation is reversed.&lt;/p&gt;

&lt;p&gt;Dev also asked me to call out an issue that had tripped some folks up. The function &lt;a href="http://msdn.microsoft.com/en-us/library/bb905091.aspx"&gt;GetIdentity&lt;/a&gt; is supposed to return a string and the length of the string. The returned string should be NULL terminated and the length should include this NULL terminator in the count. We’ll be updating the MSDN to be more explicit about this, in addition to adding the two new properties.&lt;/p&gt;

&lt;p&gt;Some more information about the updated sample: If you’ve been looking for a header for the Account Management API, you can grab and use AcctMgmt.h from this sample. It should have everything you need. Please let me know if it doesn’t. Also, intrepid explorers may want to look at the –I option I added to the sample. It iterates through every possible property tag and requests it, printing the results if it finds something.&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/09/30/enumaccounts-sample-and-some-new-account-management-props.aspx";digg_title = "EnumAccounts Sample and Some New Account Management Props";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=9901309" 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/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>OpenStreamOnFile vs Unicode Files</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/09/29/openstreamonfile-vs-unicode-files.aspx</link><pubDate>Tue, 29 Sep 2009 18:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9900916</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9900916.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9900916</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9900916</wfw:comment><description>&lt;P&gt;Let’s take a look at the function &lt;A href="http://msdn.microsoft.com/en-us/library/cc765560(office.14).aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc765560(office.14).aspx"&gt;OpenStreamOnFile&lt;/A&gt;, which is exported by MAPI. Suppose you want to use this function to open a stream on a file that has a Unicode file name. As has been &lt;A href="http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.messaging/2008-06/msg00086.html" mce_href="http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.messaging/2008-06/msg00086.html"&gt;noted&lt;/A&gt; before, this doesn’t work. Why is this? According to the documentation, and according to the header, maputil.h, this function takes two parameters, lpszFileName and lpszPrefix, which are of type LPCTSTR. However, it is impossible for an exported function to take a parameter of this type. Why? Because LPCTSTR is a macro that compiles to either LPCSTR or LPCWSTR depending on whether Unicode was defined in the project. But MAPI’s the same no matter how you compiled your project, so the export won’t change.&lt;/P&gt;
&lt;P&gt;In truth, OpenStreamOnFile should have been declared as taking parameters of type LPCSTR. We’re working on an update to the MSDN and to the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=f8d01fc8-f7b5-4228-baa3-817488a66db1&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=f8d01fc8-f7b5-4228-baa3-817488a66db1&amp;amp;displaylang=en"&gt;MAPI Headers&lt;/A&gt; to fix that. We’ll also be documenting a new function, which you can go ahead and use to open files with Unicode names: OpenStreamOnFileW. This is the Unicode version of OpenStreamOnFile which takes Unicode strings. Here’s the signature:&lt;/P&gt;&lt;PRE style="BORDER-BOTTOM: #cecece 1px solid; BORDER-LEFT: #cecece 1px solid; PADDING-BOTTOM: 5px; BACKGROUND-COLOR: #fbfbfb; MIN-HEIGHT: 40px; PADDING-LEFT: 5px; WIDTH: 650px; PADDING-RIGHT: 5px; OVERFLOW: auto; BORDER-TOP: #cecece 1px solid; BORDER-RIGHT: #cecece 1px solid; PADDING-TOP: 5px"&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;STDMETHODIMP OpenStreamOnFileW(
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   LPALLOCATEBUFFER lpAllocateBuffer,
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   LPFREEBUFFER lpFreeBuffer,
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   ULONG ulFlags,
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   __in LPCWSTR lpszFileName,
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   __in_opt LPCWSTR lpszPrefix,
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   LPSTREAM FAR * lppStream);
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;typedef&lt;/SPAN&gt; HRESULT (STDMETHODCALLTYPE FAR * LPOPENSTREAMONFILEW) (
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   LPALLOCATEBUFFER lpAllocateBuffer,
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   LPFREEBUFFER lpFreeBuffer,
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   ULONG ulFlags,
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   __in LPCWSTR lpszFileName,
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   __in_opt LPCWSTR lpszPrefix,
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   LPSTREAM FAR * lppStream);
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;Other than the change to the strings, the function is identical to OpenStreamOnFile. Officially, we’re only documenting this function for Outlook 2010 and higher, but the function is also there in Outlook 2003 and 2007. The &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;Exchange MAPI Download&lt;/A&gt; does not implement OpenStreamOnFileW at all.&lt;/P&gt;
&lt;P&gt;The November build of MFCMAPI is being augmented to handle Unicode file names. Part of that rewrite is that MFCMAPI will use OpenStreamOnFileW if it’s available, and fall back to OpenStreamOnFile if it’s not.&lt;/P&gt;
&lt;P&gt;Enjoy!&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/09/29/openstreamonfile-vs-unicode-files.aspx";digg_title = "OpenStreamOnFile vs Unicode Files";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=9900916" 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/Documentation/default.aspx">Documentation</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>Detecting Sharepoint PSTs</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/09/28/detecting-sharepoint-psts.aspx</link><pubDate>Mon, 28 Sep 2009 19:58:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9900347</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9900347.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9900347</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9900347</wfw:comment><description>&lt;p&gt;We had a customer recently who was asking how to tell a PST had been configured as a Sharepoint PST, so they could exclude it from some processing they were doing. After some digging, I found the property that Outlook itself uses to determine a PST is a Sharepoint PST, and development gave me permission to document it:&lt;/p&gt;  &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 458px; padding-right: 5px; height: 2px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 70.79%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; height: 16px; font-size: 12px"&gt;#define PR_ASSOCIATED_SHARING_PROVIDER PROP_TAG(PT_CLSID, 0x0EA0)&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;To check if a PST is a Sharepoint PST, mount the PST using &lt;a href="http://msdn.microsoft.com/en-us/library/cc842103.aspx"&gt;OpenMsgStore&lt;/a&gt;, then call &lt;a href="http://msdn.microsoft.com/en-us/library/cc765749.aspx"&gt;GetProps&lt;/a&gt; on the message store object requesting this property. If it exists, you can assume the PST has been configured for Sharepoint. If it doesn’t exist, the PST has not been configured as a Sharepoint PST.&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/09/28/detecting-sharepoint-psts.aspx";digg_title = "Detecting Sharepoint PSTs";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=9900347" 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/Documentation/default.aspx">Documentation</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>September 2009 Release of MFCMAPI</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/09/10/september-2009-release-of-mfcmapi.aspx</link><pubDate>Thu, 10 Sep 2009 23:48:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9893871</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9893871.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9893871</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9893871</wfw:comment><description>&lt;p&gt;The September 2009 Release (build 6.0.0.1015) is live: &lt;a href="http://mfcmapi.codeplex.com"&gt;http://mfcmapi.codeplex.com&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The July 2009 release was downloaded over 13 thousand times, with nearly 1700 of them being the 64 bit build. This was the most popular release yet – retiring MAPI Editor drove a lot of traffic over to codeplex.&lt;/p&gt;  &lt;p&gt;I did a lot of work on the property and hex editors this time around. The property editor should be much better at editing large and complex streams you’ll find in PR_BODY or PR_RTF_COMPRESSED. And the Hex Editor is no longer modal! Now maybe &lt;a href="http://blogs.msdn.com/rickhall/"&gt;Rick&lt;/a&gt; will stop bugging me about it.&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;Ctrl+H will now bring up a non-modal Hex Editor&lt;/li&gt;    &lt;li&gt;That “Sample version” text is now gone. There is only one version of MFCMAPI, and it’s what you get on &lt;a href="http://mfcmapi.codeplex.com"&gt;codeplex&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Embedded NULLs in strings no longer break the property and stream editors&lt;/li&gt;    &lt;li&gt;All the editors (hex, property, stream) should be able to handle MUCH larger strings now&lt;/li&gt;    &lt;li&gt;Smart View: Added parsing for PR_ADDITIONAL_REN_ENTRYIDS, &lt;a href="http://msdn.microsoft.com/en-us/library/ee415119(office.14).aspx"&gt;dispidPropDefStream&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Smart View: Added framework for Smart View parsing of multivalued properties, and added a bunch of previously unparsed properties.&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/09/10/september-2009-release-of-mfcmapi.aspx";digg_title = "September 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=9893871" 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>Exchange 2010 and the MAPI Download</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/09/02/exchange-2010-and-the-mapi-download.aspx</link><pubDate>Wed, 02 Sep 2009 21:06:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9890508</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9890508.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9890508</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9890508</wfw:comment><description>&lt;p&gt;Bunches of people have contacted me asking if the MAPI download works with Exchange 2010. My usual response has been that I know it works, but you have to tweak the profile. I didn’t know the specific tweaks ‘cause I hadn’t looked in to it.&lt;/p&gt;  &lt;p&gt;Dave Vespa just &lt;a href="http://blogs.msdn.com/dvespa/archive/2009/09/02/how-to-configure-a-mapi-profile-to-connect-to-exchange-2010.aspx"&gt;blogged those tweaks&lt;/a&gt;. Note that they’re very similar to the modifications we use with Exchange 2007 to get referral working. Also note that the profile Dave builds is not referral enabled, but this doesn’t matter any more. With Exchange 2010, MAPI always talks to the Client Access Server for both mailbox and directory. The dreaded DSProxy that we were trying to avoid in 2007 and earlier has been replaced by the &lt;a href="http://microsoftblog.globalknowledge.com/2009/07/27/cas-role-matures-in-exchange-2010/"&gt;Address Book Service&lt;/a&gt;, which is pretty much what DSProxy should have been.&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/09/02/exchange-2010-and-the-mapi-download.aspx";digg_title = "Exchange 2010 and the MAPI Download";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=9890508" 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/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/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Outlook 2010 MAPI Reference Updated</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/08/31/outlook-2010-mapi-reference-updated.aspx</link><pubDate>Tue, 01 Sep 2009 00:01:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9889535</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9889535.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9889535</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9889535</wfw:comment><description>&lt;p&gt;The Outlook 2010 MAPI Reference has been updated. I don’t have a list of everything that changed, so I’ll highlight one addition that’s pretty cool: &lt;a href="http://msdn.microsoft.com/en-us/library/ee415110(office.14).aspx"&gt;the property definition stream&lt;/a&gt;. Long time readers might remember I mentioned this property before – it’s one of the properties you want to delete &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2005/12/29/new-outlook-documentation-part-5-one-off-forms.aspx"&gt;to kill a one-off form&lt;/a&gt;. It’s also the property that Outlook uses to store information about named properties created via the Object model and the user interface. &lt;/p&gt;  &lt;p&gt;Now that the format of &lt;a href="http://msdn.microsoft.com/en-us/library/ee415119(office.14).aspx"&gt;PidLidPropertyDefinitionStream&lt;/a&gt; is documented, you can create new user defined properties using MAPI and have them show up in the UI! The September release of MFCMAPI (which I’m furiously hammering on) will be able to parse this property.&lt;/p&gt;  &lt;p&gt;As usual, the documentation is also available for &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=5f61a276-9c09-4c82-9b80-20dccad17a2a"&gt;download&lt;/a&gt;.&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/08/31/outlook-2010-mapi-reference-updated.aspx";digg_title = "Outlook 2010 MAPI Reference Updated";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=9889535" 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/Documentation/default.aspx">Documentation</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>Responding to Meetings with CDO</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/08/21/responding-to-meetings-with-cdo.aspx</link><pubDate>Fri, 21 Aug 2009 17:59:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9878769</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9878769.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9878769</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9878769</wfw:comment><description>&lt;p&gt;My colleague Edwin, writing for the Exchange Support Team Central Europe &lt;a href="http://blogs.technet.com/appssrv/default.aspx"&gt;blog&lt;/a&gt;, posted an article on &lt;a href="http://blogs.technet.com/appssrv/archive/2009/08/21/cdo-usage-of-the-meetingitem-respond-method.aspx"&gt;accepting meeting requests with CDO&lt;/a&gt;. The key takeaway from the post is this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;This means that when calling the respond method on meeting updates / requests, the sequence number must be read from the request and written to the response, otherwise Outlook will not be able to match the response to the original meeting.     &lt;br /&gt;(The proposed solution is to read the dispidApptSequence from the original message and write this to the meeting update response before sending.)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;He also points out that this requirement is spelled out in the MAPI protocol documentation, &lt;a href="http://msdn.microsoft.com/en-us/library/ee218725.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Since CDO has reach end-of life, we won’t be taking a change to CDO to have it do this, so you’ll need to do it yourself. Edwin gives sample code that demonstrates how.&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/08/21/responding-to-meetings-with-cdo.aspx";digg_title = "Responding to Meetings with CDO";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=9878769" 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/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/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>More Fun With Check Name</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/08/13/more-fun-with-check-name.aspx</link><pubDate>Fri, 14 Aug 2009 00:49:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9868892</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9868892.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9868892</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9868892</wfw:comment><description>&lt;p&gt;I just closed case where the customer was trying to create a profile but Check Name was constantly prompting for credentials and then failing. This wasn’t the &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2009/08/11/auth-and-check-names.aspx"&gt;reconfig issue&lt;/a&gt; I mentioned before – they couldn’t create the profile in the first place. Even &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2009/07/15/gcreconnect-please-don-t-delete-the-profile.aspx"&gt;GCReconnect&lt;/a&gt; showed the same behavior – repeated prompts for credentials, then failure, with the error MAPI_E_USER_CANCEL. We took a network trace of the attempt to create the profile to see where the failure came from. The trace showed us attempting to set up NTLM authentication, sending the request to the Exchange server. Exchange passed the packet on the the GC, which promptly returned 0x721: RPC_S_SEC_PKG_ERROR.&lt;/p&gt;  &lt;p&gt;This is a common error to get when attempting to use Kerberos authentication. Configuring Kerberos at times can be tricky, and if it’s not all set up right, this is the error you expect to get. One workaround usually given is to make sure NTLM is set up and fall back to NTLM when Kerberos doesn’t work. However, in this case, we were trying NTLM in the first place!&lt;/p&gt;  &lt;p&gt;After some poking around, we took a look at the local policy settings on the three machines. Here’s what we found:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Client     &lt;br /&gt;Network security: Minimum session security for NTLM SSP based (including secure RPC) clients- Not defined      &lt;br /&gt;Network security: Minimum session security for NTLM SSP based (including secure RPC) servers- Not defined      &lt;br /&gt;Exchange      &lt;br /&gt;Network security: Minimum session security for NTLM SSP based (including secure RPC) clients- Require NTLMv2 session security, Require 128-bit encryption      &lt;br /&gt;Network security: Minimum session security for NTLM SSP based (including secure RPC) servers- Require NTLMv2 session security, Require 128-bit encryption      &lt;br /&gt;GC      &lt;br /&gt;Network security: Minimum session security for NTLM SSP based (including secure RPC) clients- Require NTLMv2 session security, Require 128-bit encryption      &lt;br /&gt;Network security: Minimum session security for NTLM SSP based (including secure RPC) servers- Require NTLMv2 session security, Require 128-bit encryption&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Since the client was not configured to use NTLMv2, it tried to authenticate with NTLMv1. Since the server required NTLMv2, it rejected the request, with the appropriate error message: RPC_S_SEC_PKG_ERROR. Once the customer configured the policy on the client (it had just been overlooked during setup), they were able to complete profile configuration.&lt;/p&gt;  &lt;p&gt;For more information on these policies, see &lt;a href="http://technet.microsoft.com/en-us/library/cc736506(WS.10).aspx"&gt;here&lt;/a&gt; and &lt;a href="http://technet.microsoft.com/en-us/library/cc776157(WS.10).aspx"&gt;here&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/08/13/more-fun-with-check-name.aspx";digg_title = "More Fun With Check Name";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=9868892" 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/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>Auth and Check Names</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/08/11/auth-and-check-names.aspx</link><pubDate>Wed, 12 Aug 2009 00:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9865027</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9865027.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9865027</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9865027</wfw:comment><description>&lt;P&gt;When I posted the Referral Madness article, there was an intriguing &lt;A href="http://blogs.msdn.com/stephen_griffin/archive/2008/11/17/referral-madness.aspx#9302411" mce_href="http://blogs.msdn.com/stephen_griffin/archive/2008/11/17/referral-madness.aspx#9302411"&gt;comment&lt;/A&gt; that I didn’t get a chance to investigate until it came up in a case. The commenter noted that when we used RPC_C_AUTHN_GSS_NEGOTIATE as our authentication mechanism, we could no longer use “Check Name” in the dialog brought up by &lt;A href="http://msdn.microsoft.com/en-us/library/ms527316(EXCHG.10).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms527316(EXCHG.10).aspx"&gt;ConfigureMsgService&lt;/A&gt;:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/AuthandCheckNames_BE7C/CheckNameDialog_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/AuthandCheckNames_BE7C/CheckNameDialog_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Check Name dialog displayed by ConfigureMsgService" border=0 alt="Check Name dialog displayed by ConfigureMsgService" src="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/AuthandCheckNames_BE7C/CheckNameDialog_thumb.jpg" width=238 height=244 mce_src="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/AuthandCheckNames_BE7C/CheckNameDialog_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;If we hit Check Name, we get an error that the name could not be resolved due to network problems:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/AuthandCheckNames_BE7C/NameCouldNotBeResolved_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/AuthandCheckNames_BE7C/NameCouldNotBeResolved_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="The name could not be resolved." border=0 alt="The name could not be resolved." src="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/AuthandCheckNames_BE7C/NameCouldNotBeResolved_thumb.jpg" width=244 height=93 mce_src="http://blogs.msdn.com/blogfiles/stephen_griffin/WindowsLiveWriter/AuthandCheckNames_BE7C/NameCouldNotBeResolved_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;To understand why we get this error, we look at one of the caveats I noted:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;During profile configuration (ConfigureMsgService), the Exchange provider will do an NSPIBind to the Exchange server to lookup the mailbox name. This single bind and lookup is unavoidable.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;In order to perform the name resolution involved in Check Name, the Exchange provider is going to go through DSProxy. In network terms, this means we’re sending the packets directly to the Exchange server. DSProxy picks up our packets and forwards them on, unchanged, to the GC. Consider how this affects authentication. When we use RPC_C_AUTHN_GSS_NEGOTIATE, in most environments this means we’re going to use Kerberos. Combining the two: the client thinks it needs to negotiate Kerberos authentication with the Exchange server. It begins the handshake, sending a packet with a ticket using the &lt;A href="http://msdn.microsoft.com/en-us/library/ms677949(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms677949(VS.85).aspx"&gt;Service Principal Name (SPN)&lt;/A&gt; for the Exchange server. DSProxy grabs this packet and whips it on over to the GC. The GC tries to parse the ticket in the packet but can’t since the ticket wasn’t intended for the GC. The GC returns the Kerberos error &lt;A href="http://support.microsoft.com/kb/230476" mce_href="http://support.microsoft.com/kb/230476"&gt;KRB_AP_ERR_MODIFIED.&lt;/A&gt; This error bubbles up on the client side as MAPI_E_NETWORK_ERROR, resulting in the dialog.&lt;/P&gt;
&lt;P&gt;This problem with proxying Kerberos packets was noted in a &lt;A href="http://support.microsoft.com/kb/306029" mce_href="http://support.microsoft.com/kb/306029"&gt;KB article&lt;/A&gt; a long time ago, which has one of the earliest references to profile settings to enable referral. In the KB article, they wanted to enable Kerberos authentication to get around a problem with authenticating local system accounts, but due to the problem discussed here, also had to enable referral.&lt;/P&gt;
&lt;P&gt;Does this mean we’ve got a bug in DSProxy’s handling of Kerberos? Not really – DSProxy predates Windows’ adoption of Kerberos by a number of years. Kerberos authentication can by proxied, but the proxy must be aware it’s proxying Kerberos traffic – it’s not as simple as reading packets off one port and sending them out another. On the other hand, NTLM authentication, the default used by the Exchange provider when we don’t specify an authentication mechanism, can handle being passed to the GC by DSProxy. This would fall under the heading of &lt;EM&gt;design limitation&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;So – the upshot:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Failure to perform Check Name in this scenario does not indicate a problem with the profile and does not indicate a problem with the network.&lt;/LI&gt;
&lt;LI&gt;If you’ve configured a profile for referral and reconnect, using RPC_C_AUTHN_GSS_NEGOTIATE, you cannot use ConfigureMsgService to reconfigure the profile. If you really want to reconfigure the profile, build a new one instead.&lt;/LI&gt;
&lt;LI&gt;If you want to be really clever, you could remove the auth setting before calling ConfigureMsgService, then add it back when you’re done.&lt;/LI&gt;&lt;/UL&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/08/11/auth-and-check-names.aspx";digg_title = "Auth and Check Names";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=9865027" 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/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>Your Cache is No Good Here</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/08/07/your-cache-is-no-good-here.aspx</link><pubDate>Fri, 07 Aug 2009 20:54:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9860463</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9860463.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9860463</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9860463</wfw:comment><description>&lt;p&gt;The first time we saw this, we wrote it off as an odd thing one customer did. But we’ve seen it a few times over the past couple years and it deserves some discussion. The issue is with Exchange Client Extensions (remember – they’re &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2009/05/04/exchange-client-extension-dead-in-outlook-2010.aspx"&gt;dead in 2010&lt;/a&gt;!): Customers would report that, when client extensions from certain companies are loaded, Outlook will behave strangely. The symptoms would usually be a crash or a hang. On debugging, we would find that even the hang was preceded by an access violation.&lt;/p&gt;  &lt;p&gt;When we debugged this, what we saw on the stack was an Exchange Client Extension calling into an IExchExtCallback object. Nothing unusual there, that’s what a callback object is for. What was unusual though, was that when we look further up the stack, Outlook hadn’t called into into the extension! Here’s the usual sequence of operations:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;ECE registers for various events&lt;/li&gt;    &lt;li&gt;Outlook fires one of the events, calling into the ECE’s event handler.&lt;/li&gt;    &lt;li&gt;One of the parameters of the event is an IExchExtCallback object, which the handler can use to obtain more information about the context of the event.&lt;/li&gt;    &lt;li&gt;The event handler returns.&lt;/li&gt;    &lt;li&gt;Outlook releases the IExchExtCallback object, which had been created specifically for this event.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Note that last bit – Outlook creates these callback objects individually for the events they’re handed to, and releases them when the event is done. Note also, that these objects only make sense in the context of an event. For instance, the GetObject method returns a message store and a MAPI object. During the context of an event, which message store and which object would be returned makes sense. But after the event is done, there’s no context to establish which store or which object should be referenced.&lt;/p&gt;  &lt;p&gt;And this is why these extensions were throwing an access violation. They had cached a pointer to an IExchExtCallback object they had gotten during an earlier event and were using it later outside the context of the event. Since this object was not designed to handle this, it would crash. Whether Outlook would crash, hang, or otherwise behave oddly depended on whether or not an exception handler caught the AV.&lt;/p&gt;  &lt;p&gt;Not only does caching these objects not make sense once you consider the design, it’s actually precluded in the &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2008/01/31/where-did-i-put-those-5-5-sdk-docs.aspx"&gt;documentation&lt;/a&gt;. On the page for IExchExtCallback:IUnknown we have the following note:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A pointer to this interface is passed as a parameter to many methods of the Microsoft Exchange extensibility API. This interface and any interfaces it might return are valid only for the time of the call to one of its methods and might not be retained when the extension object’s method returns.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So – even though extensions are going away in Outlook 2010, if you have an extension in market right now for Outlook 2007 or earlier, you might want to review your code and check if you’re caching this object. If you are, you’re causing crashes for your customers.&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/08/07/your-cache-is-no-good-here.aspx";digg_title = "Your Cache is No Good Here";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=9860463" 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/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Outlook 2010 MAPI Samples</title><link>http://blogs.msdn.com/stephen_griffin/archive/2009/07/27/outlook-2010-mapi-samples.aspx</link><pubDate>Mon, 27 Jul 2009 17:03:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9850002</guid><dc:creator>Stephen Griffin</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/stephen_griffin/comments/9850002.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stephen_griffin/commentrss.aspx?PostID=9850002</wfw:commentRss><wfw:comment>http://blogs.msdn.com/stephen_griffin/rsscomments.aspx?PostID=9850002</wfw:comment><description>&lt;p&gt;I’ve updated the Outlook MAPI Samples and posted a new project up on Codeplex: &lt;a href="http://ol2010mapisamples.codeplex.com/"&gt;Outlook 2010 MAPI Samples&lt;/a&gt;. We’ll get the &lt;a href="http://msdn.microsoft.com/en-us/library/cc839588(office.14).aspx"&gt;MSDN&lt;/a&gt; updated to point at these samples soon. The goal of this update, of course, was to get these samples working with Outlook 2010, especially in 64 bit mode. Most of the changes were minor, swapping ULONG for ULONG_PTR, etc., but&amp;#160; I did have to make a couple big changes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;None of the samples link to mapi32.lib anymore. I &lt;a href="http://blogs.msdn.com/stephen_griffin/archive/2009/07/21/mapi32-lib-and-64-bit-mapi-programs.aspx"&gt;talked about this&lt;/a&gt; already. This was actually easier to do than I expected. I just copied my ImportProc files from &lt;a href="http://mfcmapi.codeplex.com/"&gt;MFCMAPI&lt;/a&gt; and tweaked them a bit.&lt;/li&gt;    &lt;li&gt;The other major change was removing the Exchange Client Extension from Wrapped PST. The extension never had anything to do with the sample. It was just used as a convenient way to drive a test function to illustrate the &lt;a href="http://msdn.microsoft.com/en-us/library/bb905301.aspx"&gt;replication API&lt;/a&gt;. I replaced the whole thing with an exported function and a simple VBA macro used to call the function. You’ll find the macro in the file TestMacro.txt&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I’m sure there are bugs in these samples. I didn’t get to test every possible scenario. So feedback is welcome – see the Help/Feedback section of the &lt;a href="http://ol2010mapisamples.codeplex.com/"&gt;main page&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/07/27/outlook-2010-mapi-samples.aspx";digg_title = "Outlook 2010 MAPI Samples";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=9850002" 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/Documentation/default.aspx">Documentation</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/Custom+Providers/default.aspx">Custom Providers</category><category domain="http://blogs.msdn.com/stephen_griffin/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item></channel></rss>