<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.NET Framework</title>
        <link>http://geekswithblogs.net/khanna/category/544.aspx</link>
        <description>.NET Framework</description>
        <language>en-US</language>
        <copyright>Gaurav Khanna</copyright>
        <managingEditor>gaurav@wintoolzone.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Integrating Windows Live Authentication in your application</title>
            <link>http://geekswithblogs.net/khanna/archive/2007/12/16/integrating-windows-live-authentication-in-your-application.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;For one of my pet projects I am writing, I was contemplating how to integrate &lt;em&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb404791.aspx" target="_blank"&gt;Windows Live Authentication&lt;/a&gt; &lt;/em&gt;with my standalone application, similar to &lt;strong&gt;&lt;em&gt;Windows Live Messenger. &lt;/em&gt;&lt;/strong&gt;Turns out, it is &lt;u&gt;really&lt;/u&gt; easy! Below are the three steps that were needed for the integration:&lt;/font&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;font size="2"&gt;Download the &lt;strong&gt;Windows Live Client SDK&lt;/strong&gt; from &lt;/font&gt;&lt;a href="http://go.microsoft.com/fwlink/?linkid=86974" target="_blank"&gt;&lt;font size="2"&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; and install it.&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="2"&gt;Create a new project and add reference to &lt;strong&gt;&lt;em&gt;Microsoft.WindowsLive.Id.Client &lt;/em&gt;&lt;/strong&gt;assembly&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="2"&gt;Write code similar to the one below:&lt;/font&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; Microsoft.WindowsLive.Id.Client;

&lt;span style="color: rgb(0,0,255)"&gt;namespace&lt;/span&gt; WLAuthenticate
{
    &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Program
&lt;/span&gt;    {
        [&lt;span style="color: rgb(43,145,175)"&gt;STAThread&lt;/span&gt;]
        &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Main(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span style="color: rgb(0,128,0)"&gt;// Attempt user authentication
&lt;/span&gt;            &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Enter your passport email address: "&lt;/span&gt;);
            &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; strPassportEmail = &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.ReadLine();
            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(43,145,175)"&gt;String&lt;/span&gt;.IsNullOrEmpty(strPassportEmail))
            {
                &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Enter valid address!"&lt;/span&gt;);
                &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt;;
            }

            &lt;span style="color: rgb(0,128,0)"&gt;// Got the details - attempt to authenticate
&lt;/span&gt;            &lt;span style="color: rgb(43,145,175)"&gt;IdentityManager&lt;/span&gt; idMgr = &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;
            &lt;span style="color: rgb(43,145,175)"&gt;Identity&lt;/span&gt; curID = &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;;

            &lt;span style="color: rgb(0,128,0)"&gt;// Create the identity manager
&lt;/span&gt;            idMgr = &lt;span style="color: rgb(43,145,175)"&gt;IdentityManager&lt;/span&gt;.CreateInstance(&lt;span style="color: rgb(163,21,21)"&gt;"OrganizationName;name@company.com;ClientAuthSample"&lt;/span&gt;,
                &lt;span style="color: rgb(163,21,21)"&gt;"Windows Live Client Authentication Sample App"&lt;/span&gt;);

            &lt;span style="color: rgb(0,128,0)"&gt;// and now create the user's identity from it..
&lt;/span&gt;            curID = idMgr.CreateIdentity(strPassportEmail);
            &lt;span style="color: rgb(0,0,255)"&gt;bool&lt;/span&gt; fAuthenticated = &lt;span style="color: rgb(0,0,255)"&gt;false&lt;/span&gt;;

            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (curID != &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;)
            {
                &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (curID.SavedCredentials == &lt;span style="color: rgb(43,145,175)"&gt;CredentialType&lt;/span&gt;.UserNameAndPassword)
                {
                    &lt;span style="color: rgb(0,128,0)"&gt;// the credentials are persisted in local store and we can authenticate
&lt;/span&gt;                    fAuthenticated = curID.Authenticate(&lt;span style="color: rgb(43,145,175)"&gt;AuthenticationType&lt;/span&gt;.Silent);
                }
                &lt;span style="color: rgb(0,0,255)"&gt;else
&lt;/span&gt;                {
                    &lt;span style="color: rgb(0,128,0)"&gt;// Credentials not available locally, so show the signin dialog...
&lt;/span&gt;                    curID = idMgr.CreateIdentity();

                    &lt;span style="color: rgb(0,128,0)"&gt;// This will prompt for credentials to authenticate...
&lt;/span&gt;                    fAuthenticated = curID.Authenticate();
                }

                &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (fAuthenticated)
                {
                    &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Authenticated with Windows Live!"&lt;/span&gt;);
                    &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Your username is {0}"&lt;/span&gt;, curID.UserName);
                    
                    &lt;span style="color: rgb(0,128,0)"&gt;// Close the authentication
&lt;/span&gt;                    curID.CloseIdentityHandle();
                }
            }
            
        }
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;font size="2"&gt;Easy, isn't it :) ?&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="2"&gt;The &lt;u&gt;only thing to be kept in mind&lt;/u&gt; is that if the passport authentication details are not persisted on the machine where authentication is attempted, then you will need to invoke &lt;strong&gt;Identity.Authenticate &lt;/strong&gt;method without any arguments. This overload uses COM subsystem to display the &lt;em&gt;Windows Live&lt;strong&gt; &lt;/strong&gt;&lt;/em&gt;signin dialog to attempt authentication and requires the calling thread to be in STA mode and thus, tagged with &lt;em&gt;STAThread &lt;/em&gt;attribute. Hence, I have set this attribute to the &lt;em&gt;Main &lt;/em&gt;method above. Not setting this attribute will result in a &lt;em&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.threading.threadstateexception(VS.90).aspx" target="_blank"&gt;ThreadStateException&lt;/a&gt; &lt;/em&gt;being raised.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117765"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117765" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/khanna/aggbug/117765.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gaurav Khanna</dc:creator>
            <guid>http://geekswithblogs.net/khanna/archive/2007/12/16/integrating-windows-live-authentication-in-your-application.aspx</guid>
            <pubDate>Mon, 17 Dec 2007 07:42:11 GMT</pubDate>
            <comments>http://geekswithblogs.net/khanna/archive/2007/12/16/integrating-windows-live-authentication-in-your-application.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/khanna/comments/commentRss/117765.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/khanna/services/trackbacks/117765.aspx</trackback:ping>
        </item>
        <item>
            <title>[Article] AppDomains and Unhandled Exception Notifications</title>
            <link>http://geekswithblogs.net/khanna/archive/2007/12/15/article-appdomains-and-unhandled-exception-notifications.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;One always strives to write exception safe application but there are times when an exception can go unhandled. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;In the .NET Framework, the &lt;/font&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.appdomain(VS.90).aspx" target="_blank"&gt;&lt;em&gt;&lt;font size="2"&gt;AppDomain&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;font size="2"&gt;&lt;em&gt; &lt;/em&gt;class exposes the &lt;em&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.appdomain.unhandledexception(VS.90).aspx" target="_blank"&gt;UnhandledException&lt;/a&gt;&lt;/em&gt; event that can be used&lt;em&gt; &lt;/em&gt;by by the managed application to know when an exception has gone unhandled. In the writeup, &lt;em&gt;&lt;a href="http://www.wintoolzone.com/PermaLink.aspx?ID=137" target="_blank"&gt;AppDomains and Unhandled Exception Notifications&lt;/a&gt;, &lt;/em&gt;I discuss the specifics of when and how this notification is made, what is the relationship between the thread that had unhandled exception and the AppDomain(s) for which this notification will be done and what should be done during the notification callback.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;The source code for the article can be downloaded from &lt;/font&gt;&lt;a href="http://www.wintoolzone.com/downloads/aduehandler.zip" target="_blank"&gt;&lt;font size="2"&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117754"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117754" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/khanna/aggbug/117754.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gaurav Khanna</dc:creator>
            <guid>http://geekswithblogs.net/khanna/archive/2007/12/15/article-appdomains-and-unhandled-exception-notifications.aspx</guid>
            <pubDate>Sun, 16 Dec 2007 05:46:30 GMT</pubDate>
            <comments>http://geekswithblogs.net/khanna/archive/2007/12/15/article-appdomains-and-unhandled-exception-notifications.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/khanna/comments/commentRss/117754.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/khanna/services/trackbacks/117754.aspx</trackback:ping>
        </item>
        <item>
            <title>Enumerating AppDomains - I</title>
            <link>http://geekswithblogs.net/khanna/archive/2007/06/09/Enumerating-AppDomains---I.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Surprisingly, enumerating &lt;em&gt;AppDomains &lt;/em&gt;is not that straightforward. The &lt;em&gt;System.AppDomain &lt;/em&gt;type does not expose functionality to enumerate them at all. The way to enumerate them will be to use the V1 Hosting interface, &lt;em&gt;ICorRuntimeHost &lt;/em&gt;and then invoke the &lt;em&gt;EnumDomains &lt;/em&gt;and &lt;em&gt;NextDomain &lt;/em&gt;methods against it to get the list. If you are using CLR 2.0, you needn't worry as CLR 2.0 does implement the V1 interfaces as well. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Below is the snippet that exemplifies the concept (&lt;em&gt;note: AppDomains will only be enumerated in the current process - I will discuss AppDomain enumeration in remote processes later). &lt;/em&gt;You can download the source code (VS Solution) from &lt;/font&gt;&lt;a title="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=5" href="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=5" target="_blank"&gt;&lt;font size="2"&gt;http://www.wintoolzone.com/ListDotNET.aspx?Listtype=5&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(0,128,0)"&gt;// EnumAppDomains.cpp : Defines the entry point for the console application.
// 
&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;#include&lt;/span&gt; &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(163,21,21)"&gt;"stdafx.h"
&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;#include&lt;/span&gt; &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(163,21,21)"&gt;&amp;lt;windows.h&amp;gt;
&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;#include&lt;/span&gt; &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(163,21,21)"&gt;"mscoree.h"

&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;#import&lt;/span&gt; &lt;span style="color: rgb(163,21,21)"&gt;"C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.tlb"&lt;/span&gt; raw_interfaces_only

&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;namespace&lt;/span&gt; mscorlib; 

&lt;span style="color: rgb(0,0,255)"&gt;#define&lt;/span&gt; EXITONERROR(hr, mesg) \
&lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (FAILED(hr)) \
{ \
    printf(&lt;span style="color: rgb(163,21,21)"&gt;"%s\n"&lt;/span&gt;, mesg); \
    ExitProcess(1); \
} 

&lt;span style="color: rgb(0,0,255)"&gt;#define&lt;/span&gt; SUCCESSFUL(hr) (SUCCEEDED(hr) &amp;amp;&amp;amp; hr != S_FALSE) 
&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; _tmain(&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; argc, _TCHAR* argv[])
{
    ICorRuntimeHost * pV1HostPtr = NULL;
    HRESULT hr = CorBindToRuntimeEx(NULL,
                NULL, 0, 
                CLSID_CorRuntimeHost,
                IID_ICorRuntimeHost,
                (LPVOID *)&amp;amp;pV1HostPtr);

    EXITONERROR(hr, &lt;span style="color: rgb(163,21,21)"&gt;"Unable to get ICorRuntimeHost*"&lt;/span&gt;); 
    
    &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Start the runtime
&lt;/span&gt;    hr = pV1HostPtr-&amp;gt;Start();
    EXITONERROR(hr, &lt;span style="color: rgb(163,21,21)"&gt;"Unable to start the runtime"&lt;/span&gt;); 
    
    &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Enumerate the AppDomains
&lt;/span&gt;    HDOMAINENUM adEnum;
    hr = pV1HostPtr-&amp;gt;EnumDomains(&amp;amp;adEnum);
    EXITONERROR(hr, &lt;span style="color: rgb(163,21,21)"&gt;"Unable to enumerate AppDomains"&lt;/span&gt;);
    
    &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Loop thru the domains
&lt;/span&gt;    IUnknown * pDomainUnk = NULL;
    hr = pV1HostPtr-&amp;gt;NextDomain(adEnum, &amp;amp;pDomainUnk);
    &lt;span style="color: rgb(0,0,255)"&gt;while&lt;/span&gt;(SUCCESSFUL(hr))
    {
        &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Got the IUnknown* to the AppDomain - convert it to AppDomain pointer
&lt;/span&gt;        _AppDomain * pCurDomain = NULL;
        hr = pDomainUnk-&amp;gt;QueryInterface(&lt;span style="color: rgb(0,0,255)"&gt;__uuidof&lt;/span&gt;(_AppDomain), (VOID**)&amp;amp;pCurDomain);
        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (SUCCESSFUL(hr))
        {
            &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Display the name of the AppDomain
&lt;/span&gt;            BSTR str;
            &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (SUCCESSFUL(pCurDomain-&amp;gt;get_FriendlyName(&amp;amp;str)))
            {
            wprintf(L&lt;span style="color: rgb(163,21,21)"&gt;"AppDomain: %s\n"&lt;/span&gt;,str);
            }
            &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(0,0,255)"&gt;else
&lt;/span&gt;            {
                printf(&lt;span style="color: rgb(163,21,21)"&gt;"AppDomain: unable to get the name!\n"&lt;/span&gt;);
            }
        } 
    
        &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Loop onto the next Domain
&lt;/span&gt;        hr = pV1HostPtr-&amp;gt;NextDomain(adEnum, &amp;amp;pDomainUnk);
    } 

    &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Stop the runtime
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (pV1HostPtr)
    {
        pV1HostPtr-&amp;gt;Stop();
    }

    &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; 0;
} &lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:38da0fc2-6f07-48a6-9bd6-b1f22a4e41db" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/CLR%20Hosting" rel="tag"&gt;CLR Hosting&lt;/a&gt;, &lt;a href="http://technorati.com/tags/CorBindToRuntimeEx" rel="tag"&gt;CorBindToRuntimeEx&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Hosting" rel="tag"&gt;Hosting&lt;/a&gt;, &lt;a href="http://technorati.com/tags/AppDomains" rel="tag"&gt;AppDomains&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Enumeration" rel="tag"&gt;Enumeration&lt;/a&gt;, &lt;a href="http://technorati.com/tags/EnumDomains" rel="tag"&gt;EnumDomains&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113752"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113752" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/khanna/aggbug/113752.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gaurav Khanna</dc:creator>
            <guid>http://geekswithblogs.net/khanna/archive/2007/06/09/Enumerating-AppDomains---I.aspx</guid>
            <pubDate>Sun, 10 Jun 2007 03:45:46 GMT</pubDate>
            <comments>http://geekswithblogs.net/khanna/archive/2007/06/09/Enumerating-AppDomains---I.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/khanna/comments/commentRss/113752.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/khanna/services/trackbacks/113752.aspx</trackback:ping>
        </item>
        <item>
            <title>WinToolZone.Bluetooth - Support for authentication</title>
            <link>http://geekswithblogs.net/khanna/archive/2007/03/29/110236.aspx</link>
            <description>&lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;[Originally posted on 10th July 2006]&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;&lt;em&gt;WinToolZone.Bluetooth&lt;/em&gt;&lt;/strong&gt; now has authentication support. You can use a &lt;strong&gt;&lt;em&gt;BluetoothDevice&lt;/em&gt;&lt;/strong&gt; object (which is used represent a Bluetooth device that has been detected) and use the &lt;em&gt;SendPassKey&lt;/em&gt; method to send a pass key for authentication:&lt;/font&gt;&lt;/p&gt; &lt;div class="CodeFormatContainer"&gt;.  &lt;style&gt;
&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }

--&gt;
&lt;/style&gt;  &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;bth.Devices[ i ].SendPassKey(&lt;span class="str"&gt;"123"&lt;/span&gt;, &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;br&gt;Also, I have added &lt;em&gt;OnIncomingAuthenticationRequest&lt;/em&gt; event handler against a &lt;strong&gt;&lt;em&gt;BluetoothDevice&lt;/em&gt;&lt;/strong&gt; object that can be used to setup an event handler, which will be invoked when the &lt;em&gt;Bluetooth&lt;/em&gt; device sends an authentication request to the machine running &lt;strong&gt;&lt;em&gt;WinToolZone.Bluetooth:&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;. 
&lt;style&gt;
&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }

--&gt;
&lt;/style&gt;

&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;bth.Devices[ i ].OnIncomingAuthenticationRequest += &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;BluetoothDevice.IncomingAuthenticationRequestHandler(&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;Program_OnIncomingAuthenticationRequest);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The event handler is implemented as shown below:&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;. 
&lt;style&gt;
&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }

--&gt;
&lt;/style&gt;

&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Program_OnIncomingAuthenticationRequest(&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;               BluetoothDevice refDeviceRequestingAuthentication)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;  Console.WriteLine(&lt;span class="str"&gt;"{0} is requesting me to send pass key."&lt;/span&gt;, &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    refDeviceRequestingAuthentication.Name);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;  &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;  &lt;span class="kwrd"&gt;bool&lt;/span&gt; bSentResponse = &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;  refDeviceRequestingAuthentication.SendAuthenticationResponse(&lt;span class="str"&gt;"123"&lt;/span&gt;, &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt" style="width: 100%; height: 14px"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;  Console.WriteLine(&lt;span class="str"&gt;"Sent response: {0}"&lt;/span&gt;,bSentResponse.ToString());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;The handler gets as an argument the &lt;em&gt;BluetoothDevice&lt;/em&gt; instance representing the device that sent the authentication request. To send the pass key back as part of completing the incoming authentication process, &lt;em&gt;SendAuthenticationResponse&lt;/em&gt; method of &lt;em&gt;BluetoothDevice&lt;/em&gt; is used.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;For a partnership/bonding that has been established with a &lt;em&gt;Bluetooth&lt;/em&gt; device, &lt;em&gt;DeleteDeviceAuthentication&lt;/em&gt; method has been introduced that should be invoked against the &lt;em&gt;BluetoothDevice&lt;/em&gt; instance representing the partnered device to break the partnership.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110236"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110236" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/khanna/aggbug/110236.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gaurav Khanna [gaurav@wintoolzone.com]</dc:creator>
            <guid>http://geekswithblogs.net/khanna/archive/2007/03/29/110236.aspx</guid>
            <pubDate>Thu, 29 Mar 2007 21:42:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/khanna/archive/2007/03/29/110236.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/khanna/comments/commentRss/110236.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/khanna/services/trackbacks/110236.aspx</trackback:ping>
        </item>
        <item>
            <title>WinToolZone.Bluetooth - Added device enumeration support</title>
            <link>http://geekswithblogs.net/khanna/archive/2007/03/29/110235.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;[Originally posted on 6th July 2006]&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;WinToolZone.Bluetooth,&lt;/strong&gt; the managed Bluetooth API for the desktop that I am working on, now has the support for enumerating devices as well. The snippet below exemplifies it:&lt;/font&gt;&lt;/p&gt; &lt;div class="CodeFormatContainer"&gt;.  &lt;style&gt;
&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }

--&gt;
&lt;/style&gt;  &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;Bluetooth bth = &lt;span class="kwrd"&gt;new&lt;/span&gt; Bluetooth();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;            &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;// EnumRadios(bth);&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (bth.RefreshDevices(&lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;null&lt;/span&gt;) == &lt;span class="kwrd"&gt;false&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;         Console.WriteLine(&lt;span class="str"&gt;"Unable to enum devices"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;         &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (BluetoothDevice device &lt;span class="kwrd"&gt;in&lt;/span&gt; bth.Devices)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;         Console.WriteLine(&lt;span class="str"&gt;"Devicename: {0}"&lt;/span&gt;, device.Name);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;         Console.WriteLine(&lt;span class="str"&gt;"LastSeen: {0}"&lt;/span&gt;, device.LastSeen.ToString());&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;         Console.WriteLine(&lt;span class="str"&gt;"LastUsed: {0}"&lt;/span&gt;, device.LastUsed.ToString());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;         Console.WriteLine(&lt;span class="str"&gt;"Connected: {0}"&lt;/span&gt;, device.IsConnected.ToString());&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;         Console.WriteLine(&lt;span class="str"&gt;"Remembered: {0}"&lt;/span&gt;, device.IsRemembered.ToString());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;         Console.WriteLine(&lt;span class="str"&gt;"Authenticated: {0}"&lt;/span&gt;, device.IsAuthenticated.ToString());&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;         Console.WriteLine(&lt;span class="str"&gt;"DeviceClass: {0}"&lt;/span&gt;, device.DeviceClassID);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;         Console.WriteLine(&lt;span class="str"&gt;"Address: {0}\n"&lt;/span&gt;, device.Address.ToString());&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;font face="Trebuchet MS" size="2"&gt;And below is an output screenshot:&lt;/font&gt;&lt;br&gt;&lt;/p&gt;&lt;a href="http://www.wintoolzone.com/images/WinToolZoneBluetoothSS.JPG" target="_blank"&gt;&lt;img title="Bluetooth device enumeration output using WinToolZone.Bluetooth" style="display: inline; width: 550px; height: 300px" height="300" alt="Bluetooth device enumeration output using WinToolZone.Bluetooth" src="http://www.wintoolzone.com/images/WinToolZoneBluetoothSS.JPG" width="550"&gt;&lt;/a&gt; &lt;!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110235"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110235" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/khanna/aggbug/110235.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gaurav Khanna [gaurav@wintoolzone.com]</dc:creator>
            <guid>http://geekswithblogs.net/khanna/archive/2007/03/29/110235.aspx</guid>
            <pubDate>Thu, 29 Mar 2007 21:39:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/khanna/archive/2007/03/29/110235.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/khanna/comments/commentRss/110235.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/khanna/services/trackbacks/110235.aspx</trackback:ping>
        </item>
        <item>
            <title>WinToolZone.Bluetooth - Managed Bluetooth API for the desktop</title>
            <link>http://geekswithblogs.net/khanna/archive/2007/03/29/110234.aspx</link>
            <description>&lt;p&gt;&lt;span style="font-family: times new roman"&gt;&lt;font size="2"&gt;&lt;font face="Trebuchet MS"&gt;[&lt;em&gt;Originally posted on 5th July 2006]&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Trebuchet MS"&gt;One of the communication protocols not present in .NET Framework class libraries is Bluetooth. So today, I started to work on my implementation of a managed API for Bluetooth programming - &lt;em&gt;&lt;strong&gt;WinToolZone.Bluetooth&lt;/strong&gt;&lt;/em&gt;. I am authoring it using &lt;em&gt;Managed C++&lt;/em&gt; and leveraging the Microsoft Bluetooth stack APIs.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;I just completed implementing the support for enumerating the &lt;em&gt;Bluetooth radios&lt;/em&gt; on a machine. Below is a C# program that exemplifies how they can be enumerated:&lt;/font&gt;&lt;/p&gt; &lt;div class="CodeFormatContainer"&gt;.  &lt;style&gt;
&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }

--&gt;
&lt;/style&gt;  &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; WinToolZone;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; BTHCSClient&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            Bluetooth bth = &lt;span class="kwrd"&gt;new&lt;/span&gt; Bluetooth();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (bth.RefreshRadios())&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (BluetoothRadio radio &lt;span class="kwrd"&gt;in&lt;/span&gt; bth.Radios)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                    Console.WriteLine(&lt;span class="str"&gt;"RadioName: {0}"&lt;/span&gt;, radio.Name);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                    Console.WriteLine(&lt;span class="str"&gt;"Address: {0}"&lt;/span&gt;, radio.Address.ToString());&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                    Console.WriteLine(&lt;span class="str"&gt;"ManuID: {0}"&lt;/span&gt;, radio.ManufacturerID);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                    Console.WriteLine(&lt;span class="str"&gt;"LMPSubversion: {0}"&lt;/span&gt;, radio.LMPSubversion);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                    Console.WriteLine(&lt;span class="str"&gt;"DeviceClass: {0}"&lt;/span&gt;, radio.DeviceClass);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                Console.WriteLine(&lt;span class="str"&gt;"Unable to enumerate BTH radios"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110234"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110234" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/khanna/aggbug/110234.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gaurav Khanna [gaurav@wintoolzone.com]</dc:creator>
            <guid>http://geekswithblogs.net/khanna/archive/2007/03/29/110234.aspx</guid>
            <pubDate>Thu, 29 Mar 2007 21:28:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/khanna/archive/2007/03/29/110234.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/khanna/comments/commentRss/110234.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/khanna/services/trackbacks/110234.aspx</trackback:ping>
        </item>
        <item>
            <title>DesktopSMS - Send, Receive and Reply to SMS from the desktop</title>
            <link>http://geekswithblogs.net/khanna/archive/2007/03/29/110233.aspx</link>
            <description>&lt;p style="font-size: 10pt; margin: 0in; font-family: verdana; mso-outline-level: 1"&gt;&lt;font face="Trebuchet MS"&gt;&lt;/font&gt;&lt;em&gt;[Originally posted on 31st July 2006] &lt;/em&gt;&lt;/p&gt; &lt;p style="font-size: 10pt; margin: 0in; font-family: verdana; mso-outline-level: 1"&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 10pt; margin: 0in; font-family: verdana; mso-outline-level: 1"&gt;&lt;font face="Trebuchet MS"&gt;Ever wanted to compose SMS from the ease of desktop instead of the phone? Wanted to be notified on the desktop, while you are working, when a SMS is received and reply to it from there itself?&lt;/font&gt;&lt;/p&gt;&lt;br&gt; &lt;p style="font-size: 10pt; margin: 0in; font-family: verdana; mso-outline-level: 1"&gt;&lt;span style="font-weight: bold"&gt;&lt;a href="http://www.wintoolzone.com/showpage.aspx?url=listdotnet.aspx?Listtype=1" target="_blank"&gt;&lt;span style="font-weight: bold"&gt;&lt;font face="Trebuchet MS"&gt;DesktopSMS&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;font face="Trebuchet MS"&gt;,&lt;/font&gt;&lt;/span&gt;&lt;font face="Trebuchet MS"&gt; for &lt;em&gt;Windows Mobile 5.0 based SmartPhone and PocketPC&lt;/em&gt; devices, will let you do just that! Based upon .&lt;em&gt;NET Framework 2.0, .NET Compact Framework 2.0 and Windows Mobile 5.0&lt;/em&gt;, it allows you to compose, receive and reply to SMS while the phone is connected to your machine via ActiveSync. Below are some screenshots of the same:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;font size="2"&gt;&lt;img title="Main window to send SMS" height="258" alt="Main window to send SMS" src="http://www.wintoolzone.com/images/DesktopSMSSS.jpg" width="530"&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: verdana,sans-serif"&gt;&lt;span style="font-size: 0.75em"&gt;&lt;font size="2"&gt;&lt;font face="Trebuchet MS"&gt;&lt;span style="font-family: verdana,sans-serif"&gt;Likewise&lt;/span&gt;, when a SMS is received, a popup comes on your screen that will allow you to reply as well:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: verdana,sans-serif"&gt;&lt;font face="Trebuchet MS" size="2"&gt;&lt;img title="Popup on message receipt" style="display: inline; width: 532px; height: 250px" height="250" alt="Popup on message receipt" src="http://www.wintoolzone.com/images/ReceiveSMSSS.jpg" width="532"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 0.75em; font-family: verdana,sans-serif"&gt;&lt;font face="Trebuchet MS" size="2"&gt;You can even select recepients from Microsoft Outlook's Contact folder as message receipient, provided they have mobile phone number specified. It comes with complete documentation and installer.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 0.75em; font-family: verdana,sans-serif"&gt;&lt;font face="Trebuchet MS" size="2"&gt;Download &lt;strong&gt;DesktopSMS&lt;/strong&gt; from &lt;/font&gt;&lt;a href="http://www.wintoolzone.com/showpage.aspx?url=listdotnet.aspx?Listtype=1"&gt;&lt;font face="Trebuchet MS" size="2"&gt;http://www.wintoolzone.com/showpage.aspx?url=listdotnet.aspx?Listtype=1&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110233"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110233" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/khanna/aggbug/110233.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gaurav Khanna [gaurav@wintoolzone.com]</dc:creator>
            <guid>http://geekswithblogs.net/khanna/archive/2007/03/29/110233.aspx</guid>
            <pubDate>Thu, 29 Mar 2007 21:24:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/khanna/archive/2007/03/29/110233.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/khanna/comments/commentRss/110233.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/khanna/services/trackbacks/110233.aspx</trackback:ping>
        </item>
        <item>
            <title>[Download] TransNTFS v1.0.0.1 - support for folders, symbolic and hard links and more</title>
            <link>http://geekswithblogs.net/khanna/archive/2007/03/29/110232.aspx</link>
            <description>&lt;p&gt;&lt;span style="font-size: 0.9em; font-family: arial,helvetica,sans-serif"&gt;&lt;font face="Trebuchet MS" size="2"&gt;I have updated &lt;/font&gt;&lt;a href="http://geekswithblogs.net/blogs/gkhanna/archive/2007/03/15/32531.aspx" target="_blank"&gt;&lt;font face="Trebuchet MS" size="2"&gt;TransNTFS&lt;/font&gt;&lt;/a&gt;&lt;font face="Trebuchet MS" size="2"&gt;, 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:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size="2"&gt;Creation and deletion of folders &lt;/font&gt; &lt;li&gt;&lt;font size="2"&gt;Deletion of files &lt;/font&gt; &lt;li&gt;&lt;font size="2"&gt;Creation of &lt;/font&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa365680.aspx" target="_blank"&gt;&lt;font size="2"&gt;symbolic links&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; &lt;/font&gt; &lt;li&gt;&lt;font size="2"&gt;Creation of &lt;/font&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms810604.aspx" target="_blank"&gt;&lt;font size="2"&gt;hard links&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size="2"&gt;It comes with complete documentation (as always) and can be downloaded from &lt;/font&gt;&lt;a href="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=3" target="_blank"&gt;&lt;font size="2"&gt;http://www.wintoolzone.com/ListDotNET.aspx?Listtype=3&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110232"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110232" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/khanna/aggbug/110232.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gaurav Khanna [gaurav@wintoolzone.com]</dc:creator>
            <guid>http://geekswithblogs.net/khanna/archive/2007/03/29/110232.aspx</guid>
            <pubDate>Thu, 29 Mar 2007 21:19:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/khanna/archive/2007/03/29/110232.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/khanna/comments/commentRss/110232.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/khanna/services/trackbacks/110232.aspx</trackback:ping>
        </item>
        <item>
            <title>[Download] TransNTFS - Managed implementation of Transactional NTFS (TxF) APIs</title>
            <link>http://geekswithblogs.net/khanna/archive/2007/03/29/110230.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Sometime back, I had made a &lt;/font&gt;&lt;a href="http://geekswithblogs.net/blogs/gkhanna/archive/2007/03/01/29054.aspx" target="_blank"&gt;&lt;font size="2"&gt;post&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; regarding a native C++ class I had authored for using some of the &lt;/font&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa365456.aspx" target="_blank"&gt;&lt;font size="2"&gt;Transactional NTFS (TxF)&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;APIs introduced in Windows Vista.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Almost two weeks from that post, I just finished my managed implementation, &lt;/font&gt;&lt;a href="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=3" target="_blank"&gt;&lt;strong&gt;&lt;font size="2"&gt;TransNTFS&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;font size="2"&gt;&lt;strong&gt;,&lt;/strong&gt; that enables you to use the &lt;/font&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa365456.aspx" target="_blank"&gt;&lt;font size="2"&gt;TxF&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; APIs from managed code. As always, &lt;em&gt;Managed C++&lt;/em&gt; enabled the implementation with excellent ease. It comes with complete documentation and can be downloaded from &lt;/font&gt;&lt;a href="http://www.wintoolzone.com/ListDotNET.aspx?Listtype=3"&gt;&lt;font size="2"&gt;http://www.wintoolzone.com/ListDotNET.aspx?Listtype=3&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Below is an example usage of how to copy a file under a transaction:&lt;/font&gt;&lt;/p&gt; &lt;div class="CodeFormatContainer"&gt;.  &lt;style&gt;
&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }

--&gt;
&lt;/style&gt;  &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; WinToolZone;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ManagedTransactionCopyDemo&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;TransNTFS refTC = &lt;span class="kwrd"&gt;new&lt;/span&gt; TransNTFS();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&lt;span class="rem"&gt;// Init the transaction&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&lt;span class="kwrd"&gt;bool&lt;/span&gt; fSuccess = refTC.BeginTransaction();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (fSuccess)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;fSuccess = refTC.CopyFile(&lt;span class="str"&gt;"d:\\transcopy.pdb"&lt;/span&gt;, &lt;span class="str"&gt;"d:\\t.pdb"&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (fSuccess)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;fSuccess = refTC.Commit();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (fSuccess)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;Console.WriteLine(&lt;span class="str"&gt;"Copy successful!"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;ShowErrorAndExit(&lt;span class="str"&gt;"Commit failed!"&lt;/span&gt;, refTC.LastError);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;ShowErrorAndExit(&lt;span class="str"&gt;"Copy failed!"&lt;/span&gt;, refTC.LastError);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;ShowErrorAndExit(&lt;span class="str"&gt;"Unable to start the transaction!"&lt;/span&gt;, refTC.LastError);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ShowErrorAndExit(&lt;span class="kwrd"&gt;string&lt;/span&gt; p, &lt;span class="kwrd"&gt;int&lt;/span&gt; p_2)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;Console.WriteLine(&lt;span class="str"&gt;"ERROR: {0}"&lt;/span&gt;, p);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;Console.WriteLine(&lt;span class="str"&gt;"CODE: {0}"&lt;/span&gt;, p_2);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;System.Environment.Exit(1);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110230"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110230" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/khanna/aggbug/110230.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gaurav Khanna [gaurav@wintoolzone.com]</dc:creator>
            <guid>http://geekswithblogs.net/khanna/archive/2007/03/29/110230.aspx</guid>
            <pubDate>Thu, 29 Mar 2007 20:49:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/khanna/archive/2007/03/29/110230.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/khanna/comments/commentRss/110230.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/khanna/services/trackbacks/110230.aspx</trackback:ping>
        </item>
        <item>
            <title>Article: Customizing AppDomain Creation</title>
            <link>http://geekswithblogs.net/khanna/archive/2007/03/29/110229.aspx</link>
            <description>&lt;p&gt;Did you have a scenario where you wished you could customize the creation of &lt;em&gt;AppDomains? &lt;/em&gt;Or, you could control how many &lt;em&gt;AppDomains &lt;/em&gt;any code that runs in your application context (e.g. if you are writing a plugin load framework) could create? Or, how about reusing &lt;em&gt;AppDomains &lt;/em&gt;for various assemblies?&lt;/p&gt; &lt;p&gt;I have just finished an article on how any of the above scenarios can be accomplished using the &lt;em&gt;System.AppDomainManager &lt;/em&gt;type, introduced in .NET Framework 2.0, by intercept &lt;em&gt;AppDomain &lt;/em&gt;creation requests.&lt;/p&gt; &lt;p&gt;You can read the article at &lt;a title="Customizing_AppDomain_Creation.aspx" href="http://www.wintoolzone.com/articles/Customizing_AppDomain_Creation.aspx" target="_blank"&gt;http://www.wintoolzone.com/articles/Customizing_AppDomain_Creation.aspx&lt;/a&gt;&amp;nbsp;and download associated source code from &lt;a title="Customizing_AppDomain_Creation_src.zip" href="http://www.wintoolzone.com/downloads/Customizing_AppDomain_Creation_src.zip" target="_blank"&gt;http://www.wintoolzone.com/downloads/Customizing_AppDomain_Creation_src.zip&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110229"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=110229" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/khanna/aggbug/110229.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gaurav Khanna [gaurav@wintoolzone.com]</dc:creator>
            <guid>http://geekswithblogs.net/khanna/archive/2007/03/29/110229.aspx</guid>
            <pubDate>Thu, 29 Mar 2007 20:47:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/khanna/archive/2007/03/29/110229.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/khanna/comments/commentRss/110229.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/khanna/services/trackbacks/110229.aspx</trackback:ping>
        </item>
    </channel>
</rss>