<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.iis.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:cs="http://blogs.iis.net/"><channel><title>Eok&amp;#39;s Blog</title><link>http://blogs.iis.net/eokim/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Debug Build: 20510.895)</generator><item><title>IIISVersionManager for IIS Express</title><link>http://blogs.iis.net/eokim/archive/2012/06/07/iiisversionmanager-for-iis-express.aspx</link><pubDate>Thu, 07 Jun 2012 19:58:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:4978114</guid><dc:creator>eokim</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/eokim/rsscomments.aspx?PostID=4978114</wfw:commentRss><comments>http://blogs.iis.net/eokim/archive/2012/06/07/iiisversionmanager-for-iis-express.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;IIISVersionManager is a Component Object Model ( COM ) comes with IIS Express. It is documented at &lt;A href="http://msdn.microsoft.com/en-us/library/gg418429(v=vs.90)" mce_href="http://msdn.microsoft.com/en-us/library/gg418429(v=vs.90)"&gt;MSDN&lt;/A&gt;, however, I feel we do not have enough sample code.&lt;/P&gt;
&lt;P&gt;For this blog, I would like to introduce some sample code that you can leverage it for your project.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Please note that this interface is not most likely needed if IIS Express is used by well-known IDE. However, if you wish to write your own tool and use IIS Express as development Web engine, then you may be interested in using this APIs.&lt;/B&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="file:///C:/Users/eokim/Documents/work/iisexpress/.%20http:/msdn.microsoft.com/en-us/library/gg418414(v=vs.90)" mce_href="file:///C:/Users/eokim/Documents/work/iisexpress/.%20http:/msdn.microsoft.com/en-us/library/gg418414(v=vs.90)"&gt;The CoClass of this COM is IIISVersionManager&lt;/A&gt;, and its ProgID is Microsoft.IIS.VersionManager.&lt;/P&gt;
&lt;P&gt;Its responsibility is to create &lt;A href="file:///C:/Users/eokim/Documents/work/iisexpress/.%20http:/msdn.microsoft.com/en-us/library/gg418416(v=vs.90)" mce_href="file:///C:/Users/eokim/Documents/work/iisexpress/.%20http:/msdn.microsoft.com/en-us/library/gg418416(v=vs.90)"&gt;an instance of IIISVersion&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;HRESULT&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetVersionObject(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [in, string] BSTR&amp;nbsp; bstrVersion,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [in] IIS_PRODUCT_TYPE dwProductType,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [out, retval] IIISVersion ** ppElement&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/P&gt;
&lt;P&gt;Give version string and product type, it returns an instance of IIISVersion.&lt;/P&gt;
&lt;P&gt;It sounds like there might be multiple versions of IIS product coexist in a system. However, we actually get either Full IIS ( i.e. IIS comes with Windows ) and/or a single version of IIS Express.&lt;/P&gt;
&lt;P&gt;If you look at &lt;A href="http://msdn.microsoft.com/en-us/library/gg418427(v=vs.90)" mce_href="http://msdn.microsoft.com/en-us/library/gg418427(v=vs.90)"&gt;IIS_PRODUCT_TYPE&lt;/A&gt; enum, there are two valid enum values; IIS_PRODUCT_OS_SERVICE, IIS_PRODUCT_EXPRESS.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Ex 1)&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Let's start with sample code which creates an instance of IISVersionManager and IIISVersion, and query some information.&lt;/P&gt;
&lt;P&gt;For this blog, I used JScript. However, you know this is COM, so you can use any COM client codes; .NET Interoperability, C++, and etc.&lt;/P&gt;
&lt;P&gt;&lt;I&gt;var versionManager = new ActiveXObject("Microsoft.IIS.VersionManager"); &lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;var versionObj = versionManager.GetVersionObject( &amp;nbsp;"8.0", &amp;nbsp;// version&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;2 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // IIS_PRODUCT_EXPRESS&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;var installPath = versionObj.GetPropertyValue( "installPath" );&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;var version = versionObj.GetPropertyValue( "version" );&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;WScript.Echo( "version: " + version + ", installPath: " + installPath );&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;RESULT: &amp;nbsp;version: 8.0, installPath: C:\Program Files\IIS Express&lt;/B&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Ex 2)&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;GetPropertyValue is an interesting &lt;A href="http://msdn.microsoft.com/en-us/library/gg429838(v=vs.90)" mce_href="http://msdn.microsoft.com/en-us/library/gg429838(v=vs.90)"&gt;interface&lt;/A&gt; from IIISVersion object, which return anything, you know what VARIANT means :), from a given property key string.&lt;/P&gt;
&lt;P&gt;HRESULT&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetPropertyValue(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [in, string]&amp;nbsp; BSTR bstrName,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [out, retval] VARIANT * pvarValue&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/P&gt;
&lt;P&gt;Some of key properties return merely metadata, as shown in above code sample.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Let's see another sample code which obtains some runtime information.&lt;/P&gt;
&lt;P&gt;First, you should start IIS Express. For this particular example, we use command line to start IIS Express.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;C:\Program Files\IIS Express&amp;gt;iisexpress.exe&lt;/P&gt;
&lt;P&gt;Starting IIS Express ...&lt;/P&gt;
&lt;P&gt;Successfully registered URL "http://localhost:8080/" for site "WebSite1" application "/"&lt;/P&gt;
&lt;P&gt;Registration completed for site "WebSite1"&lt;/P&gt;
&lt;P&gt;IIS Express is running.&lt;/P&gt;
&lt;P&gt;Enter 'Q' to stop IIS Express&lt;/P&gt;
&lt;P&gt;&lt;I&gt;&lt;/I&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;var versionManager = new ActiveXObject("Microsoft.IIS.VersionManager"); &lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;var versionObj = versionManager.GetVersionObject( "8.0", 2 );&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;// Get IIISExpressProcessUtility instance. http://msdn.microsoft.com/en-us/library/gg418413(v=vs.90) &lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;var processUtil = versionObj.GetPropertyValue( "expressProcessHelper" );&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;// Find IIS Express process ID running with Site: WebSite1 and Application Pool: Clr4IntegratedAppPool&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;var pid = processUtil.GetRunningProcessForSite( "WebSite1", "", "Clr4IntegratedAppPool", "" );&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;// Get IIISUserData instance. http://msdn.microsoft.com/en-us/library/gg418417(v=vs.90)&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;var userData = versionObj.GetPropertyValue( "userInstanceHelper" );&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;var userDir = userData.IISDirectory&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;WScript.Echo( "IIS Express running " + "WebSite1, " + "Pid: " + pid + ", User Directory: " + userDir );&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;RESULT: IIS Express running WebSite1, Pid: 3068, User Directory: C:\Users\tim\Documents\IISExpress&lt;/B&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Ex 3)&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;IIS Express ships with some &lt;A href="http://msdn.microsoft.com/en-us/library/ms973913.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms973913.aspx"&gt;registry-free COM&lt;/A&gt;. &lt;A href="http://msdn.microsoft.com/en-us/library/gg418430(v=vs.90)#Y0" mce_href="http://msdn.microsoft.com/en-us/library/gg418430(v=vs.90)#Y0"&gt;We can create those via CreateObjectFromProgId&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;HRESULT&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CreateObjectFromProgId(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [in, string] BSTR bstrObjectName,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [out, retval] VARIANT * pObject&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The first parameter is ProgID which we wish to create an instance.&lt;/P&gt;
&lt;P&gt;Here is sample code.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;var versionManager = new ActiveXObject("Microsoft.IIS.VersionManager"); &lt;/P&gt;
&lt;P&gt;// Gets IIS Express version object&lt;/P&gt;
&lt;P&gt;var versionObj = versionManager.GetVersionObject( "8.0", 2 );&lt;/P&gt;
&lt;P&gt;// Create AhAdmin instance of IIS Express&lt;/P&gt;
&lt;P&gt;var iisExpressAdminMgr = versionObj.CreateObjectFromProgId("Microsoft.ApplicationHost.AdminManager");&lt;/P&gt;
&lt;P&gt;// Read user profile configuration.&lt;/P&gt;
&lt;P&gt;var defDocSection = iisExpressAdminMgr.GetAdminSection("system.webServer/defaultDocument", "MACHINE/WEBROOT/APPHOST/WebSite1");&lt;/P&gt;
&lt;P&gt;var property = defDocSection.GetPropertyByName("enabled");&lt;/P&gt;
&lt;P&gt;WScript.Echo( "defaultDocument at WebSite1 is " + ( property ? "enabled" : "disabled" ) );&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;RESULT: defaultDocument at WebSite1 is enabled&lt;/B&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note that this is a Microsoft.ApplicationHost.AdminManager instance of IIS Express, which reads configuration defined at user profile directory. For more information about Microsoft.ApplicationHost.AdminManager, you can refer to &lt;A href="http://blogs.iis.net/ksingla/archive/2007/02/25/using-ahadmin-to-read-write-iis-configuration-part-1.aspx" mce_href="http://blogs.iis.net/ksingla/archive/2007/02/25/using-ahadmin-to-read-write-iis-configuration-part-1.aspx"&gt;here&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;The main difference between two is which configuration file it reads. The full IIS deals with single one &amp;nbsp;per system typically located at %windir%\system32\inetsrv\config, but the IIS Express deals with one located at user profile.&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=4978114" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/eokim/archive/tags/IIISVersionManager/default.aspx">IIISVersionManager</category><category domain="http://blogs.iis.net/eokim/archive/tags/IIS+Express/default.aspx">IIS Express</category></item><item><title>Understanding appcmd.exe [list|set] config [ConfigurationPath] /section:name /parameter_name:value</title><link>http://blogs.iis.net/eokim/archive/2010/06/02/understanding-appcmd-exe-list-set-config-configurationpath-section-name-parameter-name-value.aspx</link><pubDate>Wed, 02 Jun 2010 21:00:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3893390</guid><dc:creator>eokim</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/eokim/rsscomments.aspx?PostID=3893390</wfw:commentRss><comments>http://blogs.iis.net/eokim/archive/2010/06/02/understanding-appcmd-exe-list-set-config-configurationpath-section-name-parameter-name-value.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To use appcmd efficiently for setting/listing configuration, we need to understand how we pass parameter. This requires us to be familiar with some syntax to edit attribute located at section, child element or&amp;nbsp;collection element.&lt;/P&gt;
&lt;P&gt;In this blog, we will go over those with examples.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1.Basic command string&lt;/P&gt;
&lt;P&gt;Here is how basic command string looks like.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;appcmd.exe [list|set] config [ConfigurationPath] /section:name /parameter_name:value&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;In plain English, it says that we retrieve or edit configuration of a specific section&amp;nbsp;defined at specific configuration path. To illustrate examples, we are using &lt;A href="http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering" mce_href="http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering"&gt;system.webServer/security/requestFiltering&lt;/A&gt; section.&lt;/P&gt;
&lt;P&gt;This is good example since this section has attribute at section, child element, and collection element, so we can go over each one.&lt;/P&gt;
&lt;P&gt;Here is part of schema.&lt;/P&gt;
&lt;P&gt;&amp;lt;sectionSchema name="system.webServer/security/requestFiltering"&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name="allowDoubleEscaping" type="bool" defaultValue="false" /&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name="allowHighBitCharacters" type="bool" defaultValue="true" /&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name="unescapeQueryString" type="bool" defaultValue="true" /&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;element name="fileExtensions"&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name="allowUnlisted" type="bool" defaultValue="true" /&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name="applyToWebDAV" type="bool" defaultValue="true" /&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;collection addElement="add" clearElement="clear" removeElement="remove" &amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name="fileExtension" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" /&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name="allowed" type="bool" required="true" defaultValue="true" /&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/collection&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/element&amp;gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/P&gt;
&lt;P&gt;&amp;lt;/sectionSchema&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2. Edit attribute&lt;/P&gt;
&lt;P&gt;From the schema, attribute is defined at 1) section (&lt;EM&gt;system.webServer/security/requestFiltering&lt;/EM&gt;), 2) child elemement (&lt;EM&gt;fileExtensions&lt;/EM&gt;), and 3) collection element (&lt;EM&gt;add&lt;/EM&gt;).&lt;/P&gt;
&lt;P&gt;The following examples show how to edit each one.&lt;/P&gt;
&lt;P&gt;2.1 Edit attribute at section&lt;/P&gt;
&lt;P&gt;&lt;B&gt;C:\Windows\System32\inetsrv&amp;gt;appcmd set config "Default Web Site" /section:system.webServer/security/requestFiltering /allowDoubleEscaping:false&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;This example will set attribute &lt;I&gt;allowDoubleEscaping&lt;/I&gt; to false on section &lt;I&gt;system.webServer/security/requestFiltering&lt;/I&gt; located at configuration path MACHINE/WEBROOT/APPHOST/Default Web Site.&lt;/P&gt;
&lt;P&gt;After run command sussessfully, the web.config on site will add the following configuration.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;lt;security&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;STRONG&gt;requestFiltering allowDoubleEscaping="false"&lt;/STRONG&gt; /&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;lt;/security&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can also delete attribute on element&amp;nbsp; by using set with ‘&lt;B&gt;-&lt;/B&gt;‘ notation.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;C:\Windows\System32\inetsrv&amp;gt;appcmd set config "Default Web Site" /section:system.webServer/security/requestFiltering /-allowDoubleEscaping&lt;/B&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2.2 Edit attribute on child element of section&lt;/P&gt;
&lt;P&gt;&lt;B&gt;C:\Windows\System32\inetsrv&amp;gt;appcmd set config "Default Web Site" /section:system.webServer/security/requestFiltering /fileExtensions.allowUnlisted:false&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;This example shows setting attribute on child element of the section. In order to access child element, appcmd introduces ‘&lt;B&gt;.&lt;/B&gt;' (dot) notation to specify the attribute defined at the child element&lt;/P&gt;
&lt;P&gt;You can also pass multiple parameters to edit multiple attributes.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;C:\Windows\System32\inetsrv&amp;gt;appcmd set config "Default Web Site" /section:system.webServer/security/requestFiltering /fileExtensions.allowUnlisted:false /fileExtensions.applyToWebDAV:false&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Once command run successfully, web.config will look like the following.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;lt;security&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;requestFiltering allowDoubleEscaping="false"&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;STRONG&gt;fileExtensions allowUnlisted="false" applyToWebDAV="false"&lt;/STRONG&gt; /&amp;gt; &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/requestFiltering&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;lt;/security&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2.3 edit attribute on collection element&lt;/P&gt;
&lt;P&gt;&lt;B&gt;C:\Windows\System32\inetsrv&amp;gt;appcmd set config "Default Web Site" /section:system.webServer/security/requestFiltering /fileExtensions.[fileExtension='.text'].allowed:false&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;This example shows setting attribute on collection element. &lt;/P&gt;
&lt;P&gt;There could be multiple entries in collection element. So, the command first finds the element to edit, and then set attribute. That requires square bracket ‘&lt;B&gt;[]&lt;/B&gt;' syntax. &lt;I&gt;/fileExtensions.[fileExtension='.text']&lt;/I&gt; will tell you to find an entry having fileExtension ‘.text' under fileExtensions element, and set &lt;I&gt;allowed&lt;/I&gt; attribute to false.&lt;/P&gt;
&lt;P&gt;This will change web.config like below. Note that we need an entry before run this command. &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;lt;security&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;requestFiltering allowDoubleEscaping="false"&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;fileExtensions allowUnlisted="false" applyToWebDAV="false"&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add fileExtension=".text" &lt;STRONG&gt;allowed="false"&lt;/STRONG&gt; /&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/fileExtensions&amp;gt; &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/requestFiltering&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/security&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;3. Collection element&lt;/P&gt;
&lt;P&gt;3.1 Add collection element&lt;/P&gt;
&lt;P&gt;&lt;B&gt;C:\Windows\System32\inetsrv&amp;gt;appcmd set config "Default Web Site" /section:system.webServer/security/requestFiltering /+fileExtensions.[fileExtension='.test',allowed='true'] /+fileExtensions.[fileExtension='.test2',allowed='true']&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;This example shows adding collection element with attributes.&lt;/P&gt;
&lt;P&gt;set command can add collection element. Note that verb ‘add' is not applicable with config object. We still need verb ‘set' with ‘&lt;B&gt;+&lt;/B&gt;' notation to indicate adding a collection element, and use &lt;B&gt;[]&lt;/B&gt; to put attributes for this collection element. You can put multiple parameters to add multiple collection elements.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;lt;security&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;requestFiltering allowDoubleEscaping="false"&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;fileExtensions allowUnlisted="false" applyToWebDAV="false"&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;&amp;lt;add fileExtension=".test" allowed="true" /&amp;gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&amp;lt;add fileExtension=".test2" allowed="true" /&amp;gt; &lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/fileExtensions&amp;gt; &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/requestFiltering&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;lt;/security&amp;gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;3.2. Delete collection element&lt;/P&gt;
&lt;P&gt;&lt;B&gt;C:\Windows\System32\inetsrv&amp;gt;appcmd set config "Default Web Site" /section:system.webServer/security/requestFiltering /-fileExtensions.[fileExtension='.test']&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;set command also deletes a collection element. Again, note that verb ‘delete' is not applicable with config object. We still need verb ‘set' with ‘&lt;STRONG&gt;-&lt;/STRONG&gt;' notation to indicate deleting a collection element, and use [] to find which one to delete.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Reference&lt;/P&gt;
&lt;P&gt;1. &lt;A href="http://learn.iis.net/page.aspx/114/getting-started-with-appcmdexe/" mce_href="http://learn.iis.net/page.aspx/114/getting-started-with-appcmdexe/"&gt;Getting Started with AppCmd.exe&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;2. &lt;A href="http://www.amazon.com/Internet-Information-Services-IIS-Resource/dp/0735624410" mce_href="http://www.amazon.com/Internet-Information-Services-IIS-Resource/dp/0735624410"&gt;Internet Information Services (IIS) 7.0 Resource Kit&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;3. &lt;SPAN&gt;&lt;A href="http://learn.iis.net/page.aspx/417/using-configuration-editor-generate-scripts/" mce_href="http://learn.iis.net/page.aspx/417/using-configuration-editor-generate-scripts/"&gt;Using Configuration Editor: Generate Scripts&lt;/A&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3893390" width="1" height="1"&gt;</description></item><item><title>ARR with Tomcat</title><link>http://blogs.iis.net/eokim/archive/2010/03/09/arr-with-tomcat.aspx</link><pubDate>Tue, 09 Mar 2010 21:41:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3722102</guid><dc:creator>eokim</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/eokim/rsscomments.aspx?PostID=3722102</wfw:commentRss><comments>http://blogs.iis.net/eokim/archive/2010/03/09/arr-with-tomcat.aspx#comments</comments><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Recently I have seen forum posts regarding how to set up Tomcat 6 as Java Servlet/JSP container with IIS 7 as a web server. When I read trough&amp;nbsp;the &lt;A href="http://tomcat.apache.org/connectors-doc/webserver_howto/iis.html" mce_href="http://tomcat.apache.org/connectors-doc/webserver_howto/iis.html"&gt;doc&lt;/A&gt;, it&amp;nbsp;requires quite &lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-fareast-font-family: 'Malgun Gothic'; mso-fareast-theme-font: minor-fareast; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA"&gt;cumbersome steps required to configure.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The basic&amp;nbsp;idea is that we want to use IIS 7 as a native web server in front end and put Tomcat as application server to handle Servlet and JSP request in back end. The Servlet/JSP needs to run in JVM, which is not directly executable in native web server address apace. Other non-Java based web server is pretty much the same story. Ex) apache jk mod.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;We need a mediator who can determine whether the request is for Servlet/JSP, and route it to the application server, and send back to the client. In other words, the front end web server 1) receives a client request, and 2) forwards Servlet/JSP request to Tomcat which generates content, and finally 3) delivers the response back to a client. The classic solution is JK Connector which uses &lt;EM&gt;ISAPI filter&lt;/EM&gt; and configures through &lt;EM&gt;.properies&lt;/EM&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;IIS 7 offers a better solution; &lt;A href="http://www.iis.net/expand/ApplicationRequestRouting" mce_href="http://www.iis.net/expand/ApplicationRequestRouting"&gt;Application Request Routing&lt;/A&gt; (ARR).&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;U&gt;At your application server:&lt;/U&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face=Calibri&gt;Install the &lt;A href="http://tomcat.apache.org/download-60.cgi" mce_href="http://tomcat.apache.org/download-60.cgi"&gt;Tomcat 6&lt;/A&gt; and &lt;A href="http://www.java.com/en/download/inc/windows_new_ie.jsp" mce_href="http://www.java.com/en/download/inc/windows_new_ie.jsp"&gt;JRE 6&lt;/A&gt; on the application server. &lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;U&gt;At ARR server:&lt;/U&gt;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Install &lt;A href="http://learn.iis.net/page.aspx/482/install-application-request-routing/" mce_href="http://learn.iis.net/page.aspx/482/install-application-request-routing/"&gt;ARR&lt;/A&gt; and do basic &lt;A href="http://learn.iis.net/page.aspx/485/define-and-configure-an-application-request-routing-server-farm/" mce_href="http://learn.iis.net/page.aspx/485/define-and-configure-an-application-request-routing-server-farm/"&gt;configuration&lt;/A&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The basic configuration is as simple as adding Tomcat server into server farm. The rest is taken care of by ARR and URL Rewrite. Note that the default port is 8080 when installs Tomcat server, so you need to expalnd "Advanced Settings" and set the correct port when adds server.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;IMG src="http://blogs.iis.net/blogs/eokim/arr_addserver.jpg" mce_src="http://blogs.iis.net/blogs/eokim/arr_addserver.jpg"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Comparing with JK Connector solution, it is pretty simple and neat configuration to make it work. You do not need ISAPI filter (Isapi_redirect.dll) and .properties files (isapi_redirect.properties, workers.properties, uriworkermap.properties). And, the combination of ARR and &lt;A href="http://www.iis.net/expand/URLRewrite" mce_href="http://www.iis.net/expand/URLRewrite"&gt;URL Rewrite&lt;/A&gt; provides much more powerful solution. &lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3722102" width="1" height="1"&gt;</description></item><item><title>Consume IIS ETW tracing</title><link>http://blogs.iis.net/eokim/archive/2009/05/15/consume-iis-etw-tracing.aspx</link><pubDate>Fri, 15 May 2009 15:52:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3165655</guid><dc:creator>eokim</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/eokim/rsscomments.aspx?PostID=3165655</wfw:commentRss><comments>http://blogs.iis.net/eokim/archive/2009/05/15/consume-iis-etw-tracing.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Event Tracing for Windows (ETW) is wonderful mechanism to monitor, log and trouble shoot of your application. IIS is an ETW &lt;I&gt;provider&lt;/I&gt; to help us out to do those activities. In this blog, I want to share how to retrieve events which IIS writes, from 1) IIS module and 2) out-of-module.&lt;/P&gt;
&lt;P&gt;Before start, we need to know how IIS module writes events; &lt;A href="http://blogs.iis.net/ksingla/archive/2009/01/01/generating-trace-information-in-native-modules.aspx" mce_href="http://blogs.iis.net/ksingla/archive/2009/01/01/generating-trace-information-in-native-modules.aspx"&gt;Generating trace information in native modules&lt;/A&gt;.&amp;nbsp; This very neat blog explains how you raise event from native module and see the result from Failed Request Tracing Rules (FRED). And, we can retrieve or consume those events from other channel.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1. Inside IIS module&lt;/P&gt;
&lt;P&gt;If you want to retrieve event from your module, it is easy. You can write the native module registering GL_TRACE_EVENT and implementing CGlobalModule::OnGlobalTraceEvent(). Then, you will obtain HTTP_TRACE_EVENT from IGlobalTraceEventProvider:: GetTraceEvent() when someone raises event.&amp;nbsp; HTTP_TRACE_EVENT should look familiar to you if you read the blog how to generate trace information. It is the same struct we use to raise event. Yes, if you're inside module, you can get what you write in the same format. Convenient, isn't it?&lt;/P&gt;
&lt;P&gt;GLOBAL_NOTIFICATION_STATUS TestModule::OnGlobalTraceEvent(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IN IGlobalTraceEventProvider* pProvider ) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTTP_TRACE_EVENT* pHttp_trace_event = NULL;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HRESULT hr = pProvider-&amp;gt;GetTraceEvent(&amp;amp;pHttp_trace_event);&lt;/P&gt;
&lt;P&gt;...&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2. Outside IIS module&lt;/P&gt;
&lt;P&gt;OK, let's switch gear to see whether we can consume those events out of IIS. Basically, you need ETW &lt;I&gt;consumer&lt;/I&gt; to consume events IIS writes. In this context, IIS is ETW provider, and your application is ETW consumer, and also you need start ETW session. Sounds a bit more complex than the previous case, but you need basic understanding of wonderful ETW mechanism.&amp;nbsp; For detail about ETW, you can refer to &lt;A href="http://msdn.microsoft.com/en-us/library/bb968803.aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb968803.aspx"&gt;MSDN&lt;/A&gt; and read article; &lt;A href="http://msdn.microsoft.com/en-us/magazine/dvdarchive/cc163437.aspx" mce_href="http://msdn.microsoft.com/en-us/magazine/dvdarchive/cc163437.aspx"&gt;Improve Debugging And Performance Tuning With ETW&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Let us write a simple &lt;I&gt;real time&lt;/I&gt; ETW consumer console application to see how it works.&lt;/P&gt;
&lt;P&gt;First, we need to initialize EVENT_TRACE_LOGFILE to call OpenTrace() which returns TRACEHANDLE.&lt;/P&gt;
&lt;P&gt;...&lt;/P&gt;
&lt;P&gt;#define IIS_WWW_SERVER L"iis_www_server"&lt;/P&gt;
&lt;P&gt;static const GUID TraceProviderGuid =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {0x3a2a4e84,0x4c21,0x4981,{0xae,0x10,0x3f,0xda,0x0d,0x9b,0x0f,0x83}};&lt;BR&gt;static const GUID TraceAreaGuid =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {0x528dbd54,0x1b68,0x4f58,{0xa8,0xc0,0xb3,0x92,0xdf,0x6d,0xf0,0xc9}};&lt;/P&gt;
&lt;P&gt;...&lt;/P&gt;
&lt;P&gt;HRESULT hResult = S_OK;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwResult = ERROR_SUCCESS;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EVENT_TRACE_LOGFILE evtLogFile;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::ZeroMemory( &amp;amp;evtLogFile, sizeof(EVENT_TRACE_LOGFILE) );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TRACEHANDLE hTrace = NULL;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Initialize&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.LogFileName = NULL;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set ETW session name to consume&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.LoggerName = IIS_WWW_SERVER;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.CurrentTime = 0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.BuffersRead = 0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // real time mode and use EventRecordCallback&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.ProcessTraceMode = PROCESS_TRACE_MODE_REAL_TIME | PROCESS_TRACE_MODE_EVENT_RECORD;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // register buffer callback&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.BufferCallback = BuffCallback;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.BufferSize = 0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.Filled = 0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.EventsLost = 0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // register record callback function&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.EventRecordCallback = EvtRecCallback;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set context will get in the callback function if needed&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; evtLogFile.Context = NULL;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // obtain trace handle&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hTrace = ::OpenTrace( &amp;amp;evtLogFile );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( hTrace == (TRACEHANDLE)INVALID_HANDLE_VALUE ) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L"FAIL: OpenTrace() [%x]\n", ::GetLastError() );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hResult = HRESULT_FROM_WIN32( ::GetLastError() );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hTrace = NULL;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Finished;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This code snippet shows how to call OpenTrace() with real time mode and register EventRecordCallback function. &amp;nbsp;If call successful, it return TRACEHANDLE which is required to call ProcessTrace(). To consume real time events, we need to set a specific session name which is created by Reliability and Performance Monitor tool. To create and start an IIS event session, you can refer to another nice blog; &lt;A href="http://blogs.msdn.com/danielvl/archive/2009/01/25/view-etw-rewrite-events.aspx" mce_href="http://blogs.msdn.com/danielvl/archive/2009/01/25/view-etw-rewrite-events.aspx"&gt;How to display URL Rewrite ETW Events in the Event Viewer&lt;/A&gt;. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once we get TRACEHANDLE, the next step is to call ProcessTrace().&lt;/P&gt;
&lt;P&gt;// start consuming events&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dwResult = ::ProcessTrace(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;hTrace,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( dwResult != ERROR_SUCCESS ) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L"FAIL: ProcessTrace() [%x]\n", ::GetLastError() );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hResult = HRESULT_FROM_WIN32( ::GetLastError() );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Finished;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ProcessTrace() blocks current execution and sits there until session ends or BufferCallback returns FALSE. In meanwhile, your registered event call back function is invoked whenever event is available in session buffer.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;OK, let's take a look the event call back function which requires the following function signature;&lt;/P&gt;
&lt;P&gt;VOID WINAPI EvtRecCallback(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __in&amp;nbsp; PEVENT_RECORD pEvtRecord);&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As you can see, the callback function get EVENT_RECORD as a parameter and optionally you can get UserContext if you set it on OpenTrace(). We do not set context in this example. Implementation of EventRecordCallback consumes trace event. Unlike OnGlobalTraceEvent(), we won't get what we write in the same format.&amp;nbsp; In other words, we created and populated HTTP_TRACE_EVENT to raise event, but we do not get the same struct when retrieves. &amp;nbsp;We need a bit work using Trace Data Helper API (TDH). Let's implement the callback.&lt;/P&gt;
&lt;P&gt;First, we need obtain TRACE_EVENT_INFO from EVENT_RECORD using TdhGetEventInformation().&lt;/P&gt;
&lt;P&gt;ULONG ulResult = ERROR_SUCCESS;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const DWORD BUF_SIZE = 1024;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwBufferSize = sizeof(TRACE_EVENT_INFO) + BUF_SIZE;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE pBuffer[sizeof(TRACE_EVENT_INFO) + BUF_SIZE];&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::ZeroMemory( pBuffer, dwBufferSize);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTRACE_EVENT_INFO pTraceEventInfo = NULL;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTraceEventInfo = reinterpret_cast&amp;lt;PTRACE_EVENT_INFO&amp;gt;(pBuffer);&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // obtain TRACE_EVENT_INFO&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ulResult = ::TdhGetEventInformation(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pEvtRecord,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTraceEventInfo,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;dwBufferSize);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( ulResult != ERROR_SUCCESS ) {&amp;nbsp;&amp;nbsp; // ignore error handling, retry etc for simplicity&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L"FAIL: TdhGetEventInformation() [%x]\n", ulResult );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Finished;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once we get TRACE_EVENT_INFO, optionally we can filter out events we're not interested. Without filtering, you may get huge list of events depending on how you set Keywords when creates a session.&amp;nbsp; For this example, we can take events only which our provider and area produces. &lt;/P&gt;
&lt;P&gt;// check GUID to see whether it is interesting event&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fResult = &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::IsEqualGUID(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TraceProviderGuid,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTraceEventInfo-&amp;gt;ProviderGuid) &amp;amp;&amp;amp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::IsEqualGUID(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TraceAreaGuid,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTraceEventInfo-&amp;gt;EventGuid);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !fResult ) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L"SKIP: Not our event\n" );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Finished;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;You can also obtain other information from TRACE_EVENT_INFO, such as Event ID, verbosity, etc.&lt;/P&gt;
&lt;P&gt;Note that getting property information means getting event data we set into HTTP_TRACE_EVENT_ITEM. Now, it is time to retrieve event data. &lt;/P&gt;
&lt;P&gt;LPWSTR pszPropertyName = NULL;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PEVENT_PROPERTY_INFO pEventPropertyInfo = NULL;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE pPropertyBuffer[BUF_SIZE];&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PROPERTY_DATA_DESCRIPTOR propertyDataDesc;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // iterate thru each event data(HTTP_TRACE_EVENT_ITEM) and retrieve data&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (DWORD index = 0; index &amp;lt; pTraceEventInfo-&amp;gt;TopLevelPropertyCount; index++) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pEventPropertyInfo = &amp;amp;pTraceEventInfo-&amp;gt;EventPropertyInfoArray[index];&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L"\t--- EVENT_PROPERTY_INFO ---\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // HTTP_TRACE_EVENT_ITEM.pszName&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pszPropertyName = (LPWSTR)((PBYTE)pTraceEventInfo + pEventPropertyInfo-&amp;gt;NameOffset);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L"\tPropertyName: %ws\n",&amp;nbsp; pszPropertyName);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // HTTP_TRACE_EVENT_ITEM.cbData&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L"\tLength: %d\n",&amp;nbsp; pEventPropertyInfo-&amp;gt;length);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // HTTP_TRACE_EVENT_ITEM.dwDataType&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L"\tInType: %u\n",&amp;nbsp; pEventPropertyInfo-&amp;gt;nonStructType.InType);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::ZeroMemory( pPropertyBuffer, BUF_SIZE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; propertyDataDesc.PropertyName = reinterpret_cast&amp;lt;ULONGLONG&amp;gt;(pszPropertyName);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; propertyDataDesc.ArrayIndex = ULONG_MAX;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // // HTTP_TRACE_EVENT_ITEM. pbData&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ulResult = ::TdhGetProperty(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pEvtRecord,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;propertyDataDesc,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BUF_SIZE,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pPropertyBuffer); &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( ulResult != ERROR_SUCCESS ) {&amp;nbsp;&amp;nbsp; // ignore error handling and retry etc for simplicity&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L"FAIL: TdhGetProperty() [%x]\n", ulResult );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // now do whatever you want with pPropertyBuffer&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // pEventPropertyInfo-&amp;gt;nonStructType.InType provides type information for the buffer&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // so, you need to cast it accodingly&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To run this, you should start session first with real-mode, and then start your application, and then shoot the HTTP request. &lt;/P&gt;
&lt;P&gt;If you installed Windows SDK 6.1, then you can find more ETW example code at %Program Files%\Microsoft SDKs\Windows\v6.1\Samples\WinBase\eventtrace.&lt;/P&gt;
&lt;P&gt;Armed with this basic knowledge, you can write your own ETW logging/monitoring tool for your module. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;There is also another blog consuming event you can refer to; &lt;A href="http://blogs.msdn.com/danielvl/archive/2009/02/02/how-to-consume-etw-events-from-c.aspx" mce_href="http://blogs.msdn.com/danielvl/archive/2009/02/02/how-to-consume-etw-events-from-c.aspx"&gt;How to consume ETW events from C#&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Hope this helps. Thanks&lt;/P&gt;
&lt;P&gt;Eok.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3165655" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/eokim/archive/tags/iis+etw+tdh/default.aspx">iis etw tdh</category></item><item><title>URL Rewrite module; Basic Understanding of rule</title><link>http://blogs.iis.net/eokim/archive/2008/06/05/url-rewrite-module-basic-understanding-lt-rule-gt.aspx</link><pubDate>Thu, 05 Jun 2008 16:39:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2404470</guid><dc:creator>eokim</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/eokim/rsscomments.aspx?PostID=2404470</wfw:commentRss><comments>http://blogs.iis.net/eokim/archive/2008/06/05/url-rewrite-module-basic-understanding-lt-rule-gt.aspx#comments</comments><description>&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;This article&amp;nbsp;explains how &amp;lt;match/&amp;gt;, &amp;lt;conditions/&amp;gt; and &amp;lt;action/&amp;gt; work together in URL Rewrite module, and how they are defined in URL Rewrite module schema; rewrite_schema.xml. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Prerequisite: &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;It is better to read these walkthrough for this blog.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;A href="http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-url-rewrite-module/"&gt;&lt;FONT face=Calibri size=3&gt;http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-url-rewrite-module/&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;A href="http://learn.iis.net/page.aspx/468/using-global-and-distributed-rewrite-rules/"&gt;&lt;FONT face=Calibri size=3&gt;http://learn.iis.net/page.aspx/468/using-global-and-distributed-rewrite-rules/&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;In short, URL Rewrite performs &amp;lt;action/&amp;gt; with a given input url based on &amp;lt; match /&amp;gt; and &amp;lt;conditions/&amp;gt; defined in configuration.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;&amp;lt; match /&amp;gt; examines whether input url is matched against pattern.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Once &amp;lt;rule/&amp;gt; is matched, the module examines &amp;lt;conditions/&amp;gt; to see whether they are satisfied.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;If &amp;lt;conditions/&amp;gt; is satisfied, then finally &amp;lt;action/&amp;gt; is performed.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Those &amp;lt;match/&amp;gt;, &amp;lt;conditions/&amp;gt; and &amp;lt;action/&amp;gt; are child elements of &amp;lt;rules/&amp;gt; and &amp;lt;globalRules/&amp;gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;&lt;v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"&gt;&lt;/v:path&gt;&lt;o:lock v:ext="edit" aspectratio="t"&gt;&lt;IMG title="rule element relationship" style="WIDTH: 468px; HEIGHT: 278px" height=278 alt="rule element relationship" src="http://blogs.iis.net/blogs/eokim/rules_relation.jpg" width=468 mce_src="http://blogs.iis.net/blogs/eokim/rules_relation.jpg"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Figure 1. Relationship among &amp;lt;rules/&amp;gt;, &amp;lt;rule/&amp;gt;, &amp;lt;match/&amp;gt;, &amp;lt;conditions/&amp;gt;, &amp;lt;action/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Figure 1 illustrates relationship and cardinality among elements. &amp;lt;rules/&amp;gt; can have zero or many &amp;lt;rule/&amp;gt;, and &amp;lt;rule/&amp;gt; has &amp;lt;match/&amp;gt;, &amp;lt;action/&amp;gt; and optional zero or many &amp;lt;conditions/&amp;gt; &lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Let us see actual configuration examples. The examples used in this article should be defined in site root web.config. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;Note that I recommend you to use UI to set configuration. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&amp;lt;rewrite&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;rules&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;rule name="Ex01"&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;match url="(.+)\.htm$" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;action type="Rewrite" url="{R:1}.html" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rule&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rules&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rewrite&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 1. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;The simplest rule&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 1 illustrates one simple rule which rewrites url with extension htm to html. In this example, &amp;lt;rules/&amp;gt; defines only one &amp;lt;rule/&amp;gt; without &amp;lt;conditions/&amp;gt;, which means it performs &amp;lt;action/&amp;gt; &lt;I style="mso-bidi-font-style: normal"&gt;Rewrites&lt;/I&gt; if url’s file extension is .htm.&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&amp;lt;rewrite&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;rules&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;rule name="Ex01"&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;match url="(.+)\.htm$" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;conditions&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;add input="{HTTP_HOST}" pattern="localhost" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/conditions&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&amp;lt;action type="Rewrite" url="{R:1}.html" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rule&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rules&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rewrite&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 2. &amp;lt;rule/&amp;gt; with one condition&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 2 adds one condition in &amp;lt;rule/&amp;gt;, where &amp;lt;conditions/&amp;gt; check whether the host name is “localhost” in order to perform &amp;lt;action/&amp;gt; &lt;I style="mso-bidi-font-style: normal"&gt;Rewrite&lt;/I&gt;. The &amp;lt;rule/&amp;gt; Ex01 first tries pattern-&amp;lt;match&amp;gt; against input URL, and if matched, then evaluates &amp;lt;conditions/&amp;gt;. If they are satisfied, then rewrites URL.&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&amp;lt;rewrite&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;rules&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;rule name="Ex01"&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;match url="(.+)\.htm$" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;conditions&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;add input="{HTTP_HOST}" pattern="localhost" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;add input="{HTTP_PORT}" pattern="80" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/conditions&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;action type="Rewrite" url="{R:1}.html" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rule&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rules&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&amp;lt;/rewrite&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 3 &amp;lt;rule/&amp;gt; with two conditions&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 3 adds one more condition in &amp;lt;rule/&amp;gt;. Now, the rule “Ex01” checks whether input URL has “.htm” extension, and host is “localhsot” and port is 80. If matched and satisfied conditions, an input URL’s extension is rewritten to “.html”.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;As Figure 1 illustrates, &amp;lt;rule/&amp;gt; can have zero or many conditions. In schema term, &amp;lt;conditions/&amp;gt; is a child element of &amp;lt;rule/&amp;gt; and has &amp;lt;collection/&amp;gt; element which you can &amp;lt;add/&amp;gt; one or more condition.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;One useful attribute you can set in &amp;lt;conditions/&amp;gt; is “logicalGrouping” which has enum value; &lt;I style="mso-bidi-font-style: normal"&gt;MatchAll&lt;/I&gt; or &lt;I style="mso-bidi-font-style: normal"&gt;MatchAny&lt;/I&gt;. As name implies, you can apply logical AND or OR operator on conditions. The default value is &lt;I style="mso-bidi-font-style: normal"&gt;MatchAll&lt;/I&gt;. So, Example 3 enforces both condition should be satisfied. If tweaked Example 3 with &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&amp;lt;conditions logicalGrouping =”&lt;I style="mso-bidi-font-style: normal"&gt;MatchAny&lt;/I&gt;”&amp;gt; … &amp;lt;/conditions&amp;gt;, then only one of conditions needs to be met to perform &amp;lt;action/&amp;gt;. &lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&amp;lt;rewrite&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;rules&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;rule name="Ex01"&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;match url="(.+)\.htm$" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;conditions&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;add input="{HTTP_HOST}" pattern="localhost" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;add input="{SERVER_PORT}" pattern="80" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/conditions&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;action type="Rewrite" url="{R:1}.html" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rule&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;rule name="Ex02"&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;match url="^(hello)" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;action type="Rewrite" url="{R:1}.txt" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rule&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rules&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/rewrite&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Example 4. Multiple &amp;lt;rule/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;You can define multiple &amp;lt;rule/&amp;gt; in &amp;lt;rules/&amp;gt; since &amp;lt;rule/&amp;gt; is a child collection element of &amp;lt;rules/&amp;gt;. This is the same concept as the &amp;lt;rule/&amp;gt; and &amp;lt;conditions/&amp;gt;. One important thing here is that the rewritten URL from the current &amp;lt;rule/&amp;gt; will be an input URL for next &amp;lt;rule/&amp;gt;. In other words, they are chained together(just like singly linked list); the output of current &amp;lt;rule/&amp;gt; will become input of next &amp;lt;rule/&amp;gt;. But, if a URL were not rewritten, then the original URL will still be an input of the next rule. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Let us clarify this with an example under the configuration Example 4.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;If GET /hello.htm is requested on localhost with port 80, the server will respond /hello.txt; since both &amp;lt;rule/&amp;gt;s are evaluated TRUE, &amp;lt;rule/&amp;gt; Ex01 rewrites hello.htm to hello.html, and then &amp;lt;rule/&amp;gt; Ex02 rewrites hello.html to hello.txt which will be a final resource to serve to a client. Figure 2.1 illustrates this.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG title="rule evaluation" style="WIDTH: 548px; HEIGHT: 300px" height=300 alt="rule evaluation" src="http://blogs.iis.net/blogs/eokim/rules_eval.jpg" width=548 mce_src="http://blogs.iis.net/blogs/eokim/rules_eval.jpg"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Figure 2. 2.1) Both &amp;lt;rule/&amp;gt; are evaluated TRUE, &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;2,2) The second &amp;lt;rule/&amp;gt; is evaluated TRUE, &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;2.3) The first &amp;lt;rule/&amp;gt; is evaluated TRUE&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;However, if GET /hello.xml is requested on the same server, then it will still respond hello.txt, but in this case the first &amp;lt;rule/&amp;gt; Ex01 is evaluated FALSE, so the original URL will still be an input of the second &amp;lt;rule/&amp;gt; Ex02. Figure 2.2 illustrates this.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;One more, if GET /world.html is requested, then it will serve /world.html since the only the first &amp;lt;rule/&amp;gt; Ex01 is evaluated TRUE. Figure 2.3 illustrates this.&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;There is one interesting attribute you can set at &amp;lt;rule/&amp;gt;; “stopProcessing” which is Boolean type (by default false). As the name suggests, it stops rule chaining process at current &amp;lt;rule/&amp;gt; to serve the currently rewritten url only if &amp;lt;rule/&amp;gt; were evaluated TRUE. For example, If we set &amp;lt;rule name="Ex01" stopProcessing=”true” &amp;gt;… &amp;lt;/rule&amp;gt;, then request GET /hello.htm will serve /hello.html bypassing the second &amp;lt;rule/&amp;gt; Ex02.&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;In summary, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;&amp;lt;rule/&amp;gt;is evaluated TRUE if pattern-&amp;lt;match&amp;gt;ed and &amp;lt;conditions/&amp;gt; are satisfied if exists.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;&amp;lt;action/&amp;gt; is performed (Rewrite or Redirect) only if &amp;lt;rule/&amp;gt; is evaluated TRUE.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Conditions can be OR/AND-operated depending on logicalGrouping attribute in &amp;lt;conditions/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;&amp;lt;rules/&amp;gt; can define zero or many &amp;lt;rule/&amp;gt; which are chained.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Input URL is changed during &amp;lt;rule/&amp;gt; chain; Current output becomes input of next rule.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Rule chain can be broken out if &amp;lt;rule/&amp;gt; is evaluated TRUE and stopProcessing=”true”.&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Hope it helps to understand the URL Rewrite module.&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2404470" width="1" height="1"&gt;</description></item></channel></rss>