<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Inside and Out...</title>
	<atom:link href="http://cpfh.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://cpfh.wordpress.com</link>
	<description>An attempt to understand technology  better...</description>
	<lastBuildDate>Sat, 03 Sep 2011 04:08:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='cpfh.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Inside and Out...</title>
		<link>http://cpfh.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://cpfh.wordpress.com/osd.xml" title="Inside and Out..." />
	<atom:link rel='hub' href='http://cpfh.wordpress.com/?pushpress=hub'/>
		<item>
		<title>[Download] PocketMaps 2.0 &#8211; with GPS support!</title>
		<link>http://cpfh.wordpress.com/2007/07/04/download-pocketmaps-20-with-gps-support/</link>
		<comments>http://cpfh.wordpress.com/2007/07/04/download-pocketmaps-20-with-gps-support/#comments</comments>
		<pubDate>Wed, 04 Jul 2007 21:26:00 +0000</pubDate>
		<dc:creator>Gaurav Khanna</dc:creator>
				<category><![CDATA[.NET Compact Framework]]></category>
		<category><![CDATA[Downloads]]></category>
		<category><![CDATA[Windows CE/Windows Mobile]]></category>

		<guid isPermaLink="false">http://cpfh.wordpress.com/2007/07/04/download-pocketmaps-20-with-gps-support/</guid>
		<description><![CDATA[Last week I updated PocketMaps to support GPS. Once the GPS receiver is connected to your Windows Mobile device, PocketMaps can: Map your current location on the map Auto-refresh the map as you move to plot your move Display details regarding your current location, like altitude, wind speed, etc. You can download it from http://www.wintoolzone.com/ListDotNET.aspx?Listtype=1. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=6&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last week I updated <strong><a href="http://cpfh.wordpress.com/2007/06/25/download-pocket-maps-mapping-addresses-on-the-pocket-pc/" target="_blank">PocketMaps</a></strong> to support GPS. Once the GPS receiver is connected to your <strong>Windows Mobile</strong> device, <strong>PocketMaps</strong> can:</p>
<ul>
<li>Map your current location on the map
<li>Auto-refresh the map as you move to plot your move
<li>Display details regarding your current location, like altitude, wind speed, etc. </li>
</ul>
<p>You can download it from <a title="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=1" href="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=1">http://www.wintoolzone.com/ListDotNET.aspx?Listtype=1</a>. Below are some screenshots:</p>
<p><img style="display:inline;width:320px;height:240px;" src="http://www.wintoolzone.com/images/PocketMaps_CurrentLocDetails.jpg" width="320"></p>
<p><em>Displaying current location&#8217;s details</em></p>
<p><img style="display:inline;width:320px;height:240px;" src="http://www.wintoolzone.com/images/PocketMaps_MenuWithGPSSupport.jpg" width="320"></p>
<p><em>Support for GPS &#8211; mapping current location, autorefresh to plot your move, etc.</em></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cpfh.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cpfh.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cpfh.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cpfh.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cpfh.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cpfh.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cpfh.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cpfh.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cpfh.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cpfh.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cpfh.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cpfh.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cpfh.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cpfh.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cpfh.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cpfh.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=6&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cpfh.wordpress.com/2007/07/04/download-pocketmaps-20-with-gps-support/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd66de54c4e88d48ccc93276e3320208?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Gaurav Khanna</media:title>
		</media:content>

		<media:content url="http://www.wintoolzone.com/images/PocketMaps_CurrentLocDetails.jpg" medium="image" />

		<media:content url="http://www.wintoolzone.com/images/PocketMaps_MenuWithGPSSupport.jpg" medium="image" />
	</item>
		<item>
		<title>[Download] Pocket Maps &#8211; mapping addresses on the Pocket PC</title>
		<link>http://cpfh.wordpress.com/2007/06/25/download-pocket-maps-mapping-addresses-on-the-pocket-pc/</link>
		<comments>http://cpfh.wordpress.com/2007/06/25/download-pocket-maps-mapping-addresses-on-the-pocket-pc/#comments</comments>
		<pubDate>Mon, 25 Jun 2007 23:32:00 +0000</pubDate>
		<dc:creator>Gaurav Khanna</dc:creator>
				<category><![CDATA[.NET Compact Framework]]></category>
		<category><![CDATA[Downloads]]></category>
		<category><![CDATA[Windows CE/Windows Mobile]]></category>

		<guid isPermaLink="false">http://cpfh.wordpress.com/2007/07/29/download-pocket-maps-mapping-addresses-on-the-pocket-pc/</guid>
		<description><![CDATA[I just finished authoring PocketMaps, a .NET CF 2.0 based application for Windows Mobile 5.0 based Pocket PC devices that does address mapping on the device using the Yahoo! Map Image API. You can enter the address as free text, or with city/state/zipcode details or as latitude/longitude combination and PocketMaps will map it for you. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=4&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just finished authoring <strong>PocketMaps</strong><em>,</em> a <strong>.NET CF 2.0</strong> based application for <strong>Windows Mobile 5.0</strong> based Pocket PC devices that does address mapping on the device using the <em><a href="http://developer.yahoo.com/maps/rest/V1/mapImage.html" target="_blank">Yahoo! Map Image API</a></em>. You can enter the address as free text, or with city/state/zipcode details or as latitude/longitude combination and <strong>PocketMaps</strong> will map it for you. Particularly useful when you are on the move and want to know the location of an address. It also lets you save the map image that you can send via email/bluetooth, etc.</p>
<p>Below are some screenshots of the application:</p>
<p><span style="font-size:0.75em;"><img src="http://www.wintoolzone.com/images/ss_pocketmaps.jpg" style="display:inline;width:320px;height:238px;" width="320"></span></p>
<p><em><strong>PocketMaps</strong></em> in the <em>Programs Folder</em></p>
<p><span style="font-size:0.75em;"><img src="http://www.wintoolzone.com/images/ss_pocketmaps_map.jpg" style="display:inline;width:323px;height:240px;" width="323"></span></p>
<p>An address mapped by <strong>PocketMaps</strong></p>
<p><span style="font-size:0.75em;"><img src="http://www.wintoolzone.com/images/ss_pocketmaps_zoom.jpg" style="display:inline;width:319px;height:238px;" width="319"></span></p>
<p>Support for zooming in/out on the map.</p>
<p>It&#8217;s <strong>free</strong> for download and use &#8211; download it from <a href="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=1" title="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=1"><span style="font-size:0.75em;">http://www.wintoolzone.com/ListDotNET.aspx?Listtype=1</span></a><span style="font-size:0.75em;">.</span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cpfh.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cpfh.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cpfh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cpfh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cpfh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cpfh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cpfh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cpfh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cpfh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cpfh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cpfh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cpfh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cpfh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cpfh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cpfh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cpfh.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=4&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cpfh.wordpress.com/2007/06/25/download-pocket-maps-mapping-addresses-on-the-pocket-pc/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd66de54c4e88d48ccc93276e3320208?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Gaurav Khanna</media:title>
		</media:content>

		<media:content url="http://www.wintoolzone.com/images/ss_pocketmaps.jpg" medium="image" />

		<media:content url="http://www.wintoolzone.com/images/ss_pocketmaps_map.jpg" medium="image" />

		<media:content url="http://www.wintoolzone.com/images/ss_pocketmaps_zoom.jpg" medium="image" />
	</item>
		<item>
		<title>Enumerating AppDomains &#8211; I</title>
		<link>http://cpfh.wordpress.com/2007/06/09/enumerating-appdomains-i/</link>
		<comments>http://cpfh.wordpress.com/2007/06/09/enumerating-appdomains-i/#comments</comments>
		<pubDate>Sat, 09 Jun 2007 19:15:51 +0000</pubDate>
		<dc:creator>Gaurav Khanna</dc:creator>
				<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[CLR]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://cpfh.wordpress.com/2007/06/09/enumerating-appdomains-i/</guid>
		<description><![CDATA[Surprisingly, enumerating AppDomains is not that straightforward. The System.AppDomain type does not expose functionality to enumerate them at all. The way to enumerate them will be to use the V1 Hosting interface, ICorRuntimeHost and then invoke the EnumDomains and NextDomain methods against it to get the list. If you are using CLR 2.0, you needn&#8217;t [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=10&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Surprisingly, enumerating <em>AppDomains </em>is not that straightforward. The <em>System.AppDomain </em>type does not expose functionality to enumerate them at all. The way to enumerate them will be to use the V1 Hosting interface, <em>ICorRuntimeHost </em>and then invoke the <em>EnumDomains </em>and <em>NextDomain </em>methods against it to get the list. If you are using CLR 2.0, you needn&#8217;t worry as CLR 2.0 does implement the V1 interfaces as well. </p>
<p>&nbsp;</p>
<p>Below is the&nbsp;snippet that exemplifies the concept (<em>note: AppDomains will only be enumerated in the current process &#8211; I will discuss AppDomain enumeration in remote processes later). </em>You can download the source code (VS Solution) from <a title="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=5" href="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=5" target="_blank">http://www.wintoolzone.com/ListDotNET.aspx?Listtype=5</a></p>
<p><em></em>&nbsp;</p>
<pre><span style="color:#008000;">// EnumAppDomains.cpp : Defines the entry point for the console application.</span>
<span style="color:#008000;">// </span>
#include "<span style="color:#8b0000;">stdafx.h</span>"
#include &lt;windows.h&gt;
#include "<span style="color:#8b0000;">mscoree.h</span>"
#import "<span style="color:#8b0000;">C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.tlb</span>" raw_interfaces_only
using namespace mscorlib;
#define EXITONERROR(hr, mesg) \
<span style="color:#0000ff;">if</span> (FAILED(hr)) \
{ \
<span style="color:#0000ff;">printf</span>("<span style="color:#8b0000;">%s\n</span>", mesg); \
ExitProcess(1); \
}
#define SUCCESSFUL(hr) (SUCCEEDED(hr) &amp;&amp; hr != S_FALSE)
<span style="color:#0000ff;">int</span> _tmain(<span style="color:#0000ff;">int</span> argc, _TCHAR* argv[])
{
ICorRuntimeHost * pV1HostPtr = NULL;
HRESULT hr = CorBindToRuntimeEx(NULL,
NULL, 0,
CLSID_CorRuntimeHost,
IID_ICorRuntimeHost,
(LPVOID *)&amp;pV1HostPtr);
EXITONERROR(hr, "<span style="color:#8b0000;">Unable to get ICorRuntimeHost*</span>");
<span style="color:#008000;">// Start the runtime</span>
hr = pV1HostPtr-&gt;Start();
EXITONERROR(hr, "<span style="color:#8b0000;">Unable to start the runtime</span>");
<span style="color:#008000;">// Enumerate the AppDomains</span>
HDOMAINENUM adEnum;
hr = pV1HostPtr-&gt;EnumDomains(&amp;adEnum);
EXITONERROR(hr, "<span style="color:#8b0000;">Unable to enumerate AppDomains</span>");
<span style="color:#008000;">// Loop thru the domains</span>
IUnknown * pDomainUnk = NULL;
hr = pV1HostPtr-&gt;NextDomain(adEnum, &amp;pDomainUnk);
<span style="color:#0000ff;">while</span>(SUCCESSFUL(hr))
{
<span style="color:#008000;">// Got the IUnknown* to the AppDomain - convert it to AppDomain pointer</span>
_AppDomain * pCurDomain = NULL;
hr = pDomainUnk-&gt;QueryInterface(__uuidof(_AppDomain), (VOID**)&amp;pCurDomain);
<span style="color:#0000ff;">if</span> (SUCCESSFUL(hr))
{
<span style="color:#008000;">// Display the name of the AppDomain</span>
BSTR str;
<span style="color:#0000ff;">if</span> (SUCCESSFUL(pCurDomain-&gt;get_FriendlyName(&amp;str)))
{
wprintf(L"<span style="color:#8b0000;">AppDomain: %s\n</span>",str);
}
<span style="color:#0000ff;">else</span>
{
<span style="color:#0000ff;">printf</span>("<span style="color:#8b0000;">AppDomain: unable to get the name!\n</span>");
}
}
<span style="color:#008000;">// Loop onto the next Domain</span>
hr = pV1HostPtr-&gt;NextDomain(adEnum, &amp;pDomainUnk);
}
<span style="color:#008000;">// Stop the runtime</span>
<span style="color:#0000ff;">if</span> (pV1HostPtr)
{
pV1HostPtr-&gt;Stop();
}
<span style="color:#0000ff;">return</span> 0;
}
</pre>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cpfh.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cpfh.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cpfh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cpfh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cpfh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cpfh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cpfh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cpfh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cpfh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cpfh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cpfh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cpfh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cpfh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cpfh.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cpfh.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cpfh.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=10&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cpfh.wordpress.com/2007/06/09/enumerating-appdomains-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd66de54c4e88d48ccc93276e3320208?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Gaurav Khanna</media:title>
		</media:content>
	</item>
		<item>
		<title>Lessons in Exception Handling</title>
		<link>http://cpfh.wordpress.com/2007/05/13/lessons-in-exception-handling/</link>
		<comments>http://cpfh.wordpress.com/2007/05/13/lessons-in-exception-handling/#comments</comments>
		<pubDate>Sun, 13 May 2007 19:14:13 +0000</pubDate>
		<dc:creator>Gaurav Khanna</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Exception Handling]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows API]]></category>

		<guid isPermaLink="false">http://cpfh.wordpress.com/2007/05/13/lessons-in-exception-handling/</guid>
		<description><![CDATA[Working on the CLR&#8217;s exception handling subsystem is not just challenging but also gives unique opportunities to understand how the various exception handling subsystems (e.g. SEH, C++ EH, etc) work, and in particular, how they interoperate with one another. It was such case that had me discuss one such issue with Kevin,&#160;development lead of the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=9&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><font size="2"></font></p>
<p><font size="2">Working on the CLR&#8217;s exception handling subsystem is not just challenging but also gives unique opportunities to understand how the various exception handling subsystems (e.g. SEH, C++ EH, etc) work, and in particular, how they interoperate with one another. It was such case that had me discuss one such issue with </font><a href="http://blogs.msdn.com/freik/" target="_blank"><font size="2">Kevin</font></a><font size="2">,&nbsp;development lead of the JIT, that he mentions </font><a href="http://blogs.msdn.com/freik/archive/2007/03/15/how-to-use-rtlunwindex.aspx" target="_blank"><font size="2">here</font></a><font size="2">.</font></p>
<p><font size="2">That discussion got me exploring the interoperability aspects of EH further and resulted in the bullets listed below. Incase you are interested,&nbsp;download the PDF version of this article from </font><a href="http://www.wintoolzone.com/articles/Lessons_in_EH.aspx" target="_blank"><font size="2">here</font></a><font size="2"> and the accompanying source code from </font><a href="http://www.wintoolzone.com/ListWin32.aspx?Listtype=5" target="_blank"><font size="2">here</font></a><font size="2">. For those uninitiated to exception handling, Matt Pietrek&#8217;s <strong>must</strong> read article is </font><a href="http://www.microsoft.com/msj/0197/exception/exception.aspx" target="_blank"><font size="2">here</font></a><font size="2">. </font></p>
<p><font size="2">Now, onto the interoperability aspects of EH.</font></p>
<p><i><font size="2">Note: the following discussion is in context of the x86 platform</font></i></p>
<ul>
<li><b><font size="2">Catching an exception using __try/__except SEH handler will result in <i>RtlUnwind</i> being called without exception record<br /></font></b><i><br /><font size="2">Structured Exception Handling (SEH) </font></i><font size="2">is built into the Windows OS and it is how the OS processes the exceptions. Compilers offer their own specific ways of setting up a <i>SEH handler. </i>To setup one using Microsoft Visual C++, we use <i>__try/__except </i>keywords. For example: </p>
<p></font>
<p>__try<br />{ <br /><span style="color:#0000ff;">printf</span>(&#8220;<span style="color:#8b0000;">Calling the /EHSc function\n</span>&#8220;); <br />InvokeCPPFunction(); <br />} <br />__except (IsForUs(GetExceptionInformation())) <br />{ <br /><span style="color:#0000ff;">printf</span>(&#8220;<span style="color:#8b0000;">In __except\n</span>&#8220;); <br />} <br /> 
<p><font size="2">If the <i>InvokeCPPFunction </i>throws an exception, the OS will invoke the <i>filter function </i>(the <i>IsForUs </i>function referenced in the braces of __<i>except</i>) and check its return value. The filter function can be passed exception details that can be retrieved using the <i>GetExceptionInformation </i>function and using that information, it can decide whether it wants to process the exception or not. </p>
<p></font><font size="2">If the filter function returns <a href="http://msdn2.microsoft.com/en-us/library/6wxdsc38(vs.80).aspx" target="_blank">EXCEPTION_CONTINUE_EXECUTION</a>, the OS retries the instruction that created the exception. However, if the return value is <a href="http://msdn2.microsoft.com/en-us/library/6wxdsc38(vs.80).aspx" target="_blank">EXCEPTION_CONTINUE_SEARCH</a>, it tells the OS that the filter function has declined to process the exception and the OS continues its search for the handler in the <i>SEH handler chain </i>(that is available from <i>FS:0 </i>on x86 machines for each OS thread). </font></p>
</li>
</ul>
<blockquote><p><font size="2">The filter function can also return <a href="http://msdn2.microsoft.com/en-us/library/6wxdsc38(vs.80).aspx" target="_blank">EXCEPTION_EXECUTE_HANDLER</a> to tell the OS that it wants to handle the exception and the OS proceeds to invoke the <i>funclet </i>within the <i>__except </i>block. But before invoking the <i>funclet, the OS </i>has to unwind<i> </i>the call stack. On x86, the code generated by VC++ compiler does this by invoking <i><a href="http://msdn2.microsoft.com/en-us/library/ms680609.aspx" target="_blank">RtlUnwind</a> </i>API, with <i>NULL </i>for the third argument &#8211; this argument is a pointer to the exception record for the exception being processed. This is done by the compiler by invoking <i>GlobalUnwind </i>(an internal function) after doing some processing. <i>GlobalUnwind </i>makes the call to <i>RtlUnwind </i>as shown below: </font>
<p><font size="2"><em>@_EH4_GlobalUnwind@4: </em></font>
<p><font size="2"><em>70508FB2 push ebp </em></font>
<p><font size="2"><em>70508FB3 mov ebp,esp </em></font>
<p><font size="2"><em>70508FB5 push ebx </em></font>
<p><font size="2"><em>70508FB6 push esi </em></font>
<p><font size="2"><em>70508FB7 push edi </em></font>
<p><font size="2"><em>70508FB8 push 0 </em></font>
<p><b><font size="2"><em><font color="#ff0000">70508FBA push 0</font> </em></font></b>
<p><font size="2"><em>70508FBC push offset ReturnPoint (70508FC7h) </em></font>
<p><font size="2"><em>70508FC1 push ecx </em></font>
<p><font size="2"><em>70508FC2 call RtlUnwind (70526620h)</em> </font>
<p><font size="2">The highlighted <font color="#ff0000"><strong>red</strong></font> line is the one where NULL is pushed for exception record. </font>
<p><font size="2">What this implies that all <i>SEH handlers </i>that are in the x86 FS:0 chain<i>, </i>prior to the one that agreed to process the exception, will be called by the OS once again to give them a chance to do some cleanup (e.g. release resources) – this is typically known as <i>unwinding </i>of the stack. And since the unwind was initiated with a NULL for the exception record, if your <i>SEH handler </i>relies on checking the exception record for details before deciding to do the cleanup, it can potentially fail (e.g. not end up doing the cleanup)! </font></p>
</blockquote>
<ul>
<li><font size="2"><b>Corollary Lesson: Don’t throw (and expect to catch <i>correctly</i>) exception across environment boundaries. E.g. throwing a C++ exception and trying to catch it using a SEH handler</p>
<p></b>Since a C++ application can have a mix of both C++ exception handling constructs and SEH exception handing constructs, it is easy to commit the mistake of writing code that throws an exception from C++ EH and excepts that to be <i>correctly </i>caught and processed in SEH EH constructs – the focus is on correct processing. </p>
<p>Let’s extend the previous example. Assume that <i>InvokeCPPFunction </i>is a function in a DLL that was compiled to use C++ EH (using the <i><a href="http://msdn2.microsoft.com/en-us/library/1deeycx5(VS.80).aspx" target="_blank">/EHSc</a> </i>switch) and implemented as shown below:</p>
<p><span style="color:#0000ff;">class</span> CPPClass2 <br />{ <br /><span style="color:#0000ff;">public</span>: <br />CPPClass2() <br />{ <br />printf(&#8220;<span style="color:#8b0000;">CPPClass2 constructor\n</span>&#8220;); <br />} <br />~CPPClass2() <br />{ <br />printf(&#8220;<span style="color:#8b0000;">CPPClass2 destructor\n</span>&#8220;); <br />} <br />}; </p>
<p><span style="color:#0000ff;">class</span> CPPClass <br />{ <br /><span style="color:#0000ff;">public</span>: <br />CPPClass() <br />{ <br />printf(&#8220;<span style="color:#8b0000;">CPPClass constructor\n</span>&#8220;); <br />} <br /><span style="color:#0000ff;">void</span> ThrowException() <br />{ <br />CPPClass2 cpp2; <br /><span style="color:#0000ff;">throw</span> 1; <br />} <br />~CPPClass() <br />{ <br />printf(&#8220;<span style="color:#8b0000;">CPPClass destructor\n</span>&#8220;); <br />} <br />}; </p>
<p>__declspec (dllexport) <span style="color:#0000ff;">void</span> InvokeCPPFunction() <br />{ <br />CPPClass cpp; <br />cpp.ThrowException(); <br />}</li>
</ul>
<p></font><b></b><br />
<blockquote>
<p><font size="2">We have two classes, <i>CPPClass &amp; CPPClass2 </i>that have destructors each. <i>InvokeCPPFunction </i>instantiates <i>CPPClass </i>object, <i>cpp, </i>and invokes the <i>ThrowException </i>method, which in turn, instantiates <i>CPPClass2 </i>object, <i>cpp2, </i>and throws an exception. </font>
<p><font size="2">As per the C++ semantics, when this exception is caught, the destructors should be invoked as they are expected to do the cleanup for the respective class instance. However, <i>this depends upon who catches the exception. </i></font>
<p><font size="2">In our previous example, <i>InvokeCPPFunction </i>was invoked from within <i>__try/__except </i>SEH mechanism. Hence, when <i>ThrowException </i>throws an exception, the OS walks the <i>FS:0 </i>chain to look for a handler that will handle the exception. When the OS comes to our <i>__except </i>block, if the filter <i>funclet </i>returns EXECEPTION_EXECUTE_HANDLER, as per our last discussion, <i>RtlUnwind </i>is invoked with a NULL for the exception record pointer. </font>
<p><font size="2">When this happens and the unwind call comes to C++ exception handler, the <i>C++ EH does not process the unwind since the exception record is NULL</i>. This is because C++ EH only processes the unwind when the exception code in the exception record has the C++ exception code (0Xe06d7363). Thus, <i>no destructors are invoked</i> and that is not something you want. Below is the output this example: </font></p>
</blockquote>
<blockquote><p><a href="http://www.wintoolzone.com/images/f060de3d24ca_144A7/clip_image0026.jpg"><img style="border-width:0;" height="313" src="http://www.wintoolzone.com/images/f060de3d24ca_144A7/clip_image002_thumb1.jpg" width="623" border="0"></a></p>
<p><font size="2">Hence, it’s important to catch the exception in the <i>environment/EH-context </i>it was thrown in, since that <i>EH-context </i>will know how to process it correctly. </font>
<p><font size="2"></font></p>
</blockquote>
<div class="wlWriterSmartContent" style="display:inline;margin:0;padding:0;">Technorati tags: <a href="http://technorati.com/tags/Exception%20Handling" rel="tag">Exception Handling</a>, <a href="http://technorati.com/tags/RtlUnwind" rel="tag">RtlUnwind</a>, <a href="http://technorati.com/tags/RtlUnwindEx" rel="tag">RtlUnwindEx</a>, <a href="http://technorati.com/tags/Structured%20Exception%20Handling" rel="tag">Structured Exception Handling</a>, <a href="http://technorati.com/tags/SEH" rel="tag">SEH</a>, <a href="http://technorati.com/tags/C++%20Exception%20Handling" rel="tag">C++ Exception Handling</a>, <a href="http://technorati.com/tags/FS:[0]" rel="tag">FS:[0]</a></div>
<p><font size="2"></font></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cpfh.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cpfh.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cpfh.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cpfh.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cpfh.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cpfh.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cpfh.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cpfh.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cpfh.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cpfh.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cpfh.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cpfh.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cpfh.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cpfh.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cpfh.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cpfh.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=9&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cpfh.wordpress.com/2007/05/13/lessons-in-exception-handling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd66de54c4e88d48ccc93276e3320208?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Gaurav Khanna</media:title>
		</media:content>

		<media:content url="http://www.wintoolzone.com/images/f060de3d24ca_144A7/clip_image002_thumb1.jpg" medium="image" />
	</item>
		<item>
		<title>[Download] TransNTFS v1.0.0.1 &#8211; support for folders, symbolic and hard links and more</title>
		<link>http://cpfh.wordpress.com/2007/03/18/download-transntfs-v1001-support-for-folders-symbolic-and-hard-links-and-more/</link>
		<comments>http://cpfh.wordpress.com/2007/03/18/download-transntfs-v1001-support-for-folders-symbolic-and-hard-links-and-more/#comments</comments>
		<pubDate>Sun, 18 Mar 2007 19:14:13 +0000</pubDate>
		<dc:creator>Gaurav Khanna</dc:creator>
				<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Downloads]]></category>
		<category><![CDATA[Managed C++]]></category>
		<category><![CDATA[Windows API]]></category>

		<guid isPermaLink="false">http://cpfh.wordpress.com/2007/03/18/download-transntfs-v1001-support-for-folders-symbolic-and-hard-links-and-more/</guid>
		<description><![CDATA[I have updated TransNTFS, my managed implementation for the transactional NTFS APIs that have been introduced with Windows Vista. TransNTFS now also supports the following operations under a transaction: Creation and deletion of folders Deletion of files Creation of symbolic links Creation of hard links It comes with complete documentation (as always) and can be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=24&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:0.9em;font-family:arial,helvetica,sans-serif;"><font face="Trebuchet MS" size="2">I have updated </font><font face="Trebuchet MS" size="2"><a href="http://cpfh.wordpress.com/2007/03/15/download-transntfs-managed-implementation-of-transactional-ntfs-txf-apis/" target="_blank">TransNTFS</a></font><font face="Trebuchet MS" size="2">, my managed implementation for the transactional NTFS APIs that have been introduced with Windows Vista. TransNTFS now also supports the following operations under a transaction:</font></span></p>
<ul>
<li><font size="2">Creation and deletion of folders </font>
<li><font size="2">Deletion of files </font>
<li><font size="2">Creation of </font><a href="http://msdn2.microsoft.com/en-us/library/aa365680.aspx" target="_blank"><font size="2">symbolic links</font></a><font size="2"> </font>
<li><font size="2">Creation of </font><a href="http://msdn2.microsoft.com/en-us/library/ms810604.aspx" target="_blank"><font size="2">hard links</font></a><font size="2"> </font></li>
</ul>
<p><font size="2">It comes with complete documentation (as always) and can be downloaded from </font><a href="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=3" target="_blank"><font size="2">http://www.wintoolzone.com/ListDotNET.aspx?Listtype=3</font></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cpfh.wordpress.com/24/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cpfh.wordpress.com/24/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cpfh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cpfh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cpfh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cpfh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cpfh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cpfh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cpfh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cpfh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cpfh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cpfh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cpfh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cpfh.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cpfh.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cpfh.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=24&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cpfh.wordpress.com/2007/03/18/download-transntfs-v1001-support-for-folders-symbolic-and-hard-links-and-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd66de54c4e88d48ccc93276e3320208?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Gaurav Khanna</media:title>
		</media:content>
	</item>
		<item>
		<title>[Download] TransNTFS &#8211; Managed implementation of Transactional NTFS (TxF) APIs</title>
		<link>http://cpfh.wordpress.com/2007/03/15/download-transntfs-managed-implementation-of-transactional-ntfs-txf-apis/</link>
		<comments>http://cpfh.wordpress.com/2007/03/15/download-transntfs-managed-implementation-of-transactional-ntfs-txf-apis/#comments</comments>
		<pubDate>Thu, 15 Mar 2007 19:14:13 +0000</pubDate>
		<dc:creator>Gaurav Khanna</dc:creator>
				<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Downloads]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows API]]></category>

		<guid isPermaLink="false">http://cpfh.wordpress.com/2007/03/15/download-transntfs-managed-implementation-of-transactional-ntfs-txf-apis/</guid>
		<description><![CDATA[Sometime back, I had made a post regarding a native C++ class I had authored for using some of the Transactional NTFS (TxF)APIs introduced in Windows Vista. Almost two weeks from that post, I just finished my managed implementation, TransNTFS, that enables you to use the TxF APIs from managed code. As always, Managed C++ [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=22&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sometime back, I had made a <a href="http://cpfh.wordpress.com/2007/03/01/programming-the-transactional-ntfs-txf/" target="_blank">post</a> regarding a native C++ class I had authored for using some of the <a href="http://msdn2.microsoft.com/en-us/library/aa365456.aspx" target="_blank">Transactional NTFS (TxF)</a>APIs introduced in Windows Vista.</p>
<p>Almost two weeks from that post, I just finished my managed implementation, <a href="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=3" target="_blank"><strong>TransNTFS</strong></a><strong>,</strong> that enables you to use the <a href="http://msdn2.microsoft.com/en-us/library/aa365456.aspx" target="_blank">TxF</a> APIs from managed code. As always, <em>Managed C++</em> enabled the implementation with excellent ease. It comes with complete documentation and can be downloaded from <a href="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=3">http://www.wintoolzone.com/ListDotNET.aspx?Listtype=3</a>.</p>
<p>Below is an example usage of how to copy a file under a transaction:</p>
<pre><span style="color:#0000ff;">using</span> System;
<span style="color:#0000ff;">using</span> System.Collections.Generic;
<span style="color:#0000ff;">using</span> System.Text;
<span style="color:#0000ff;">using</span> WinToolZone;
<span style="color:#0000ff;">namespace</span> ManagedTransactionCopyDemo
{
<span style="color:#0000ff;">class</span> Program
{
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main(<span style="color:#0000ff;">string</span>[] args)
{
TransNTFS refTC = <span style="color:#0000ff;">new</span> TransNTFS();
<span style="color:#008000;">// Init the transaction</span>
<span style="color:#0000ff;">bool</span> fSuccess = refTC.BeginTransaction();
<span style="color:#0000ff;">if</span> (fSuccess)
{
fSuccess = refTC.CopyFile("<span style="color:#8b0000;">d:\\transcopy.pdb</span>", "<span style="color:#8b0000;">d:\\t.pdb</span>", <span style="color:#0000ff;">false</span>);
<span style="color:#0000ff;">if</span> (fSuccess)
{
fSuccess = refTC.Commit();
<span style="color:#0000ff;">if</span> (fSuccess)
{
Console.WriteLine("<span style="color:#8b0000;">Copy successful!</span>");
}
<span style="color:#0000ff;">else</span>
{
ShowErrorAndExit("<span style="color:#8b0000;">Commit failed!</span>", refTC.LastError);
}
}
<span style="color:#0000ff;">else</span>
{
ShowErrorAndExit("<span style="color:#8b0000;">Copy failed!</span>", refTC.LastError);
}
}
<span style="color:#0000ff;">else</span>
{
ShowErrorAndExit("<span style="color:#8b0000;">Unable to start the transaction!</span>", refTC.LastError);
}
}
<span style="color:#0000ff;">private</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> ShowErrorAndExit(<span style="color:#0000ff;">string</span> p, <span style="color:#0000ff;">int</span> p_2)
{
Console.WriteLine("<span style="color:#8b0000;">ERROR: {0}</span>", p);
Console.WriteLine("<span style="color:#8b0000;">CODE: {0}</span>", p_2);
System.Environment.Exit(1);
}
}
}
</pre>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cpfh.wordpress.com/22/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cpfh.wordpress.com/22/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cpfh.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cpfh.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cpfh.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cpfh.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cpfh.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cpfh.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cpfh.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cpfh.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cpfh.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cpfh.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cpfh.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cpfh.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cpfh.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cpfh.wordpress.com/22/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=22&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cpfh.wordpress.com/2007/03/15/download-transntfs-managed-implementation-of-transactional-ntfs-txf-apis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd66de54c4e88d48ccc93276e3320208?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Gaurav Khanna</media:title>
		</media:content>
	</item>
		<item>
		<title>Programming the Transactional NTFS (TxF)</title>
		<link>http://cpfh.wordpress.com/2007/03/01/programming-the-transactional-ntfs-txf/</link>
		<comments>http://cpfh.wordpress.com/2007/03/01/programming-the-transactional-ntfs-txf/#comments</comments>
		<pubDate>Thu, 01 Mar 2007 19:14:13 +0000</pubDate>
		<dc:creator>Gaurav Khanna</dc:creator>
				<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Downloads]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows API]]></category>

		<guid isPermaLink="false">http://cpfh.wordpress.com/2007/03/01/programming-the-transactional-ntfs-txf/</guid>
		<description><![CDATA[One of the key new features of Windows Vista is a component called the Kernel Transaction Manager (KTM) that brings inherent support for transactional development in not just the kernel-mode but also for user mode. Infact, NTFS has been enhanced to use and support transactions such that couple of new APIs (e.g. CopyFileTransacted, MoveFileTransacted just [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=21&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><font size="2">One of the key new features of </font><a title="Windows Vista Homepage" href="http://www.microsoft.com/windows/products/windowsvista/default.mspx" target="_blank"><em><font size="2">Windows Vista</font></em></a><font size="2"> is a component called the </font><a href="http://msdn2.microsoft.com/en-us/aa488080.aspx" target="_blank"><font size="2">Kernel Transaction Manager (KTM)</font></a><font size="2"> that brings inherent support for transactional development in not just the kernel-mode but also for user mode.</font></span><font size="2"><font face="Trebuchet MS"> <span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;">Infact, NTFS has been enhanced to use and support transactions such that couple of new APIs (e.g. <em><a href="http://msdn2.microsoft.com/en-us/library/aa363853.aspx" target="_blank"><em>CopyFileTransacted</em></a>, <a href="http://msdn2.microsoft.com/en-us/aa365241.aspx" target="_blank">MoveFileTransacted</a></em> just to name a few) have surfaced up. You can get more details on <a href="http://msdn2.microsoft.com/en-us/library/aa365456.aspx">Transactional NTFS here</a>.</span></font></font></p>
<p><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><font size="2">To demonstrate the power of the new APIs, I wrote a C++ class library (unmanaged), <em>CTransCopy,</em> that allows you to:</font></span></p>
<ul>
<li><font size="2"><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;">Copy files under a transaction</span><font face="Trebuchet MS"> </font></font>
<li><font size="2"><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;">Move files under a transaction</span><font face="Trebuchet MS"> </font></font>
<li><font size="2"><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;">Commit or Rollback the transaction</span><font face="Trebuchet MS"> </font></font>
<li><font size="2"><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;">Let you wire up a callback handler for copy/move progress</span><font face="Trebuchet MS"> </font></font></li>
</ul>
<p><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><font size="2">You can download it from </font><a href="http://www.wintoolzone.com/ListWin32.aspx?Listtype=5"><font size="2">http://www.wintoolzone.com/ListWin32.aspx?Listtype=5</font></a><font size="2">. The zipped archive also contains a sample client source code. <em>BTW, since the .LIB file containing the class was compiled using VC++ 2005 compiler, you will need the same to link against it and write an application</em>. <em>You can use</em> </font><a href="http://msdn.microsoft.com/vstudio/express/visualc/" target="_blank"><em><font size="2">VC++ 2005 Express Edition</font></em></a><font size="2">. Below is an example usage of the same:</font></span></p>
<p><em><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><span style="font-size:0.75em;"><font size="2">CTransCopy tcopy;</font></span></span></span></em></p>
<p><em><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><span style="font-size:0.75em;"><font size="2">if (tcopy.IsOSSupported() == FALSE)<br />{<br />printf(&#8220;This application requires Windows Vista or later.&#8221;);<br />return -1;<br />}</font></span></span></em></p>
<p><em><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><span style="font-size:0.75em;"><font size="2">if (tcopy.Init() == FALSE)<br />{<br />printf(&#8220;Init failed with error %08X\n&#8221;,tcopy.LastError());<br />return -1;<br />}</font></span></span></em></p>
<p><em><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><span style="font-size:0.75em;"><font size="2">// Setup a callback for progress<br />tcopy.SetCopyCallback(ProgressCallback);</font></span></span></em></p>
<p><em><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><span style="font-size:0.75em;"><font size="2">if (tcopy.CopyFileW(L&#8221;D:\\KGK\\Development\\VS\\Windows Vista\\VC\\TransCopy\\debug\\transcopy.pdb&#8221;,<br />L&#8221;D:\\transcopy.pdb&#8221;,FALSE) == FALSE)<br />{<br />printf(&#8220;Copy/move failed with error %08X\n&#8221;,tcopy.LastError());<br />tcopy.Rollback();<br />return -1;<br />}</font></span></span></em></p>
<p><em><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><span style="font-size:0.75em;"><font size="2">if (tcopy.Rollback() == FALSE)<br />{<br />printf(&#8220;Rollback failed with error %08X\n&#8221;,tcopy.LastError());<br />return -1;<br />}</p>
<p>if (tcopy.Commit() == FALSE)<br />{<br />printf(&#8220;Commit failed with error %08X\n&#8221;,tcopy.LastError());<br />return -1;<br />}</font></span></span></em></p>
<p><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><span style="font-size:0.75em;"><em><font size="2">printf(&#8220;Copy/move successful!\n&#8221;);</font></em></span></span></p>
<p><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><span style="font-size:0.9em;"><font size="2">The <em>ProgressCallback</em> function is implemented as shown below:</font></span></span></p>
<p><span style="font-size:0.9em;font-family:'Trebuchet MS',sans-serif;"><span style="font-size:0.9em;"><em><font size="2">void ProgressCallback(LARGE_INTEGER total, LARGE_INTEGER transferred)<br />{<br />double percent = (transferred.QuadPart*100.00)/total.QuadPart;<br />printf(&#8220;%f%% over\n&#8221;,percent);<br />}</font></em></span></span><!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cpfh.wordpress.com/21/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cpfh.wordpress.com/21/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cpfh.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cpfh.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cpfh.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cpfh.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cpfh.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cpfh.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cpfh.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cpfh.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cpfh.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cpfh.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cpfh.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cpfh.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cpfh.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cpfh.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=21&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cpfh.wordpress.com/2007/03/01/programming-the-transactional-ntfs-txf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd66de54c4e88d48ccc93276e3320208?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Gaurav Khanna</media:title>
		</media:content>
	</item>
		<item>
		<title>Article: Customizing AppDomain Creation</title>
		<link>http://cpfh.wordpress.com/2007/02/26/article-customizing-appdomain-creation/</link>
		<comments>http://cpfh.wordpress.com/2007/02/26/article-customizing-appdomain-creation/#comments</comments>
		<pubDate>Mon, 26 Feb 2007 19:14:13 +0000</pubDate>
		<dc:creator>Gaurav Khanna</dc:creator>
				<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[CLR]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Downloads]]></category>

		<guid isPermaLink="false">http://cpfh.wordpress.com/2007/02/26/article-customizing-appdomain-creation/</guid>
		<description><![CDATA[Did you have a scenario where you wished you could customize the creation of AppDomains? Or, you could control how many AppDomains any code that runs in your application context (e.g. if you are writing a plugin load framework) could create? Or, how about reusing AppDomains for various assemblies? I have just finished an article [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=19&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Did you have a scenario where you wished you could customize the creation of <em>AppDomains? </em>Or, you could control how many <em>AppDomains </em>any code that runs in your application context (e.g. if you are writing a plugin load framework) could create? Or, how about reusing <em>AppDomains </em>for various assemblies?</p>
<p>I have just finished an article on how any of the above scenarios can be accomplished using the <em>System.AppDomainManager </em>type, introduced in .NET Framework 2.0, by intercept <em>AppDomain </em>creation requests.</p>
<p>You can read the article at <a title="Customizing_AppDomain_Creation.aspx" href="http://www.wintoolzone.com/articles/Customizing_AppDomain_Creation.aspx" target="_blank">http://www.wintoolzone.com/articles/Customizing_AppDomain_Creation.aspx</a>&nbsp;and download associated source code from <a title="Customizing_AppDomain_Creation_src.zip" href="http://www.wintoolzone.com/downloads/Customizing_AppDomain_Creation_src.zip" target="_blank">http://www.wintoolzone.com/downloads/Customizing_AppDomain_Creation_src.zip</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cpfh.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cpfh.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cpfh.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cpfh.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cpfh.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cpfh.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cpfh.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cpfh.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cpfh.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cpfh.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cpfh.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cpfh.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cpfh.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cpfh.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cpfh.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cpfh.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=19&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cpfh.wordpress.com/2007/02/26/article-customizing-appdomain-creation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd66de54c4e88d48ccc93276e3320208?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Gaurav Khanna</media:title>
		</media:content>
	</item>
		<item>
		<title>How the SSCLI [a.k.a. Rotor] managed &quot;new&quot; works</title>
		<link>http://cpfh.wordpress.com/2007/02/12/how-the-sscli-aka-rotor-managed-quotnewquot-works/</link>
		<comments>http://cpfh.wordpress.com/2007/02/12/how-the-sscli-aka-rotor-managed-quotnewquot-works/#comments</comments>
		<pubDate>Mon, 12 Feb 2007 19:14:13 +0000</pubDate>
		<dc:creator>Gaurav Khanna</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[CLR]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Rotor]]></category>

		<guid isPermaLink="false">http://cpfh.wordpress.com/2007/02/12/how-the-sscli-aka-rotor-managed-quotnewquot-works/</guid>
		<description><![CDATA[One of the best ways to understand how the CLR works internally is to have a look at the SSCLI [a.k.a Rotor] source code. In How the SSCLI [a.k.a. Rotor] managed &#8220;new&#8221; works, I have used Rotor source code to discuss what happens behind the scenes when you use the managed new operator to instantiate [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=18&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:0.75em;font-family:arial,helvetica,sans-serif;">One of the best ways to understand how the CLR works internally is to have a look at the <strong><em>SSCLI [a.k.a Rotor]</em></strong> <a href="http://msdn.microsoft.com/net/sscli/" target="_blank">source code</a>.</span></p>
<p>In <strong><a href="http://www.wintoolzone.com/articles/How_Rotor_Managed_New_Works.aspx" target="_blank">How the SSCLI [a.k.a. Rotor] managed &#8220;new&#8221; works</a></strong>, I have used <em>Rotor</em> source code to discuss what happens behind the scenes when you use the managed <em>new</em> operator to instantiate a managed type, discussing implications of object size, how requests from multiple threads are handled, the different validations that are done, when <em>out-of-memory</em> exception is thrown, etc. If you are a managed code developer, you may learn a thing or two that can help you write better code besides understanding how the managed allocation works internally.<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cpfh.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cpfh.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cpfh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cpfh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cpfh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cpfh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cpfh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cpfh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cpfh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cpfh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cpfh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cpfh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cpfh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cpfh.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cpfh.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cpfh.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=18&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cpfh.wordpress.com/2007/02/12/how-the-sscli-aka-rotor-managed-quotnewquot-works/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd66de54c4e88d48ccc93276e3320208?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Gaurav Khanna</media:title>
		</media:content>
	</item>
		<item>
		<title>Joined the Common Language Runtime (CLR) Team</title>
		<link>http://cpfh.wordpress.com/2006/09/13/joined-the-common-language-runtime-clr-team/</link>
		<comments>http://cpfh.wordpress.com/2006/09/13/joined-the-common-language-runtime-clr-team/#comments</comments>
		<pubDate>Wed, 13 Sep 2006 19:55:21 +0000</pubDate>
		<dc:creator>Gaurav Khanna</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://cpfh.wordpress.com/2006/09/13/joined-the-common-language-runtime-clr-team/</guid>
		<description><![CDATA[Its been almost two months since I last blogged. This was majorly due to a change in my professional life. After having a great time (travelling across the country, meeting developers at stretch, presenting at TechED and MEDC just to name few things) in my role as Developer Evangelist with Microsoft India, I relocated to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=17&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Its been almost two months since I last blogged. This was majorly due to a change in my professional life.</p>
<p>After having a great time (travelling across the country, meeting developers at stretch, presenting at TechED and MEDC just to name few things) in my role as <em>Developer Evangelist</em> with Microsoft India, I relocated to Microsoft Corporation at Redmond to join the Common Language Runtime (CLR) team as a Software Development Engineer (SDE). In my new role, I would be working on a new <em>type</em> of CLR &#8211; and look forward to share my learnings about the runtime via this blog and my website, <a href="http://www.wintoolzone.com/">http://www.wintoolzone.com/</a>.</p>
<p>Cheers!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cpfh.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cpfh.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cpfh.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cpfh.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cpfh.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cpfh.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cpfh.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cpfh.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cpfh.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cpfh.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cpfh.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cpfh.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cpfh.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cpfh.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cpfh.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cpfh.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cpfh.wordpress.com&amp;blog=1366614&amp;post=17&amp;subd=cpfh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cpfh.wordpress.com/2006/09/13/joined-the-common-language-runtime-clr-team/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd66de54c4e88d48ccc93276e3320208?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Gaurav Khanna</media:title>
		</media:content>
	</item>
	</channel>
</rss>
