<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://technolog.nl/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>eprogrammer</title><link>http://technolog.nl/blogs/eprogrammer/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 (Build: 60809.935)</generator><item><title>SiteMaps made easy</title><link>http://technolog.nl/blogs/eprogrammer/archive/2010/01/31/SiteMaps-made-easy.aspx</link><pubDate>Sun, 31 Jan 2010 17:12:18 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1479</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1479.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1479</wfw:commentRss><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If you’re a site admin or asp.net developer for an internet site, you certainly need to look into sitemaps, if you want to perform SEO.&lt;/p&gt;  &lt;p&gt;It’s not necessary to&amp;#160; simply crawl your own site and then to give every page a priority, but consider this for a forum or other pages which are irregularly or often updated. If you don’t want to have crawlers do unneeded roundtrips, implement a sitemap.&lt;/p&gt;  &lt;p&gt;‘robots.txt’ should contain a reference to your map eg. Sitemap: http://www.myfantasticsite.com/sitemap.xml&lt;/p&gt;  &lt;p&gt;Ideas of this class, written using C#, can be found anywhere on the net. However, as some might know me, I like it to be finished and neat and a self-supporting class ready for usage (e.g. it must not be written to a string to add or remove wished attributes that the serializer could not handle).&lt;/p&gt;  &lt;p&gt;The following things are solved.&amp;#160; &lt;br /&gt;Since&amp;#160; ‘changefreq’ and ‘lastmod’ and ‘priority’ are optional values, you don’t want the XmlSerializer to create empty tags!     &lt;br /&gt;This is done by adding a DefaultValue attribute. It will cause XmlSerializer to check the current value against the default value. If they are equal, it is considered to be an empty non existing tag. Remember, that the defaultvalues need to be out of the range of possible values! Therefore, EnumChangeFreq contains an extra member ‘notused’     &lt;br /&gt;Remember, the Xml.Serialization name space, offers the tools to get it done without converting your loading your XML in to some XmlDocument class. &lt;font color="#000080"&gt;     &lt;br /&gt;       &lt;br /&gt;You can use the class as follows.       &lt;br /&gt;UrlSet retVal = new UrlSet(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;retVal.AddUrl(new Url() { LastModifiedDateTime = DateTime.Now.ToUniversalTime(), Loc = “http://www.myfantasticsite.com/blah.aspx”) });    &lt;br /&gt;    &lt;br /&gt;Retrieve the XML sitemap string.     &lt;br /&gt;string xml = null;     &lt;br /&gt;using (var io = (MemoryStream)retVal.ToStream())     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xml =&amp;#160; new UTF8Encoding().GetString(io.ToArray());     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;or, to write it directly to an output stream&lt;/p&gt;  &lt;p&gt;using (var io = (MemoryStream)retVal.ToStream())    &lt;br /&gt;{ &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;//todo: Deal with Response.Cache, etag and last modified to avoid unnecessary round trips.     &lt;br /&gt;Response.ContentType = “text/xml”;      &lt;br /&gt;Response.CharSet = “utf-8”;      &lt;br /&gt;Response.BinaryWrite(retVal.ToArray()); &lt;/p&gt;    &lt;p&gt;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;using System;    &lt;br /&gt;using System.Xml;     &lt;br /&gt;using System.Xml.Serialization;     &lt;br /&gt;using System.ComponentModel;     &lt;br /&gt;using System.IO;&lt;/p&gt;  &lt;p&gt;namespace adccure    &lt;br /&gt;{ &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public enum EnumChangeFreq    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; notset,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; always,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hourly,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; daily,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; weekly,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; monthly,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; yearly,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; never     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;[&lt;/p&gt;  &lt;p&gt;[XmlRoot(ElementName = &amp;quot;urlset&amp;quot;, Namespace = SCHEMA_SITEMAP)]   &lt;br /&gt;public sealed class UrlSet    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [XmlNamespaceDeclarations]    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public XmlSerializerNamespaces xmlns;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private const string XSI_NAMESPACE = &amp;quot;&lt;a href="http://www.w3.org/2001/XMLSchema-instance&amp;quot;;"&gt;http://www.w3.org/2001/XMLSchema-instance&amp;quot;;&lt;/a&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private const string SCHEMA_SITEMAP = &amp;quot;&lt;a href="http://www.sitemaps.org/schemas/sitemap/0.9&amp;quot;;"&gt;http://www.sitemaps.org/schemas/sitemap/0.9&amp;quot;;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; private Url[] _url; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public UrlSet()   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _url = new Url[0];    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns = new XmlSerializerNamespaces();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns.Add(&amp;quot;xsi&amp;quot;, XSI_NAMESPACE);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SchemaLocation = SCHEMA_SITEMAP + &amp;quot; &amp;quot; + &amp;quot;&lt;a href="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd&amp;quot;;"&gt;http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd&amp;quot;;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; }   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [XmlAttribute(AttributeName = &amp;quot;schemaLocation&amp;quot;, Namespace = XSI_NAMESPACE)]    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public string SchemaLocation; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public void AddUrl(Url url)   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int l = _url.Length + 1;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Array.Resize(ref _url, l);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _url[l - 1] = url;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; [XmlElement(ElementName = &amp;quot;url&amp;quot;)]   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Url[] url    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get { return _url; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set { _url = value; } //bogus    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;summary&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// serializes the UrlSet to a sitemap.xsd conform string ready for saving to disk.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;/summary&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;returns&amp;gt;a Stream object&amp;lt;/returns&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Stream ToStream()    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XmlSerializer xmlser = new XmlSerializer(GetType());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var io = new MemoryStream();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlser.Serialize(new StreamWriter(io, Encoding.UTF8), this);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; io.Position = 0;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return io;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public sealed class Url    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private string _loc;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private DateTime _lastmod;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private float _priority;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private EnumChangeFreq _changefreq; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public Url()    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //setting defaults     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _changefreq = EnumChangeFreq.notset;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _priority = 0.0F;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _lastmod = DateTime.MinValue;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [XmlElement(ElementName = &amp;quot;loc&amp;quot;)]    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string Loc     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return _loc;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (string.IsNullOrEmpty(value))     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new ArgumentNullException();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (value.Length &amp;lt; 12 || value.Length &amp;gt; 2048)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new ArgumentException(&amp;quot;loc must be between 12 and 2048 in length&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _loc = value;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [XmlElement(ElementName = &amp;quot;lastmod&amp;quot;), DefaultValue(typeof(DateTime), &amp;quot;1-1-0001&amp;quot;)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public DateTime LastModifiedDateTime     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return _lastmod;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _lastmod = new DateTime(value.Year, value.Month, value.Day, value.Hour, value.Minute, value.Second, value.Kind); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [XmlElement(ElementName = &amp;quot;changefreq&amp;quot;)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [DefaultValue(EnumChangeFreq.notset)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public EnumChangeFreq ChangeFreq     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return _changefreq;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _changefreq = value;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [XmlElement(ElementName = &amp;quot;priority&amp;quot;)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [DefaultValue(0.0F)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public float Priority     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return _priority;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (value &amp;lt; 0 || value &amp;gt; 1.0)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new ArgumentException(&amp;quot;Must be between 0 and 1&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _priority = value;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0a122383-0d37-48e2-a75d-300f8e9179bd" class="wlWriterEditableSmartContent"&gt;Tags van Technorati: &lt;a href="http://technorati.com/tags/C%23" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/sitemaps" rel="tag"&gt;sitemaps&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XmlSerializer" rel="tag"&gt;XmlSerializer&lt;/a&gt;&lt;/div&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1479" width="1" height="1"&gt;</description></item><item><title>Howto: Create a custom numeric pager for the ASP.NET Gridview Control</title><link>http://technolog.nl/blogs/eprogrammer/archive/2009/10/28/Howto_3A00_-Create-a-custom-numeric-pager-for-the-ASP.NET-Gridview-Control.aspx</link><pubDate>Wed, 28 Oct 2009 20:51:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1477</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1477.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1477</wfw:commentRss><description>&lt;p&gt;Figure 1: Our custom pager in action!&lt;/p&gt;&lt;p&gt;I never have liked the concept of storing all the data in whatever form (DataTable/Lists of records/etc.) to the ASP.NET gridview control and having it automatically manage paging for me. This could however be improved using Visual Studio 2008 wizards. However, this requires writing stored procedures.&lt;/p&gt;&lt;p&gt;I&amp;rsquo;ve got a concept for you, which works without a lot of extra work. The concept is: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Inherit from asp:GridView and override the PageCount and the PageIndex properties &lt;/li&gt;&lt;li&gt;Create in instance of my CustomPager class at DataBinding time. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The result is as shown in figure 1: It adheres to PageButtonCount, to any styles that you have applied to the GridView and it features a &amp;lsquo;jump to&amp;rsquo; page input box. &lt;br /&gt;The &amp;lsquo;native&amp;rsquo; event handling in your ASPX, still can be maintained by this code since it emulates the PageIndexChanging event.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Other solutions&lt;/em&gt;, implement an AJAX updatepanel per row. This really minimizes unnecessary refreshing of grid data. &lt;br /&gt;However, I don&amp;rsquo;t mind if say, 30 rows are being pulled from a DB and bound to a GridView. If we do so, we also get &lt;em&gt;the best of two worlds&lt;/em&gt;, in one world, we get all data and have a fresh update of the real table rows, and in the other world, we have just the active row being fetched and we could end up having outdated data on our screen because of (for instance) co-writers/typers who updated rows at the database which are not reflected at our screen in grid (which is displayed using a gridview). &lt;/p&gt;&lt;p&gt;So, in other words, I like this pager control since it is a balanced solution&lt;em&gt;! &lt;/em&gt;It has been tested on 10,000 records. WHen I would page to for instance, page 900, it really is a matter of fractions of a second to get a response. (For paging solutions&amp;nbsp; on SQL server data tables which contain say millions of rows, we would need a more sophisticated approach).&lt;/p&gt;&lt;p&gt;Here is the control source (it&amp;rsquo;s called gridhelper.cs)! (In theory, it should work for .NET 2.0 up to 3.5)&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;// if you use this code, please leave the original author &lt;br /&gt;//author: Egbert Nierop &lt;br /&gt;using System; &lt;br /&gt;using System.Web; &lt;br /&gt;using System.Web.UI; &lt;br /&gt;using System.Web.UI.WebControls;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;namespace adccure.tools &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public sealed class GridView2 : GridView &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public GridView2() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : base() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int _pageCount; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override int PageIndex &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&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; object o = ViewState[&amp;quot;pgi&amp;quot;]; &lt;br /&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; return o == null ? 0 : (int)o; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&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; ViewState[&amp;quot;pgi&amp;quot;] = value; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override int PageCount &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&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; return _pageCount; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void PageCountSet(int pageCount) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pageCount = pageCount; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public sealed class CustomPager : ITemplate &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; readonly Table tbl; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; readonly GridView2 _grid; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //readonly int _totalPages; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public CustomPager(GridView2 grid, int totalPages) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl = new Table(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.PageCountSet(totalPages); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.Width = Unit.Percentage(100); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _grid = grid; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void ITemplate.InstantiateIn(Control container) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Controls.Add(tbl); &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pageSize = _grid.PageSize; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pageIndex = _grid.PageIndex; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pageButtonCount = _grid.PagerSettings.PageButtonCount; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pageCount = _grid.PageCount; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClientScriptManager cs = _grid.Page.ClientScript; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _grid.PagerSettings.Visible = true; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var trow = new TableRow(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var trowpagePosition = new TableRow(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.Rows.Add(trow); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.Rows.Add(trowpagePosition); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox tb = new TextBox(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb.ID = &amp;quot;txtJumpPage&amp;quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb.MaxLength = 4; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb.Width = Unit.Pixel(40); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb.Text = (pageIndex + 1).ToString(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //avoid bubble up by return false &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb.Attributes[&amp;quot;onkeydown&amp;quot;] = string.Format(&amp;quot;if (event.keyCode==13) {__doPostBack(&amp;#39;{0}&amp;#39;, &amp;#39;Page$&amp;#39; + this.value ); return false;}&amp;quot;, _grid.UniqueID); &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LiteralControl lit = new LiteralControl(string.Format(&amp;quot; of {0}&amp;quot;, (pageCount + 1).ToString())); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TableCell posCaption = new TableCell(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; trowpagePosition.Cells.Add(posCaption); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; posCaption.Controls.Add(tb); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; posCaption.Controls.Add(lit); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int cellspan = 0; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pageIndex &amp;gt; 0) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&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; var cellText = new TableCell(); &lt;br /&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; trow.Cells.Add(cellText); &lt;br /&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; cellspan++; &lt;br /&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; cellText.Controls.Add(new HyperLink() &lt;br /&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;br /&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; NavigateUrl = cs.GetPostBackClientHyperlink(_grid, &lt;br /&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; string.Format(&amp;quot;Page${0}&amp;quot;, pageIndex - pageButtonCount &amp;gt;= 0 ? (pageIndex - pageButtonCount) + 1 : 1), false), &lt;br /&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; Text = &amp;quot;&amp;lt;&amp;quot; &lt;br /&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int x = pageIndex; x &amp;lt; pageIndex + pageButtonCount &amp;amp;&amp;amp; x &amp;lt;= pageCount; x++) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&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; var cellText = new TableCell(); &lt;br /&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; cellspan++; &lt;br /&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; trow.Cells.Add(cellText); &lt;br /&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; cellText.Controls.Add(new HyperLink() &lt;br /&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;br /&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; NavigateUrl = cs.GetPostBackClientHyperlink(_grid, &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string.Format(&amp;quot;Page${0}&amp;quot;, x + 1), false), &lt;br /&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; Text = (x + 1).ToString(), &lt;br /&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;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pageIndex + pageButtonCount &amp;lt; pageCount) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&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; var cellText = new TableCell(); &lt;br /&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; cellspan++; &lt;br /&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; trow.Cells.Add(cellText); &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&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; cellText.Controls.Add(new HyperLink() &lt;br /&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;br /&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; NavigateUrl = cs.GetPostBackClientHyperlink(_grid, &lt;br /&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; string.Format(&amp;quot;Page${0}&amp;quot;, (pageIndex + pageButtonCount) + 1), false), &lt;br /&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; Text = &amp;quot;&amp;gt;&amp;quot; &lt;br /&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.Visible = true; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; posCaption.HorizontalAlign = HorizontalAlign.Center; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; posCaption.ColumnSpan = cellspan; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Now, I don&amp;rsquo;t publish the code to read from sample data (such as northwind), it would be a yadda, yadda and you know the drill. (In my code, it is just a silly HttpReferrer table having all the columns which allow you research this specific statistical interest of your web site) &lt;br /&gt;But in my datalayer, I have things like shown below. It is a great solution for those tables, for say, less than 100,000 records. SQL server is able to deal with these types of queries pretty well and we still &lt;em&gt;avoid pumping around lots of redundant data on the network and gridview control.&lt;/em&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;public IList&amp;lt;HttpReferrer&amp;gt; getHttpReferrers(int pPage, int pPageSize, HttpReferrerSortOrder sortOrder, &lt;br /&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; SortDirection sortDirection, &lt;br /&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; out int totalRecords) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; totalRecords = dcd.HttpReferrers.Count(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IQueryable&amp;lt;HttpReferrer&amp;gt; retVal = null; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sortDirection ==&amp;nbsp; SortDirection.Ascending) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&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; switch (sortOrder) &lt;br /&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;br /&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; case HttpReferrerSortOrder.Referer: &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderBy(t =&amp;gt; t.Referrer); &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&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; case HttpReferrerSortOrder.IP: &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderBy(t =&amp;gt; t.IP_Address); &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&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; case HttpReferrerSortOrder.Page: &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderBy(t =&amp;gt; t.page); &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&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; default: &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderBy(t =&amp;gt; t.ts); &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&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; switch (sortOrder) &lt;br /&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;/font&gt;&lt;font face="Courier" size="2"&gt;case HttpReferrerSortOrder.Referer: &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderByDescending(t =&amp;gt; t.Referrer); &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&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; case HttpReferrerSortOrder.IP: &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderByDescending(t =&amp;gt; t.IP_Address); &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&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; case HttpReferrerSortOrder.Page: &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderByDescending(t =&amp;gt; t.page); &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&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; default: &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderByDescending(t =&amp;gt; t.ts); &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return retVal.Skip(pPage * pPageSize).Take(pPageSize).ToList(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;So, our Grid, can sort and it can page.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;How do we deal with the paging event at the code behind the aspx? &lt;br /&gt;It&amp;rsquo;s so simple!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="courier"&gt;void gridHttpReferrers_PageIndexChanging(object sender, GridViewPageEventArgs e)&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier"&gt;{&amp;nbsp; &lt;br /&gt;&lt;/font&gt;gridHttpReferrers&lt;font face="Courier"&gt;.PageIndex = e.NewPageIndex;&amp;nbsp; &lt;br /&gt;&lt;/font&gt;gridHttpReferrers&lt;font face="Courier"&gt;.DataBind();&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier"&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/font&gt; gridHttpReferrers_DataBinding(&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/font&gt; sender, &lt;font color="#2b91af"&gt;&lt;font color="#2b91af"&gt;EventArgs&lt;/font&gt;&lt;/font&gt; e) &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;{&amp;nbsp;&amp;nbsp; int totalRecords;&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp; int pageSize = gridHttpReferrers.PageSize;&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp; int pageIndex = gridHttpReferrers.PageIndex;&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp; gridHttpReferrers.DataSource = datadal.getHttpReferrers(pageIndex, pageSize, SortOrder, SortDir, out totalRecords);&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp; gridHttpReferrers.PagerTemplate = new CustomPager(gridHttpReferrers, totalRecords);&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp; gridHttpReferrers.PageCountSet (totalRecords / pageSize); &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&lt;font face="ta"&gt;What did I do to get the new grid behavior inside the ASPX? &lt;br /&gt;Just rename the tag from asp:GridView to ctrl:GridView2 and create the reference (or in web.config)&lt;/font&gt; &lt;/font&gt;&lt;p&gt;&lt;font size="2"&gt;&amp;lt;%@ Register TagPrefix=&amp;quot;ctrl&amp;quot; Namespace=&amp;quot;adccure.tools&amp;quot; %&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;&lt;font color="#a31515"&gt;ctrl&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;&lt;font color="#a31515"&gt;GridView2&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;runat&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;emptydatatext&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;No data available.&amp;quot;&lt;/font&gt;&lt;/font&gt;&amp;nbsp; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;ID&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;gridHttpReferrers&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;AllowPaging&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;AllowSorting&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;True&amp;quot;&lt;/font&gt;&lt;/font&gt;&amp;nbsp; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;Width&lt;/font&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;100%&amp;quot; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;AutoGenerateColumns&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;PageSize&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;20&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;DataKeyNames&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;ID&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;&lt;font color="#a31515"&gt;PagerSettings&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;Position&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Top&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;PageButtonCount&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;20&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;/&amp;gt; &lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;&lt;font color="#a31515"&gt;Columns&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&amp;gt; ETC.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;p&gt;So, I hope this code was quite enlightning for you and you can play with it and have fun.&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1477" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Custom+Pager/default.aspx">Custom Pager</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/GridView/default.aspx">GridView</category></item><item><title>Howto: Check the case sensitive existence of a file</title><link>http://technolog.nl/blogs/eprogrammer/archive/2009/07/06/Howto_3A00_-Check-the-case-sensitive-existence-of-a-file.aspx</link><pubDate>Mon, 06 Jul 2009 09:03:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1474</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1474.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1474</wfw:commentRss><description>&lt;p&gt;Sometimes, especially for files running on external FTP servers, where file names are case sensitive, a file named myFILE.html, is not the same file as myfile.html in the same path!&lt;/p&gt;&lt;p&gt;This function, can be used on an NTFS path for that purpose where File.Exists would fail, because it is case insensitive. (However, it does not enable you to have two files with just a different case in the same path)&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;///&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;///&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt; Checks existance of file using a case sensitive compare&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;///&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;///&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;&amp;lt;param name=&amp;quot;file&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt;must be full filename&lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;///&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;static&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; FileExists(&lt;span style="color:blue;"&gt;string&lt;/span&gt; file)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:35.4pt;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;string&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; pathCheck = &lt;span style="color:#2b91af;"&gt;Path&lt;/span&gt;.GetDirectoryName(file);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:35.4pt;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;string&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&amp;nbsp;filePart = &lt;span style="color:#2b91af;"&gt;Path&lt;/span&gt;.GetFileName(file);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(pathCheck))&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;The file must include a full path&amp;quot;&lt;/span&gt;, file);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] checkFiles = &lt;span style="color:#2b91af;"&gt;Directory&lt;/span&gt;.GetFiles(pathCheck,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;&lt;font color="#000000"&gt;filePart&lt;/font&gt;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;SearchOption&lt;/span&gt;.TopDirectoryOnly);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (checkFiles != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; checkFiles.Length &amp;gt; 0)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//must be a binary compare&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Path&lt;/span&gt;.GetFileName(checkFiles[0]) == filePart;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="line-height:115%;font-family:'Courier New';font-size:10pt;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1474" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Case+sensitive/default.aspx">Case sensitive</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/File.Exists/default.aspx">File.Exists</category></item><item><title>Howto: Properly use the AccessCheck API for the current user</title><link>http://technolog.nl/blogs/eprogrammer/archive/2009/06/18/Howto_3A00_-Properly-use-the-AccessCheck-API.aspx</link><pubDate>Thu, 18 Jun 2009 21:50:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1473</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1473.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1473</wfw:commentRss><description>&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;I&amp;#39;ve seen&amp;nbsp;people pulling the hair out for not getting this API&amp;nbsp;workign for them.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;The API, even if impersonating&amp;nbsp;the current user, returns error 1309.&amp;nbsp;&lt;em&gt;&amp;quot;An attempt has been made to operate on an impersonation token by a thread that is not currently impersonating a client.&amp;quot;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;The clue is that this API, (and this is not clearly documented on the MSDN) needs a duplicated handle.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;Anyway,&amp;nbsp;spare your hair, have fun with the code. B.t.w.&amp;nbsp;You can hire me for smart code and research on components etc..&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;a href="http://www.adccure.nl/"&gt;http://www.adccure.nl&lt;/a&gt; for contact.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;StructLayout&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;LayoutKind&lt;/span&gt;.Sequential)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;struct&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GENERIC_MAPPING&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; GenericRead;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; GenericWrite;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; GenericExecute;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; GenericAll;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;advapi32.dll&amp;quot;&lt;/span&gt;, SetLastError = &lt;span style="color:blue;"&gt;false&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; MapGenericMask([&lt;span style="color:#2b91af;"&gt;In&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.U4)] &lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt; AccessMask,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;In&lt;/span&gt;] &lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GENERIC_MAPPING&lt;/span&gt; map);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;advapi32.dll&amp;quot;&lt;/span&gt;, SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:blue;"&gt;return&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.Bool)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; DuplicateToken(&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; ExistingTokenHandle,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;[&lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.U4)] &lt;span style="color:#2b91af;"&gt;TokenImpersonationLevel&lt;/span&gt; level,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; DuplicateTokenHandle);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;advapi32.dll&amp;quot;&lt;/span&gt;, SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;)]&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color:blue;"&gt;return&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.Bool)] &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; AccessCheck(&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.LPArray)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] pSecurityDescriptor,&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; ClientToken,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.U4)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt; accessmask,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;In&lt;/span&gt;] &lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GENERIC_MAPPING&lt;/span&gt; GenericMapping,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; PrivilegeSet,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; PrivilegeSetLength,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; GrantedAccess,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.Bool)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; AccessStatus);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;kernel32&amp;quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; CloseHandle(&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; ptr);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; hasReadAccess(&lt;span style="color:blue;"&gt;string&lt;/span&gt; path)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// Obtain the authenticated user&amp;#39;s Identity&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;WindowsIdentity&lt;/span&gt; winId = &lt;span style="color:#2b91af;"&gt;WindowsIdentity&lt;/span&gt;.GetCurrent(&lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;.Duplicate | &lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;.Query);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;WindowsImpersonationContext&lt;/span&gt; ctx = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; statError = 0;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; dupToken = &lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt;.Zero;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:green;"&gt;// Start impersonating&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:green;"&gt;//ctx = winId.Impersonate(); works but AccessCheck does not like this&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;int&lt;/span&gt; outPtr; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:green;"&gt;//AccessCheck needs a duplicated token!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;DuplicateToken(winId.Token, &lt;span style="color:#2b91af;"&gt;TokenImpersonationLevel&lt;/span&gt;.Impersonation, &lt;span style="color:blue;"&gt;out&lt;/span&gt; outPtr);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;dupToken = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt;(outPtr);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;ctx = &lt;span style="color:#2b91af;"&gt;WindowsIdentity&lt;/span&gt;.Impersonate(dupToken);&lt;span&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;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:#2b91af;"&gt;Folder&lt;/span&gt;.&lt;span style="color:#2b91af;"&gt;GENERIC_MAPPING&lt;/span&gt; map = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Folder&lt;/span&gt;.&lt;span style="color:#2b91af;"&gt;GENERIC_MAPPING&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;map.GenericRead = 0x80000000;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;map.GenericWrite = 0x40000000;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;map.GenericExecute = 0x20000000;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;map.GenericAll = 0x10000000;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt; required = &lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;.Query | &lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;.Read | &lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;.AssignPrimary | (&lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;)0x00100000; // add synchronization&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;MapGenericMask(&lt;span style="color:blue;"&gt;ref&lt;/span&gt; required, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; map);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;uint&lt;/span&gt; status = 0;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; accesStatus = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:green;"&gt;// dummy area the size should be 20 we don&amp;#39;t do anything with it&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;int&lt;/span&gt; sizeps = 20;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; ps = &lt;span style="color:#2b91af;"&gt;Marshal&lt;/span&gt;.AllocCoTaskMem(sizeps);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:green;"&gt;//AccessControlSections.Owner | AccessControlSections.Group MUST be included, &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:green;"&gt;//otherwise the descriptor would be&amp;nbsp;seen with ERROR 1338&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;var&lt;/span&gt; ACE = &lt;span style="color:#2b91af;"&gt;Directory&lt;/span&gt;.GetAccessControl(path, &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:#2b91af;"&gt;AccessControlSections&lt;/span&gt;.Access | &lt;span style="color:#2b91af;"&gt;AccessControlSections&lt;/span&gt;.Owner | &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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="color:#2b91af;"&gt;AccessControlSections&lt;/span&gt;.Group);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; success = AccessCheck(ACE.GetSecurityDescriptorBinaryForm(), dupToken, required, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; map,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;ps, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; sizeps, &lt;span style="color:blue;"&gt;out&lt;/span&gt; status, &lt;span style="color:blue;"&gt;out&lt;/span&gt; accesStatus);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:#2b91af;"&gt;Marshal&lt;/span&gt;.FreeCoTaskMem(ps);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (!success)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;statError = &lt;span style="color:#2b91af;"&gt;Marshal&lt;/span&gt;.GetLastWin32Error();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;return&lt;/span&gt; accesStatus;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// Prevent exceptions from propagating&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; ex)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:#2b91af;"&gt;Trace&lt;/span&gt;.Write(ex.Message);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;finally&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:green;"&gt;// Revert impersonation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (ctx != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;ctx.Undo();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;CloseHandle(dupToken);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (statError != 0)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Win32Exception&lt;/span&gt;(statError);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;This code is just a cut and paste. You can make it pretty.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1473" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Interop/default.aspx">Interop</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/AccessCheck/default.aspx">AccessCheck</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/NT+Security/default.aspx">NT Security</category></item><item><title>Fill a dropdownlist using the current UICulture in (ASP.NET)</title><link>http://technolog.nl/blogs/eprogrammer/archive/2009/06/18/Fill-a-dropdownlist-using-the-current-UICulture-in-_2800_ASP.NET_2900_.aspx</link><pubDate>Thu, 18 Jun 2009 10:05:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1472</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1472.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1472</wfw:commentRss><description>&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;Just for educational purpose (as for myself as well :) ) I post this code.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;Using this,&amp;nbsp;a programmer can use a good practise, that is&amp;nbsp;to use the culture information which&amp;nbsp;is built in, into .NET instead of making that data him/herself.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;based upon the&amp;nbsp;following element in&amp;nbsp;web.Config, the list will fill&amp;nbsp;using the correct number of monthnames. It also keeps track of calendars, that have 13 months in some cultures.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;p&gt;&amp;lt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;globalization&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;uiCulture&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;nl-nl&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;/&amp;gt; &lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Collections.Generic;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Web;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Linq;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Web.UI;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Web.UI.WebControls;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Threading;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Globalization;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;public&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; &lt;span style="color:blue;"&gt;partial&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;_Default&lt;/span&gt; : System.Web.UI.&lt;span style="color:#2b91af;"&gt;Page&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; monthNumber = 0;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt; ci = &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentUICulture;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; myMonthnames = ci.DateTimeFormat.MonthNames&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&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;.Take(ci.Calendar.GetMonthsInYear(&lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Today.Year)).Select(p =&amp;gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; { monthNo = ++monthNumber, monthName = p });&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ddlMonthnames.DataTextField = &lt;span style="color:#a31515;"&gt;&amp;quot;monthName&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ddlMonthnames.DataValueField = &lt;span style="color:#a31515;"&gt;&amp;quot;monthNo&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ddlMonthnames.DataSource = myMonthnames;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ddlMonthnames.DataBind();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;select&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;name&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;ddlMonthnames&amp;quot; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;id&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;ddlMonthnames&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;januari&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;februari&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;maart&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;april&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;5&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;mei&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;6&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;juni&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;7&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;juli&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;8&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;augustus&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;9&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;september&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;10&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;oktober&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;11&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;november&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;12&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;december&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;select&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1472" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/calendar/default.aspx">calendar</category></item><item><title>Performance and the future of LINQ expressions</title><link>http://technolog.nl/blogs/eprogrammer/archive/2009/06/18/Performance-and-the-future-of-expressions.aspx</link><pubDate>Wed, 17 Jun 2009 23:23:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1470</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1470.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1470</wfw:commentRss><description>&lt;p&gt;I was wondering if writing well known C# (or VB.NET if you wish) code flow statements, such as for .. and foreach etc. are faster or slower compared to a generic expression.&lt;/p&gt;&lt;p&gt;The results are refreshing&amp;nbsp; &lt;img src="http://technolog.nl/emoticons/emotion-2.gif" alt="Big Smile" /&gt;. At least using this simple array iteration. Array Iterations on millions of elements, of course, are not the the real life CPU eaters for an average ASP.NET website (eg), but consider this code.&lt;/p&gt;&lt;p&gt;There are three loops, doing the same.&amp;nbsp; (n.b.: I run a dual core i7200 CPU machine on Vista x64)&lt;/p&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;int&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt; ctr = 0;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;var&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt; values = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;font color="#000000"&gt;[1000000].&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Select(p =&amp;gt; p = (ctr++).&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ToString()).&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ToArray();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:#2b91af;font-size:10pt;"&gt;List&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt; intList;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;intList = values.Select(p =&amp;gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;.Parse(p)).ToList();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;int&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;[] test1, test2, test3;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;span style="color:green;"&gt;// loop 10 times and calculate the average&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;test1 = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;[10];&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;test2 = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;[10];&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;test3 = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;[10];&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;for&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; zz = 0; zz &amp;lt; 10; zz++)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;// our millisecond counter &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;// it&amp;#39;s ok to run this test several times to get an average score&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; start = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;// convert the numeric array back to an int array&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;intList = values.Select(p =&amp;gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;.Parse(p)).ToList();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;test1[zz] = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount - start;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;//now do the same but using a foreach iteration&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;start = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;intList = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt;&lt;font color="#000000"&gt; p &lt;/font&gt;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&lt;font color="#000000"&gt; values)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;intList.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;.Parse(p));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;test2[zz] = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount - start;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;//do it a last time, but with a&amp;nbsp;for{} iteration &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;// theoretically a this should save us an enumerator.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;start = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;intList = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; z = values.Length;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; x = 0; x &amp;lt; z; x++)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;intList.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;.Parse(values[x]));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;test3[zz] = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount - start;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;{0}, {1}, {2}&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;, test1[zz], test2[zz], test3[zz]);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:#2b91af;font-size:10pt;"&gt;Console&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;{0}, {1}, {2}&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;, test1.Average(), test2.Average(), test3.Average());&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="line-height:115%;font-family:'Courier New';color:#2b91af;font-size:10pt;"&gt;Console&lt;/span&gt;&lt;span style="line-height:115%;font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;.ReadKey();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;To test this, run this code in release mode (plus Ctrl-F5, in Visual Studio). &lt;p&gt;x64 CPU platform results:&lt;br /&gt;Test 1)&amp;nbsp;175ms&lt;br /&gt;Test 2)&amp;nbsp;154 ms&lt;br /&gt;Test 3)&amp;nbsp;155 ms&lt;/p&gt;&lt;p&gt;x86 CPU platform results:&lt;br /&gt;Test 1)&amp;nbsp;198 ms&lt;br /&gt;Test 2)&amp;nbsp;161 ms&lt;br /&gt;Test 3)&amp;nbsp;169 ms&lt;/p&gt;&lt;p&gt;Test 1 uses an generic expression to &amp;#39;cast&amp;#39;&amp;nbsp; a numeric string array to a List of type Int32. &lt;br /&gt;Cute line, isn&amp;#39;t it? &lt;br /&gt;But unfortunately, as has been said, the LINQ expression, still is a bit slower than the non-linq versions. &lt;br /&gt;&lt;br /&gt;How much slower when we deal with integer math and avoid any parsing overhead?&lt;/p&gt;&lt;p&gt;Now if we replace the int.Parse() statement by a silly integer operation, such as &lt;br /&gt;&lt;font size="2"&gt;&lt;em&gt;intList = intvalues.Select(p =&amp;gt; p -1 ).ToList();&lt;/em&gt;&amp;nbsp;we have to increase the loopcount to 10,000,000 to&amp;nbsp;get the workload to any significance. Now we &lt;em&gt;measure plain LINQ performance&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;x64 results:&lt;br /&gt;Test 1) 269 ms&lt;br /&gt;Test 2) 125 ms&lt;br /&gt;Test 3) 128 ms&lt;br /&gt;&lt;br /&gt;x86 results:&lt;br /&gt;Test 1) 276 ms&lt;br /&gt;Test 2) 126 ms&lt;br /&gt;Test 3) 121 ms&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;Conclusion: &lt;br /&gt;I expect over time that compilers become more and more smarter and can optimize even better LINQ expressions.&amp;nbsp; &lt;br /&gt;However, as we saw in the first example, int.Parse already flattened the results and the relative slowness of LINQ greatly. &lt;br /&gt;Parsing and converting data in loops, is something we constantly do when we deal with XML and databases. So when the workload &lt;em&gt;within&lt;/em&gt; the loop increases, the overhead of LINQ expressions quickly become&amp;nbsp;no important factor.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;So, for shorter code, I would not hesitate to use those expressions as in Test 1.&lt;br /&gt;In &lt;em&gt;a real life business application&lt;/em&gt;, the performance of loops really does &lt;em&gt;not &lt;/em&gt;determine the final user experience. It is&amp;nbsp;(e.g.) how we access a&amp;nbsp;database or other resources, such as XML.&lt;/p&gt;&lt;p&gt;It would be another story, if we e.g. were doing 3D math animations, where C++ would be an obvious choice.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1470" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Generics/default.aspx">Generics</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Howto program a LINQ expression which effectively does an aggregate subquery with optional cardinal relationship </title><link>http://technolog.nl/blogs/eprogrammer/archive/2008/03/18/Howto-program-a-LINQ-expression-which-effectively-does-a-aggregate-subquery-with-optional-cardinal-relationship-.aspx</link><pubDate>Tue, 18 Mar 2008 22:02:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1253</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1253.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1253</wfw:commentRss><description>&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;LINQ! Yes, Also I fell in love with linq.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;So here is my first try. And as you fans know, I like to dig into subjects.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Maybe, the title is a little incorrect, but I wanted a query that returns one record, using a subquery in one statement!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Using SQL syntax, this would look like the query just below.: Yes, It seems I can dream SQL, but it was shocking to&amp;nbsp;see&amp;nbsp;how I underestimated the LINQ syntax which took some extra hears from my head.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The query returns events, that have not already been booked full. (There are still some places left)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;SELECT [t0].[id], [t0].[maxNumberofParticipants], [t0].[OwerId], [t0].[Description], [t0].[StartTime], [t0].[EndTime], &lt;br /&gt;[t0].[orderId] FROM [dbo].[Activity] AS [t0]&lt;br /&gt;WHERE ([t0].[OwerId] = @p0) AND ([t0].[maxNumberofParticipants] &amp;gt; @p1) AND ([t0].[maxNumberofParticipants] &amp;gt; (ISNULL((&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT SUM([t2].[value])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT [t1].[countOfPersons] AS [value], [t1].[activityId]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM [dbo].[ActivityParticipant] AS [t1]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) AS [t2]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE [t2].[activityId] = [t0].[id]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ),0)))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;I could make this a stored proc, and execute this easily. But that was in my previous life. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;So, how to express this&amp;nbsp;using a LINQ query?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The&amp;nbsp;trick with the ISNULL function is to -cast- the countOfPersons field, to a nullable type! Since&amp;nbsp;the GetValueOrDefault()&amp;nbsp;is available only to nullable data types we must cast it to an &lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;int?&lt;/span&gt; datatype. &lt;br /&gt;The LINQ provider, will translate it finally, when it sends the actual SQL to SQL Server using TSQL function &amp;#39;COALESC&amp;#39;.&lt;br /&gt;bt.w., it will not use the ISNULL function.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;public &lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:Arial;"&gt;IEnumerable&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:Arial;"&gt;Activity&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;&amp;gt; getActivityParticipableByOwnerWith(&lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:Arial;"&gt;Guid&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt; ownerGuid) &lt;br /&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;var&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt; query = &lt;span style="color:blue;"&gt;from&lt;/span&gt; a &lt;span style="color:blue;"&gt;in&lt;/span&gt; Activities&lt;br /&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; a.OwerId == ownerGuid &amp;amp;&amp;amp; a.maxNumberofParticipants &amp;gt; 0 &amp;amp;&amp;amp; a.maxNumberofParticipants &amp;gt;&lt;br /&gt;ActivityParticipants.Where(aid =&amp;gt; aid.activityId == a.id).Sum(aid =&amp;gt; (&lt;span style="color:blue;"&gt;int&lt;/span&gt;?)aid.countOfPersons).GetValueOrDefault(0)&lt;br /&gt;&lt;span style="color:blue;"&gt;select&lt;/span&gt; a ;&lt;br /&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;return&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt; query;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Kuddo&amp;#39;s to Khaled Moawad, who very patiently helped me to improve the&amp;nbsp;syntax.&amp;nbsp; b.t.w. guys/girls. Always try it hard yourself, before you ask the global community for support. That makes your brains retain better :)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;My next goal is to make LINQ like a natural language for me, like SQL was :)&lt;/span&gt;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1253" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/SQL/default.aspx">SQL</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/NULLABLE/default.aspx">NULLABLE</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/AGGREGATES/default.aspx">AGGREGATES</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/SUM/default.aspx">SUM</category></item><item><title>Howto loop through each element on a SafeArray with an unknown number of Dimensions?</title><link>http://technolog.nl/blogs/eprogrammer/archive/2007/09/23/Howto-loop-through-each-element-on-a-SafeArray-with-an-unknown-number-of-Dimensions_3F00_.aspx</link><pubDate>Sat, 22 Sep 2007 23:03:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1248</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1248.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1248</wfw:commentRss><description>&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;I thought that the subject &amp;lsquo;SafeArrays&amp;rsquo; were really from the previous age and&amp;nbsp;there was really nothing new about them, I could tell you , that was not already known. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;So sit back and listen, what I am going to tell you, has been decided, in a dark hole, were some Microsoft Nerds &lt;img src="http://technolog.nl/emoticons/emotion-3.gif" alt="Surprise" /&gt;&amp;nbsp;must have thought that our programmers&amp;#39; live was too easy. So they&amp;nbsp;modified the way the old variant arrays from the COM era were stored in memory.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;Which Windows editions are involved in this modification? I don&amp;#39;t know exactly. Anyway, Windows&amp;nbsp;64 bit edition (x64)&amp;nbsp;really is subject to this, while Windows 2003 x86 (32 bit) is not. And don&amp;#39;t worry too much, if you only use Ole Automation API calls, and not like I did, directly manipulated the SAFEARRAY storage area, your hard working code at your customers site, still should work&amp;nbsp;&lt;img src="http://technolog.nl/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;So, let&amp;rsquo;s figure what has changed by looking at the code below which very common.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;SAFEARRAYBOUND bounds[1];&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;bounds.cElements = 10;&lt;br /&gt;bounds.lLbound = 0;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;SAFEARRAY *psa = SafeArrayCreate(VT_VARIANT, 1, &amp;amp;bounds);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;This creates a variant array, that is compatible with scripting, similar to &lt;br /&gt;Redim myArray(9)&amp;nbsp;&amp;#39;&lt;span style="font-size:10pt;color:green;line-height:115%;font-family:'Courier New';"&gt; 0 to 9 is ten elements.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;But before the array storage memory layout modification that I&amp;#39;m talking about,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;LONG elSize = SafeArrayGetElementSize(psa); would return 16 (since sizeof(VARIANT) obviously equals that) but on Windows x64, this returns 24. Possibly, the alignment still is 16, but this makes me suspicious. Why did Microsoft change this? So I want to be sure it works&amp;nbsp;independently of the Windows version or future&amp;nbsp;features.&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;color:green;line-height:115%;font-family:'Courier New';"&gt;// code below gives an impression how to loop through an &amp;lsquo;unknonn dimension sized Safe Array, in this case the variant type is VT_VARIANT. Don&amp;rsquo;t use it. It&amp;rsquo;s faulty now on modern Windows systems.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;LONG lElements&amp;nbsp; = 0;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;for&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt; (LONG x = 0; x &amp;lt; cDims; x++)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SafeArrayGetLBound(psa, x + 1, &amp;amp;lbound);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SafeArrayGetUBound(psa, x + 1, &amp;amp;ubound);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lElements += (ubound - lbound + 1);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;hr = SafeArrayAccessData(psa, &amp;amp;psadata);&lt;br /&gt;if (hr == S_OK)&lt;br /&gt;{&lt;br /&gt;&lt;span&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;VARIANT *myvarray = static_cast&amp;lt;VARIANT *&amp;gt;(psadata);&lt;br /&gt;&lt;span&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;for (LONG els = 0; els &amp;lt; lElements &amp;amp;&amp;amp; hr == S_OK; els++)&lt;br /&gt;&lt;span&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;{&lt;span&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; &lt;/span&gt;// do something easy with the element &lt;br /&gt;&lt;span&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;VARTYPE vt = myvarray[els].vt;&lt;br /&gt;&lt;span&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;}&lt;br /&gt;&lt;span&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;SafeArrayUnaccessData(psa);&lt;br /&gt;}&lt;br /&gt;The code above, would work to go through all elements for &amp;ndash;any type of-SafeArray, VT_UI1, VT_BSTR, VT_VARIANT, because we assumed, for instance, that a VT_UI1, would be one byte long, isn&amp;rsquo;t it? And a BSTR Safe Array, would be a memory block, of BSTR pointers. And a VARIANT array, would have been a block of elements, consisting of VARIANTS.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;So the code above, just worked, and looks in fact, pretty simple, fast and elegant.&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;font face="Calibri"&gt;Why so? Because it avoided the task to construct the indices one by one, and to fetch the element by using SafeArrayGetElement(psa, rgindices, outputvalue). &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;font face="Calibri"&gt;&lt;br /&gt;This one surely works, but has two important disadvantages, &lt;br /&gt;1) when you deal with a known 3D or 2D sized-array, it&amp;#39;s easy to fill the rgIndices in a loop, but if the dimensions are unknown, it would be required to iterate through the elements by other means. So&amp;nbsp; you&amp;rsquo;re up to do some nasa stuff! &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;. &lt;br /&gt;2)&lt;span&gt;&amp;nbsp; &lt;/span&gt;SafeArrayGetElement is relatively slow, since it copies the out value and you need to release the output (such as variants and strings). It&amp;rsquo;s like pumping around lots of memory, especially when the array is huge. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;font face="Calibri"&gt;To get this working, I had to refresh my knowledge of some informatics school I did in the past, about simple math, about carry over on signed numbers. Since SafeArrays have different lowerbounds and upperbound ranges per dimension, you cannot simply multiply by a known row size, to initialize it. But anyway, to make a longer story shorter, and I might lack the correct choice of words, for things that I technically just &amp;lsquo;see&amp;rsquo;, I wrote the code for you. It&amp;rsquo;s pretty cool, I could not find such code through Google. &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span&gt;&lt;br /&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;Some tips. I decided to avoid reading the pointer to the safearray descriptor at all, because I saw some unexplainable swapping of rgsaBounds. Better use the API if there is one!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;// assume psa to be of SAFEARRAY and this code is using ATL version 8&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;LONG cDims = SafeArrayGetDim(psa);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;//we &amp;lsquo;rebuild&amp;rsquo; the bounds by using the API, not by reading the psa structure directly to avoid unclear behaviour&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;br /&gt;&lt;font color="#000000"&gt;CTempBuffer&amp;lt;SAFEARRAYBOUND&amp;gt; psaBound(cDims);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;CTempBuffer&amp;lt;LONG&amp;gt; rgIndices(cDims);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;LONG dimPointer = 0; &lt;/font&gt;&lt;span style="color:green;"&gt;// our dimension pointer, we go from left to right to build up the rgIndices&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;LONG currentEl = 0, ubound, lbound;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;for&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt; (LONG x = 0; x &amp;lt; cDims; x++)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SafeArrayGetLBound(psa, x + 1, &amp;amp;lbound);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SafeArrayGetUBound(psa, x + 1, &amp;amp;ubound);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;psaBound[x].cElements = ubound - lbound + 1;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;psaBound[x].lLbound = rgIndices[x] = lbound;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:green;"&gt;// locking is not optional, it is needed.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;SafeArrayLock(psa);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;for&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;(;;) &lt;/font&gt;&lt;span style="color:green;"&gt;//termination is decided within the loop&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (rgIndices[dimPointer] &amp;lt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&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;(LONG)psaBound[dimPointer].cElements + psaBound[dimPointer].lLbound) &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&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;VARIANT* pVar ;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;&lt;span&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;// use the fast version instead of SafeArrayGetElement!&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&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;hr = SafeArrayPtrOfIndex(psa, rgIndices, (&lt;/font&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt;**)&amp;amp;pVar);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (FAILED(hr))&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&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;MYBAILOUT(hr);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&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;rgIndices[dimPointer]++; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:green;"&gt;//this terminates the for as soon as we reached the last array element&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (++currentEl == lElements)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&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;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:blue;"&gt;break&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;// our carry on overflow stuff goes from left to right&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:blue;"&gt;while&lt;/span&gt;&lt;font color="#000000"&gt;(rgIndices[++dimPointer]++ == &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(LONG)psaBound[dimPointer].cElements + psaBound[dimPointer].lLbound)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:green;"&gt;//reset previous cols to initial lowerbound from left to &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:green;"&gt;// most right carry position&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&lt;font color="#000000"&gt; (LONG z = 0; z &amp;lt; dimPointer; z++)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&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;rgIndices&lt;img src="http://technolog.nl/emoticons/emotion-47.gif" alt="Person" /&gt; = psaBound&lt;img src="http://technolog.nl/emoticons/emotion-47.gif" alt="Person" /&gt;.lLbound;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;&lt;span&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;// if carry has been done, we start counting on left again&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dimPointer= 0;&lt;span&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; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;To visualise this, I think it&amp;rsquo;s usefull to dry test this using a matrix.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;Imagine, we have a script, that was created by your customer, in VBSCript and youre superpower, martian CPP needs to do something with this data. &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;So, the Customer code could be:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;Redim MyArray(3,2)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;How would our dynamic rgIndice be iterated?&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;rgIndices would follow this pattern.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;table cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse:collapse;border:medium none;"&gt;&lt;tr&gt;&lt;td style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:83.4pt;padding-top:0cm;background-color:transparent;border:black 1pt solid;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Left dimension&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Right dimension&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Absolute element position&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;6&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;7&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;8&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;9&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;10&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;11&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font color="#000000" face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;Of course, the algorithm, would go through any array, with any dimension.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;Now have much fun with this code, if you needed it in your code. Don&amp;rsquo;t forget to add error handling which I left out to keep it short. And sure, you could write some C# stuff, for your COM interop to deal with array marshaling as well.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;If this code was very useful for you, don&amp;rsquo;t forget to pay a visit to a component that uses this handy trick at &lt;a href="http://www.nieropwebconsult.nl/asp_session_manager.htm" title="ASP Session Manager"&gt;http://www.nieropwebconsult.nl/asp_session_manager.htm&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1248" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/CPP/default.aspx">CPP</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/ATL/default.aspx">ATL</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/SafeArray/default.aspx">SafeArray</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Memory+Storage+Layout+for+Safe+Arrays/default.aspx">Memory Storage Layout for Safe Arrays</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/C_2B002B00_/default.aspx">C++</category></item><item><title>HttpWebRequest on DotNet 2.0 driving you crazy for a B2B request? Disable ServicePointManager.Expect100Continue first!</title><link>http://technolog.nl/blogs/eprogrammer/archive/2007/07/24/HttpWebRequest-on-DotNet-2.0-driving-you-crazy-for-a-B2B-request_3F00_-Disable-ServicePointManager.Expect100Continue-first_2100_.aspx</link><pubDate>Tue, 24 Jul 2007 16:52:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1247</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1247.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1247</wfw:commentRss><description>&lt;p&gt;Imagine, you have written a succesfull gateway to say, the European Community to check the validity of a VAT number.&lt;/p&gt;&lt;p&gt;It always works, but suddenly it does not work anymore. What&amp;#39;s up? Could it be that some service pack modified the behaviour of the HttpWebRequest (including DotNet 2.0?) Sure&amp;nbsp; it is! see &lt;a href="http://support.microsoft.com/kb/915599"&gt;http://support.microsoft.com/kb/915599&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This posting might spare you several hours. The idea of the Expect100Continue setting is, that postdata is sent to the webserver in a separate post sequence package. But not all web servers like IIS (sure I&amp;#39;m MVP &lt;img src="http://technolog.nl/emoticons/emotion-2.gif" alt="Big Smile" /&gt;) are full featured so in this case, this feature was hard to detect, only by using Netmon, I could figure what the &lt;span style="color:#2b91af;"&gt;&lt;font face="Courier New"&gt;HttpWebRequest&amp;nbsp;&amp;nbsp;was doing under the .NET runtime hood.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The Uri to the European VAT check is &lt;font color="#008000" size="2"&gt;http://ec.europa.eu/taxation_customs/vies/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;And it does a POST request to &lt;font color="#800080"&gt;viesquer.do&lt;u&gt; &lt;br /&gt;(&lt;/u&gt;the previous obsolete URL was&amp;nbsp; &lt;font color="#008000" size="2"&gt;http://europa.eu.int/comm/taxation_customs/vies/cgi-bin/viesquer&lt;u&gt;)&lt;/u&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#008000" size="2"&gt;It had worked before because it just dit a GET request instead of a POST. &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#008000"&gt;The steps that I walk through normally to write such a gateway, &lt;/font&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;font color="#008000"&gt;opening my browser&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color="#008000"&gt;Fill the form &lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color="#008000"&gt;Start Netmon 2.1 (or higher)&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color="#008000"&gt;Post the data&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color="#008000"&gt;Stop Netmon and filter on the HTTP protocol.&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;font color="#008000"&gt;Now it&amp;#39;s up to you to emulate the postdata and be sure that the character encoding is according to the supported one. In my case, I assume that UTF-8 is the worldstandard (it should work for most sites).&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#008000"&gt;The code below is technically correct for the mentioned purpose but it performs no validation checking. &lt;br /&gt;If you wish more flexibility some more work has to be done.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;static&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; doVatCheck(&lt;span style="color:blue;"&gt;string&lt;/span&gt; vat, &lt;span style="color:blue;"&gt;string&lt;/span&gt; state)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;string&lt;/span&gt; urlQuery = &lt;span style="color:#a31515;"&gt;@&amp;quot;http://ec.europa.eu/taxation_customs/vies/viesquer.do&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:green;"&gt;//important! The WebLogic Server 8.1 SP3 clearly does not support IETF RFC 2616 Section 10.1.1.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:green;"&gt;// so we disable the expect100 header and HTTP behaviour&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:#2b91af;"&gt;ServicePointManager&lt;/span&gt;.Expect100Continue = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:#2b91af;"&gt;HttpWebRequest&lt;/span&gt; req;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:#2b91af;"&gt;StreamReader&lt;/span&gt; read=&lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&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&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:#2b91af;"&gt;Encoding&lt;/span&gt; enc = System.Text.&lt;span style="color:#2b91af;"&gt;Encoding&lt;/span&gt;.UTF8;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt; sw = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(enc, sw, &lt;span style="color:#a31515;"&gt;&amp;quot;ms&amp;quot;&lt;/span&gt;); //member state&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(sw, &lt;span style="color:#a31515;"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(enc, sw, state);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(sw, &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;amp;&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(enc, sw, &lt;span style="color:#a31515;"&gt;&amp;quot;iso&amp;quot;&lt;/span&gt;); //same as member state, ISO country code&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(sw, &lt;span style="color:#a31515;"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(enc, sw, state);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(sw, &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;amp;&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(enc, sw, &lt;span style="color:#a31515;"&gt;&amp;quot;vat&amp;quot;&lt;/span&gt;); // 12no VATno. Do not submit dots or spaces&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(sw, &lt;span style="color:#a31515;"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;advancePos(enc, sw, vat);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;req = (&lt;span style="color:#2b91af;"&gt;HttpWebRequest&lt;/span&gt;)&lt;span style="color:#2b91af;"&gt;HttpWebRequest&lt;/span&gt;.Create(urlQuery);&lt;/span&gt; &lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;req.Method = &lt;span style="color:#a31515;"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;req.ContentType = &lt;span style="color:#a31515;"&gt;&amp;quot;application/x-www-form-urlencoded&amp;quot;&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;// optional setting, UserAgent. A firewall could block if no browser is detected&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;req.UserAgent = &lt;span style="color:#a31515;"&gt;&amp;quot;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;long&lt;/span&gt; contLen = req.ContentLength = sw.Position;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Stream&lt;/span&gt; str = req.GetRequestStream();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;str.Write(sw.GetBuffer(), 0, (int)contLen);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;str.Flush();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&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="color:blue;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&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&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;read = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;StreamReader&lt;/span&gt;(req.GetResponse().GetResponseStream(), enc);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;string&lt;/span&gt; buf = read.ReadToEnd();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;read.Close();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;return&lt;/span&gt; buf.IndexOf(&lt;span style="color:#a31515;"&gt;&amp;quot;Yes, valid VAT number&amp;quot;&lt;/span&gt;) &amp;gt;= 0;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;WebException&lt;/span&gt; ex)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:green;"&gt;//ex.st&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;string&lt;/span&gt; errr = (urlQuery + ex.Message);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; advancePos(&lt;span style="color:#2b91af;"&gt;Encoding&lt;/span&gt; enc, &lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt; sw, &lt;span style="color:blue;"&gt;string&lt;/span&gt; val)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] buf = &lt;span style="color:#2b91af;"&gt;HttpUtility&lt;/span&gt;.UrlEncodeToBytes(val, enc);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;sw.Write(bufje, 0, buf.Length);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; advancePos(&lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt; sw, &lt;span style="color:blue;"&gt;char&lt;/span&gt; val)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;sw.WriteByte((&lt;span style="color:blue;"&gt;byte&lt;/span&gt;)val);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1247" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Expect100Continue/default.aspx">Expect100Continue</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/HttpWebRequest/default.aspx">HttpWebRequest</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/VAT+check/default.aspx">VAT check</category></item><item><title>ATL: Tiny but good Improvements on Visual Studio Sevice Pack 1 for ATL.</title><link>http://technolog.nl/blogs/eprogrammer/archive/2006/12/25/ATL_3A00_-Tiny-but-good-Improvements-on-Visual-Studio-Sevice-Pack-1-for-ATL_2E00_.aspx</link><pubDate>Mon, 25 Dec 2006 10:35:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1145</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1145.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1145</wfw:commentRss><description>&lt;p&gt;I&amp;#39;m glad to see, that MS still did not get rid of ATL and continued to support us, that&amp;#39;s those guys, who think that .NET is really awful, but not the holy grail :)&lt;/p&gt;&lt;p&gt;If you want to see it yourselfs, get a copy of windiff.exe or just run it, and compare your directories.&amp;nbsp;It&amp;#39;s a very handy tool, to compare source codes!&amp;nbsp;&lt;/p&gt;&lt;p&gt;So, I compared some features on ATL. Quickly I found some differences in atlcomcli.h (I did not check everything however) and the improvements are OK!&lt;/p&gt;&lt;p&gt;Another part of the ATL source code, seems&amp;nbsp;related to HTML and internet (ISAPI). Lots of checks and code has been added to make sure your precious HTML / encoding etc is kept in tact.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Well, which improvements? As you might know that ATL is all, mainly about writing non-UI unmanaged code, such as COM components or using powerfull small sized wrappers around kernel-items like security, string management, etc.&lt;/p&gt;&lt;p&gt;At first, finally, I found that MS recognized that SafeArrayGetVartype is flawed, since it does not really fetch the VARTYPE of the array in all situations. So they wrote AtlSafeArrayGetActualVartype. &lt;/p&gt;&lt;p&gt;Another things is &lt;em&gt;CComVariant::Clear()&lt;/em&gt; which was a dangerous function to use! Why and when? Because the function it wraps, is VariantClear and variantClear does only set vt to VT_EMPTY, but it does not &amp;#39;zero&amp;#39; the rest of the VARIANT struct. Some programs, do expect in/out variables, and in the case that it is not always testing for the vt (variant type)&amp;nbsp;and reallocates the CComVariant instance, it might erronously reallocate &amp;#39;freed&amp;#39; or&amp;nbsp;&amp;#39;zombie&amp;#39;-pointers.&lt;/p&gt;&lt;p&gt;So my advise is to never use &lt;em&gt;CComVariant::Clear()&lt;/em&gt; but use CComVariant::ClearToZero() now to avoid a case of reallocating zombie data!&lt;/p&gt;&lt;p&gt;Another handy improvements is a new overloaded method on the WriteToStream member function.&lt;br /&gt;It is &lt;em&gt;CComVariant::WriteToStream(IStream *pstr, VARTYPE vt);&lt;/em&gt;&lt;/p&gt;&lt;p&gt;So, if you write the current variant to a certain stream, you can convert it to a BSTR (for instance) using this extra new parameter..&lt;/p&gt;&lt;p&gt;Then we got some important bugfixes in atldb.h and atldbcli.h some annotation and datatype and even&amp;nbsp;template fixes. &lt;/p&gt;&lt;p&gt;Lets see atlutil.h. Lots of new helper functions have been added. AtlStrToNum and functions that help to convert and to support the conversion to and from __int64 (LONGLONG) datatype. Normally, I always had to lookup for such functions into the VC function library and to add some wrappers around them.&lt;/p&gt;&lt;p&gt;Once I checked this all, and I recompiled one of my CPP,&amp;nbsp;ATL&amp;nbsp;projects, the size became just slightly bigger. But who cares? If this is all about more robust and safe code, I&amp;#39;m not disappointed by the Sp1 for VC on Visual Studio 2005. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;(I was disappointed, when MS deprecated a lot of syntax without any announcements since of Visual Studio 2003)&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1145" width="1" height="1"&gt;</description></item><item><title>HOWTO: Associate a custom WKGUID (well known guid) to a custom Container</title><link>http://technolog.nl/blogs/eprogrammer/archive/2006/10/05/HOWTO_3A00_-Associate-a-custom-WKGUID-_2800_well-known-guid_2900_-to-a-custom-Container.aspx</link><pubDate>Thu, 05 Oct 2006 11:05:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1127</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1127.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1127</wfw:commentRss><description>&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;Active Directory and ADSI (ldap in fact) have many unutilized features that, if the APIs would explain better be used much better!&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;Let me draw a situation for you.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Imagine you have an app, that is distributed and sold among international customers (congrats for that by the way &lt;/font&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;). Now there could happen 2 things, or 3 if nothing happens is a count as well). &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 36pt;text-indent:-18pt;tab-stops:list 36.0pt;"&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Times New Roman"&gt;&lt;font size="3"&gt;1)&lt;/font&gt;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Times New Roman" size="3"&gt;Your company suddenly got sold out to a rich guy or girl and now everything gets renamed including your &amp;lsquo;custom company container&amp;rsquo;. &lt;br /&gt;So cn=ourcompany data,cn=Program Data,dn=nwtraders,dc=msft&lt;br /&gt;Must become (because your boss asks you to do so!)&lt;br /&gt;cn=thenewcompany data,cn=Program data,dn=nwtraders,dc=msft&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 36pt;text-indent:-18pt;tab-stops:list 36.0pt;"&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Times New Roman"&gt;&lt;font size="3"&gt;2)&lt;/font&gt;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Some dn (distinguished Name) is subject to translation. Eg: &lt;br /&gt;cn=Program Information,cn=etc blah blah&lt;br /&gt;must be translated (because your boss asks you to do so &lt;/font&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt; ) to&lt;br /&gt;cn=Information du programme,cn=etc blah blah&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;In both situations 1 and 2 you&amp;rsquo;ll have to keep a list of paths per language and many companies of course, understand this is a difficult and risky task, so they might choose to keep up with a single international English name.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;table cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td style="background-color:transparent;border:#ece9d8;"&gt;&lt;div&gt;&lt;p class="MsoNormal" style="margin:12pt 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Note: The WKGUID protects against renaming or translating, but it is not meant to &amp;lsquo;protect&amp;rsquo; against moving your container within Active Directory)&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;Why should you accept this risk &lt;em&gt;if Active Directory supports immunity against renaming this out of the box if you associate a WKGUID?&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;em&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;However there is no obvious documentation about this and you just should know that setting this property more or less is hidden through usage of IDirectoryObject while ADSI /scripting/vb6 environments were not able to use this interface.&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;Worse, the sample at the MSDN might be working but goes lowest by using the ldap_connect API within a ADSI call (that&amp;rsquo;s rather dirty) instead of using CLSID_DNWithBinary and the sample is &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ad/ad/example_code_for_creating_a_container_object.asp"&gt;&lt;font color="#800080" face="Times New Roman" size="3"&gt;flawed&lt;/font&gt;&lt;/a&gt;&lt;font face="Times New Roman" size="3"&gt; with leaks but let&amp;rsquo;s not bash the writer, I&amp;rsquo;m not intending to do so).&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;(update) b.t.w. in the attachment temp.zip you&amp;#39;ll find full source code for the sample. Note that Active Directory has a bug that makes custom WKGUIDs useless. It simply cannot find your custom WKGUID. I reported this bug to Microsoft.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;How could you ever figure that WKGUID and it&amp;rsquo;s query syntax is related to the following attribute: &amp;lsquo;otherWellKnownObjects&amp;rsquo;?&lt;/font&gt;&lt;font size="3"&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;This sort of documentation, it&amp;#39;s&amp;nbsp;complexity in Active Directory on LDAP makes it hard to see any utilization for this feature.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;I hope to support MS-es Active Directory (that I love, just as IIS and SQL server) usage and ease in practice by posting the following sample code.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;Note that this code is not &amp;lsquo;well-formed&amp;rsquo; and &amp;lsquo;error-proof&amp;rsquo; but it works and gives you an idea.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;The logging (debug feature) is done through the logging module posted just before this posting.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;Now how do we profit from this feature?&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;Imagine you have created through an LDIF or through code a container object&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;cn=our CompanyData,cn=Program Data,dc=nwtraders,dc=msft&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 36pt;text-indent:-18pt;tab-stops:list 36.0pt;"&gt;&lt;font face="Times New Roman"&gt;&lt;span&gt;&lt;span&gt;&lt;font size="3"&gt;1)&lt;/font&gt;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size="3"&gt;Now we associate &amp;lsquo;our CompanyData&amp;rsquo; with the &amp;lsquo;otherWellKnownObjects&amp;rsquo; property using a custom hexadecimal guid &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;ldquo;&lt;span style="color:maroon;"&gt;81a3469a653959419309b33e27bdd2c9&amp;rdquo;!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 36pt;text-indent:-18pt;tab-stops:list 36.0pt;"&gt;&lt;font face="Times New Roman"&gt;&lt;span&gt;&lt;span&gt;&lt;font size="3"&gt;2)&lt;/font&gt;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size="3"&gt;Eg: &lt;/font&gt;&lt;/font&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;WriteADSAttributeDnWithString([ourcompnayCN], L&amp;rdquo;cn=our Company Data,cn=Program Data,dc=nwtraders,dc=msft&amp;rdquo;, ourGUID, ADS_ATTR_APPEND&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 36pt;text-indent:-18pt;tab-stops:list 36.0pt;"&gt;&lt;span&gt;&lt;span&gt;&lt;font face="Times New Roman"&gt;&lt;font size="3"&gt;3)&lt;/font&gt;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Now you can query your company data like this, no matter your company is being renamed in future&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;, through the following syntax: LDAP://&amp;lt;WKGUID=&lt;span style="color:maroon;"&gt;8a3469a653959419309b33e27bdd2c9,cn=Program Data,dc=nwtraders,dc=msft&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 18pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:#ff6600;"&gt;&lt;font face="Times New Roman"&gt;Normally the dn for &lt;em&gt;Program Data&lt;/em&gt; is WKGUID-ed by Microsoft as well! The Program Data container should be reliably formatted as &lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:#ff6600;font-family:'Courier New';"&gt;L&amp;quot;LDAP://&amp;lt;WKGUID=%s,%s&amp;gt;&amp;quot;, GUID_PROGRAM_DATA_CONTAINER_W, L&amp;rdquo;dc=nwtraders,dc=msft&amp;rdquo;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;span style="z-index:3;position:absolute;"&gt;&lt;table cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td style="background-color:transparent;border:#ece9d8;"&gt;&lt;div class="shape" style="padding-right:7.95pt;padding-left:7.95pt;padding-bottom:4.35pt;padding-top:4.35pt;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Note: After you usage of the WKGUID or the GUID- syntax, you must resolve the &lt;em&gt;fully qualified dn&lt;/em&gt; by using the &amp;lsquo;distinguishedName&amp;rsquo; property and refetching your Actife Directory object before you go on with it.&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/span&gt;&lt;font face="Times New Roman" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;table cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td style="background-color:transparent;border:#ece9d8;"&gt;&lt;div&gt;&lt;p class="MsoNormal" style="margin:12pt 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;Note: You would wish you could set the objectGUID attribute at creation of your object instead of the WKGUID. Unfortunately, this value is generated by Active Directory itself.)&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;STDMETHODIMP WriteADSAttributeDnWithString(&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 36pt;text-indent:36pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;IADs *piADs, &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 36pt;text-indent:36pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;PCWSTR dn, &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 36pt;text-indent:36pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;PCWSTR guid) &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CComVariant v;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;CComPtr&amp;lt;IADsDNWithBinary&amp;gt; dnWithBin;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CComBSTR assocDn(&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;dn&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;dnWithBin.CoCreateInstance(CLSID_DNWithBinary);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;v.vt = VT_UI1 | VT_ARRAY;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;text-indent:36pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;hr = ConvertHexGuidToArray(guid, &amp;amp;v.parray);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hr = dnWithBin-&amp;gt;put_BinaryValue(v);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hr = dnWithBin-&amp;gt;put_DNString(assocDn);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;text-indent:36pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;text-indent:36pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;CComBSTR attribute( L&lt;span style="color:maroon;"&gt;&amp;quot;otherWellKnownObjects&amp;quot;)&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;text-indent:36pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;v.Clear();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;v.vt = VT_DISPATCH;&lt;span&gt;&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&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dnWithBin.QueryInterface(&amp;amp;v.pdispVal);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hr = pADs-&amp;gt;Put(attribute, v);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hr = pADs-&amp;gt;SetInfo();&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; hr;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;/span&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;// converts hexadecimal string to a octet encoded byte array&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;STDMETHODIMP ConvertHexGuidToArray(PCWSTR hexGuid, LPSAFEARRAY *sa)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (hexGuid == NULL) &lt;span style="color:blue;"&gt;return&lt;/span&gt; E_INVALIDARG;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; hexLen = (&lt;span style="color:blue;"&gt;int&lt;/span&gt;)wcslen(hexGuid);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;HRESULT hr = S_OK;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CTempBuffer&amp;lt;CHAR&amp;gt; sHex(hexLen);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; loopLen = hexLen;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;while&lt;/span&gt;(loopLen-- != 0)&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;sHex[loopLen] = (CHAR) hexGuid[loopLen];&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SAFEARRAY *temp= SafeArrayCreateVector(VT_UI1, 0, hexLen / 2);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (temp == NULL) &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;return E_OUTOFMEMORY;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;PBYTE dst ;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hr = SafeArrayAccessData(temp, (&lt;span style="color:blue;"&gt;void&lt;/span&gt;**)&amp;amp;dst);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; dstLen = hexLen /2;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (hr == S_OK)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;AtlHexDecode(sHex, hexLen, dst, &amp;amp;dstLen ); &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;hr = SafeArrayUnaccessData(temp);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&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;*sa = temp; &lt;span style="color:green;"&gt;//return the array&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; hr;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1127" width="1" height="1"&gt;</description><enclosure url="http://technolog.nl/blogs/eprogrammer/attachment/1127.ashx" length="8398" type="application/x-zip-compressed" /><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/ATL/default.aspx">ATL</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/WKGUID/default.aspx">WKGUID</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/rename-safety/default.aspx">rename-safety</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/translation-safe/default.aspx">translation-safe</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Active+Directory/default.aspx">Active Directory</category></item><item><title>[ATL, CPP] How to log to a machine global logfile from different threads and processes.</title><link>http://technolog.nl/blogs/eprogrammer/archive/2006/10/01/_5B00_ATL_2C00_-CPP_5D00_-How-to-log-to-a-machine-global-logfile-from-different-threads-and-processes_2E00_.aspx</link><pubDate>Sun, 01 Oct 2006 14:57:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1125</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1125.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1125</wfw:commentRss><description>&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Each self-respecting programmer and software team uses logging features.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;In my current job on ASP.NET, each click, every navigation and message is logged. Very handy indeed because you would like to&amp;nbsp;support your customers.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;For a classic C++ project this is not so easy to do. You can use ATLTRACE2 or AtlTrace and these macro&amp;#39;s have the advantage that at release time, they won&amp;#39;t stuff your code with unnecessary statements. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;However, in case you have a support incident on your code that runs with a client, you&amp;#39;ll have to add tools or to deliver windbg.exe to read those statements and to hand over a debug dll or exe. And you have to instruct your customers to save the log to a file. I&amp;#39;m not happy at this of course, I might be mistaken and some C++ expert tells me how easy this could be done in fact. ;).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;So I wrote such a class. It is tested on several processes (as asp can do, several w3wp.exe processes can load your COM dll) that write to a single log file.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;So what do we need to care for?&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Log to a single file from one or more processes that load my specific COM dll&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Log to 1) Debug Output 2) a file 3) both, 4) none&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;If logging is switched off, it must not cause performance degration.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;If we write to the file, we must synchronize, we use a Mutex.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Our code that utilizes this class, must (preferable) access a singleton instance of our class per DLL&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Here comes the source...&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;class&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; LoggingModule&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;public&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;:&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LoggingModule() ;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ~LoggingModule();&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;//releases resources&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; Close(&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;bool&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; deleteLogFile = &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;false&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;);&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; Write(PCWSTR pszFormat, ...);&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; set_Logging(&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; enable);&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;// 0 = %windir%\Temp, 1=%userprofile%\Local Settings\Temp&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; set_TempLocation(&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; location);&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; get_Logging();&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;private&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;:&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAtlFile m_file;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;//0 disabled 1 = to file, 2 = to Debug 3 = both&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; m_LoggingEnabled; &lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; m_tempLocation;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HANDLE m_hMutex;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComBSTR m_MutexName ;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;//member variable, so we enable BSTR caching. A lot more efficient&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComBSTR m_bstrTrace, m_logFileName, m_fmt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;extern&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; LoggingModule logModule;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;// implementation of LoggingModule&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;LoggingModule::LoggingModule(&lt;span style="color:blue;"&gt;void&lt;/span&gt;) &lt;span style="color:blue;"&gt;throw&lt;/span&gt;() : &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_LoggingEnabled(0), &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_hMutex(NULL)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; LoggingModule::set_TempLocation(&lt;span style="color:blue;"&gt;int&lt;/span&gt; location) &lt;span style="color:blue;"&gt;throw&lt;/span&gt;()&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_tempLocation = location;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; LoggingModule::set_Logging(&lt;span style="color:blue;"&gt;int&lt;/span&gt; enable) &lt;span style="color:blue;"&gt;throw&lt;/span&gt;()&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{ &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_LoggingEnabled = enable;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; ((m_LoggingEnabled &amp;amp; 1) == 1)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_logFileName.SetLength(MAX_PATH);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD bufLen = GetModuleFileNameW(_AtlBaseModule.GetModuleInstance(), m_logFileName, MAX_PATH);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PathStripPathW(m_logFileName);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PathRenameExtensionW(m_logFileName, L&lt;span style="color:maroon;"&gt;&amp;quot;.LOG&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;//strip right length&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_logFileName.SetLength((&lt;span style="color:blue;"&gt;unsigned&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt;)wcslen(m_logFileName));&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_MutexName = L&lt;span style="color:maroon;"&gt;&amp;quot;Global\\&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_MutexName += m_logFileName;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CComBSTR buf(MAX_PATH);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;if&lt;/span&gt; (m_tempLocation == 0)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; bufLen = GetSystemWindowsDirectoryW(buf, MAX_PATH);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; bufLen = GetTempPathW(MAX_PATH, buf);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;if&lt;/span&gt; (bufLen == 0)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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.Format(L&lt;span style="color:maroon;"&gt;&amp;quot;error %d\n&amp;quot;&lt;/span&gt;, GetLastError());&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; OutputDebugStringW(buf);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; m_logFileName.Empty();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; m_LoggingEnabled ^= 1; //disable file logging&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;return&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;//strip right length again&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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.SetLength(bufLen);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 += L&lt;span style="color:maroon;"&gt;&amp;quot;\\TEMP\\&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 += m_logFileName;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;// now m_LogFileName looks like C:\Windows\Temp\myDll.Log&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; m_logFileName.Attach(buf.Detach());&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;//Create EveryOne in a language independend way&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SID_IDENTIFIER_AUTHORITY sia = {SECURITY_WORLD_SID_AUTHORITY};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CSid everyone(sia, 1, SECURITY_WORLD_RID);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;// we must use a Security Descriptor, otherwise other w3wp.exe processes cannot&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;// inherit the mutex!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CSecurityDescriptor secDescr;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;// ATL does not initialize this object at construction??&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HRESULT hr = secDescr.Initialize();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;if&lt;/span&gt; (hr == S_OK) hr = secDescr.Allow((PSID)everyone.GetPSID(), MUTANT_ALL_ACCESS);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;if&lt;/span&gt; (FAILED(hr))&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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.Format(L&lt;span style="color:maroon;"&gt;&amp;quot;secDescr.Allow failed with %x\n&amp;quot;&lt;/span&gt;,hr);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; OutputDebugStringW(buf);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; m_LoggingEnabled ^= 1;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;return&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECURITY_ATTRIBUTES SecAttrs = {&lt;span style="color:blue;"&gt;sizeof&lt;/span&gt;(SecAttrs), secDescr, TRUE};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;// create the mutex without owning it.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;// if another process (w3wp) already did the creation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;// we just ignore the error and m_hMutex stays nill&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_hMutex = CreateMutexW(&amp;amp;SecAttrs, FALSE, m_MutexName);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;if&lt;/span&gt; (m_file == NULL&amp;nbsp; || m_logFileName.IsEmpty())&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; hr = m_file.Create(m_logFileName, &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE_GENERIC_WRITE, &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp; FILE_SHARE_READ | FILE_SHARE_WRITE, &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OPEN_ALWAYS);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;if&lt;/span&gt; (SUCCEEDED(hr))&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ULONGLONG sz;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (SUCCEEDED(m_file.GetSize(sz)))&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//it&amp;#39;s a unicode-8 logfile&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (sz == 0)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE PreAmble[] = {0xEF, 0xBB, 0xBF};&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_file.Write(PreAmble, &lt;span style="color:blue;"&gt;sizeof&lt;/span&gt;(PreAmble));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//TODO: finish&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (sz &amp;gt; 10000)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color:green;"&gt;//truncate first 5000 lines and restart&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_file.Seek(sz);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.Format(L&lt;span style="color:maroon;"&gt;&amp;quot;Could not create %s, error %x\n&amp;quot;&lt;/span&gt;, m_logFileName, hr);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutputDebugStringW(buf);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// do not bother to write to the logfile&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_LoggingEnabled ^= 1;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Close();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;} &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; LoggingModule::get_Logging() &lt;span style="color:blue;"&gt;throw&lt;/span&gt;()&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; m_LoggingEnabled;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;LoggingModule::~LoggingModule(&lt;span style="color:blue;"&gt;void&lt;/span&gt;) &lt;span style="color:blue;"&gt;throw&lt;/span&gt;()&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;this&lt;/span&gt;-&amp;gt;Close();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;///&lt;/span&gt;&lt;span style="font-size:10pt;color:gray;font-family:'Courier New';"&gt;&amp;lt;sumarray&amp;gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt; releases resources&lt;/span&gt;&lt;span style="font-size:10pt;color:gray;font-family:'Courier New';"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; LoggingModule::Close(&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;bool&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; deleteLogFile) &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;throw&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;()&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_file.Close();&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_bstrTrace.Empty();&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; (m_hMutex&amp;nbsp; != NULL)&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseHandle(m_hMutex);&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_hMutex = NULL;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;if&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt; (deleteLogFile &amp;amp;&amp;amp; !m_logFileName.IsEmpty())&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteFileW(m_logFileName);&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_logFileName.Empty();&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_fmt.Empty();&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:black;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;// this function writes the debugging information to the logfile&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;// it synchronizes on a mutex so all processes go through this bottleneck&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;// and will &amp;#39;fight&amp;#39; for file access&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;// be sure not to enable such a thing in production&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;void&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; LoggingModule::Write(PCWSTR pszFormat, ...) &lt;span style="color:blue;"&gt;throw&lt;/span&gt;()&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; noFileAccess = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HANDLE mutResult = NULL;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (m_LoggingEnabled == 0)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;return&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt; ((m_LoggingEnabled &amp;amp; 1) == 1)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mutResult = OpenMutexW(MUTANT_ALL_ACCESS, FALSE, MUTEXNAME);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;if&lt;/span&gt; (mutResult != NULL)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; DWORD dwWaitResult = WaitForSingleObject( &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mutResult,&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// handle to mutex&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5000L);&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// five-second time-out interval&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;switch&lt;/span&gt; (dwWaitResult) &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// The thread got mutex ownership.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;case&lt;/span&gt; WAIT_OBJECT_0: &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;span style="color:green;"&gt;//ok&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;// Cannot get mutex ownership due to time-out.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;case&lt;/span&gt; WAIT_TIMEOUT:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;// Got ownership of the abandoned mutex object.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;case&lt;/span&gt; WAIT_ABANDONED: &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutputDebugStringW(L&lt;span style="color:maroon;"&gt;&amp;quot;error on LoggingModule::Write OpenMutex\n&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; noFileAccess = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; m_fmt.Format(L&lt;span style="color:maroon;"&gt;&amp;quot;coult not create mutex to %s err(%d)\n&amp;quot;&lt;/span&gt;, m_logFileName, GetLastError());&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; OutputDebugStringW(m_fmt);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; noFileAccess = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; va_list ptr;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; va_start(ptr, pszFormat);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_bstrTrace.Format(pszFormat, ptr);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; va_end(ptr);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SYSTEMTIME st ;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetLocalTime(&amp;amp;st);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//prepend debugstring with thread and time.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// eg 1040{tab}10:40:50:0599{tab}msg&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_fmt.Format(L&lt;span style="color:maroon;"&gt;&amp;quot;%d\t%02d:%02d:%02d:%04d\t&amp;quot;&lt;/span&gt;, GetCurrentThreadId(), &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; appendCrLf = !m_bstrTrace.EndsWith(L&lt;span style="color:maroon;"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_bstrTrace.Insert(0, m_fmt);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; ((m_LoggingEnabled &amp;amp; 2) == 2)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutputDebugStringW(m_bstrTrace);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;if&lt;/span&gt; (appendCrLf)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; OutputDebugStringW(L&lt;span style="color:maroon;"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// write only to the file if we have access&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (m_file != NULL &amp;amp;&amp;amp; !noFileAccess &amp;amp;&amp;amp; (m_LoggingEnabled &amp;amp; 1) == 1)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ULONGLONG nCurLen;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_file.GetSize(nCurLen);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_file.Seek(nCurLen, FILE_BEGIN);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;if&lt;/span&gt; (appendCrLf)&amp;nbsp;&amp;nbsp;&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; m_bstrTrace.Append(L&lt;span style="color:maroon;"&gt;&amp;quot;\r\n&amp;quot;&lt;/span&gt;, 2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_fmt.Attach(m_bstrTrace.ToByteString());&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_file.Write(m_fmt, m_fmt.ByteLength());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;//clear buffer so we can be sure the buffer advances&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_file.Flush();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:blue;"&gt;if&lt;/span&gt; (mutResult != NULL)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;//release ownership&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; ReleaseMutex(mutResult);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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 style="color:green;"&gt;//close handle (because it is a duplicate!)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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; CloseHandle(mutResult);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&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;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;// in your main CPP file you create -one instance- of this class.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;LoggingModule logModule;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Remarks about the code.&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;the CComBSTR code uses method that are not available by default. To use the super-power-CComBSTR replacement, see my other Blog posting about this class (expect over 3000%&amp;nbsp;bstr performance improvements)&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;This class minimizes file access by prebuffering the&amp;nbsp;debug string.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;It will log to \%windir%\temp\nameofyourdll.log&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;It writes the log as in utf-8 format.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Fans of my code &lt;img src="http://technolog.nl/emoticons/emotion-1.gif" alt="Smile" /&gt; already know that I have abandoned win9x compatibility. This code runs only WinNT and higher.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;It uses ATL. So if you use MFC for instance, you&amp;#39;ll have to replace the CSecurityDescriptor class with an alternative or direct Win API equivalents (which I&amp;nbsp;dislike for being so complex).&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="margin:0cm 0cm 0pt;tab-stops:list 36.0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;dependencies: &lt;span style="color:maroon;"&gt;&amp;lt;atlfile.h&amp;gt;, CComBStr2.h,&amp;nbsp;&amp;lt;atlsecurity.h&amp;gt;, &amp;lt;security.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1125" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/CPP/default.aspx">CPP</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Logging/default.aspx">Logging</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Logfile/default.aspx">Logfile</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Synchronized/default.aspx">Synchronized</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/ATL/default.aspx">ATL</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/singleton/default.aspx">singleton</category></item><item><title>Kerberos Negotiate authentication on IIS sucks</title><link>http://technolog.nl/blogs/eprogrammer/archive/2006/08/22/Kerberos-Negotiate-authentication-on-IIS-sucks.aspx</link><pubDate>Tue, 22 Aug 2006 22:23:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1030</guid><dc:creator>EProgrammer Blog</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1030.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1030</wfw:commentRss><description>I just had to say it! Yes, I was frustrated. Negotiate (through kerberos) on IIS sucks! I love free speech, especially if something said is simply true (Joe Kaplan agreed with me)! Of course, this is not an excuse to be rude to MS employees :), but they never would improve things, if we don&amp;#39;t ask for it right? Why is Kerberos on IIS such a pain? I need an Intranet site, running ASPX to utilize integrated security. That&amp;#39;s nice. So, I don&amp;#39;t have to maintain another user database (bleeh, not again). Secondly, for my AD solutions, I just needed full security based on AD, and (again) not my own security mechanism. I hear you say: &amp;quot;What this fuzz about? It just works? Yes, it just works -as long as the credential on the current browser-IIS session- does not need to go any further than a page. For SQL Server, most developers, still would use standard security (and not pass-through authentication, which needs kerberos). But for Exchange-, ADSI-, or Active Directory enabled pages, pages that -really do something - with Active Directory, IIS and Kerberos really need a professor (Joe Kaplan, but his fee is too high for me :) ) in Windows-kerberos-science. Well, euh, it&amp;#39;s easy, just 3 things to check! there is AD (Active Directory) support (does AD trust IIS+host for delegation?) IIS - support (does IIS support Negotiate?) Browser support (do IE support Negotiate and integrated logon?) And between the lines, you need to make sure (such as using setspn.exe) that it all is going to work. To get this done and configured, you&amp;#39;d better not be a third party intranet supplier! Microsoft, please, fix this. I mean, make it more easy for us. Let me just enumerate some knowledgebase articles that give some checklists. (See knowledge base articles below, note there are much more articles about this subject!) For a script, yummy for you, you might not have found this script before, because I&amp;#39;m just good :). What it does, is checking (enabling) the IIS server delegation. Note, using it is for your own risk! (ps: My setup scripts are preferable VBS because that just works without any version messup). What it does is actually shown in the picture. It checks the middle option. update at 14 sep 2006: Some companies, have disabled netbios features and computer browsing. So they solely have DNS and AD, but this makes IIS fail to use negotiate as well. It just seems that IIS has a lot of legacy network component dependencies. &amp;#39; this checks this IIS server, to be trusted &amp;#39; otherwise, Negotiate (Wdigest) through kerberos will -not- work! &amp;#39; if you don&amp;#39;t like all protocols to be trusted, you should manually correct this property &amp;#39; for this IIS server. Sub SetThisIISServerTrusted() Dim nt, ds, ldapHost, info, accInfo, dnMe Const ADS_NAME_INITTYPE_SERVER = 2, ADS_NAME_TYPE_NT4 = 3, _ ADS_NAME_TYPE_1779 = 1, ADS_UF_TRUSTED_FOR_DELEGATION = &amp;amp;H80000 Set nt = CreateObject( &amp;quot;NameTranslate&amp;quot; ) Set info = CreateObject( &amp;quot;WinNTSystemInfo&amp;quot; ) Set ds = GetObject( &amp;quot;LDAP://rootDSE&amp;quot; ) &amp;#39; the AD server that is serving us must be authorative enough ldapHost = ds.Get( &amp;quot;dnsHostName&amp;quot; ) nt.Init ADS_NAME_INITTYPE_SERVER, ldapHost &amp;#39; computer name is by definition the netbiosname plus a $ nt.Set ADS_NAME_TYPE_NT4, info.DomainName + &amp;quot;\&amp;quot; + info.ComputerName + &amp;quot;$&amp;quot; dnMe = nt.Get(ADS_NAME_TYPE_1779) Set ds = GetObject( &amp;quot;LDAP://&amp;quot; + dnMe) accInfo = ds.Get( &amp;quot;userAccountControl&amp;quot; ) accInfo = accInfo Or ADS_UF_TRUSTED_FOR_DELEGATION ds.Put &amp;quot;userAccountControl&amp;quot; , accInfo On Error Resume Next ds.SetInfo If Err.Number &amp;gt; 0 Then WScript.Echo &amp;quot; Error at SetThisIISServerTrusted:&amp;quot; + Err.Description + &amp;quot;:&amp;quot; + Err.Source + &amp;quot;:&amp;quot; + Hex(Err.Number) End If On Error Goto 0 Set ds = Nothing End Sub PRB: &amp;quot;Access Denied&amp;quot; Error Message When Using ServerXMLHTTP to Access an Authenticated Site ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.KB.v10.en/enu_kbmsxmlkb/msxmlkb/291008.htm Enable negotiate on IE6 ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.KB.v10.en/enu_kbie/ie/299838.htm Troubleshoot IIS negiotiate 326985 http://www.microsoft.com/technet/prodtechnol/windowsserver2003/technologies/security/tkerbdel.mspx Enable negotiate on IIS ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.KB.v10.en/enu_kbiis/iis/215383.htm Enable negotiate using XMLHttp ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.KB.v10.en/enu_kbmsxmlkb/msxmlkb/314404.htm http://support.microsoft.com/kb/326985/...(&lt;a href="http://technolog.nl/blogs/eprogrammer/archive/2006/08/22/Kerberos-Negotiate-authentication-on-IIS-sucks.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1030" width="1" height="1"&gt;</description></item><item><title>Boost BSTR performance for free, by 3000%</title><link>http://technolog.nl/blogs/eprogrammer/archive/2006/07/25/Boost-BSTR-performance-for-free_2C00_-by-3000_2500_.aspx</link><pubDate>Tue, 25 Jul 2006 11:20:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1031</guid><dc:creator>EProgrammer Blog</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1031.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1031</wfw:commentRss><description>You don't need to if you thought so :) use CString only to get the best of string manipulation within the C++ environment in a mixed COM environment. This CComBSTR replacement offers the most you need without having to cast strings forward and backward and loose performance. Expect your multithreaded and SMP performance to improve while still using native BSTR variable storage....(&lt;a href="http://technolog.nl/blogs/eprogrammer/archive/2006/07/25/Boost-BSTR-performance-for-free_2C00_-by-3000_2500_.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1031" width="1" height="1"&gt;</description><enclosure url="http://technolog.nl/blogs/eprogrammer/attachment/1031.ashx" length="13338" type="application/x-zip-compressed" /><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/ATL/default.aspx">ATL</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/CComBSTR/default.aspx">CComBSTR</category></item><item><title>Howto: Dynamically Create Gradient Buttons using ASPX and .NET</title><link>http://technolog.nl/blogs/eprogrammer/archive/2006/07/12/Howto_3A00_-Dynamically-Create-Gradient-Buttons-using-ASPX-and-.NET.aspx</link><pubDate>Wed, 12 Jul 2006 18:08:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1032</guid><dc:creator>EProgrammer Blog</dc:creator><slash:comments>0</slash:comments><comments>http://technolog.nl/blogs/eprogrammer/comments/1032.aspx</comments><wfw:commentRss>http://technolog.nl/blogs/eprogrammer/commentrss.aspx?PostID=1032</wfw:commentRss><description>If you ever might want cute buttons, independently of your clients browser and theme, you might create buttons by using some dynamic GDI based code. I found this solution, which costed just 2 hours programming not bad at all, and you might profit from it as well. This code, automatically wraps text, all using .NET power. It even can be improved, to support hover as well. B.t.w. on Windows Vista XAML supports this but we&amp;rsquo;re still on the internet man! So why not make our own buttons. Paste code below, onto an empty ASPX page (for instance button.aspx), and call use it through the following arguments (other tag arguments omitted for simplicity). &amp;lt;asp:ImageButton id=&amp;rdquo;myButton&amp;rdquo; ImageUrl=Button.aspx?t=Hello%20World&amp;amp;w=150&amp;amp;h=35&amp;rdquo; runat=&amp;rdquo;server&amp;rdquo;/&amp;gt; Syntax below is based on C# 2.0 The output might look like this(appConfig must contain the buttoncolors) public partial class button : System.Web.UI. Page { private static Color parsRgb( string rgbColor) { int red, green, blue; red = int .Parse(rgbColor.Substring(0, 2), System.Globalization. NumberStyles .HexNumber); green = int .Parse(rgbColor.Substring(2, 2), System.Globalization. NumberStyles .HexNumber); blue = int .Parse(rgbColor.Substring(4, 2), System.Globalization. NumberStyles .HexNumber); return Color .FromArgb(red, green, blue); } protected void Page_Load( object sender, EventArgs e) { System.Collections.Specialized. NameValueCollection req= Request.QueryString; //get height string h=req[ &amp;quot;h&amp;quot; ]; //get width string w = req[ &amp;quot;w&amp;quot; ]; // get text string t = req[ &amp;quot;t&amp;quot; ]; if (t == null || t.Length == 0) throw new HttpException ( &amp;quot;QueryString t not supplied&amp;quot; ); int hashCode = t.GetHashCode(); string checkEtag = Request.Headers[ &amp;quot;ETag&amp;quot; ]; if (checkEtag != null &amp;amp;&amp;amp; checkEtag.Length != 0) { if (checkEtag == hashCode.ToString()) { Response.StatusCode = ( int )System.Net. HttpStatusCode .NotModified; Response.StatusDescription = &amp;quot;Not modified&amp;quot; ; Response.SuppressContent = true ; return ; } } req= System.Web.Configuration. WebConfigurationManager .AppSettings; string colrRadiantStart = req[ &amp;quot;btnBgRadiantStart&amp;quot; ]; string fontSize = req[ &amp;quot;btnFontSize&amp;quot; ]; string FontName = req[ &amp;quot;btnFontName&amp;quot; ]; string colrRadiantEnd = req[ &amp;quot;btnBgRadiantEnd&amp;quot; ]; string FontColor = req[ &amp;quot;btnFontColor&amp;quot; ]; System.Drawing. Color ocolorEnd, colorStart, colorFont ; if (colrRadiantStart != null &amp;amp;&amp;amp; colrRadiantStart.Length == 6) colorStart = parsRgb(colrRadiantStart); else throw new HttpException ( &amp;quot;You must provide a valid btnBgColor hex rgb-code in appConfig&amp;quot; ); if (colrRadiantEnd == null || colrRadiantEnd.Length != 6) throw new HttpException ( &amp;quot;You must provide a valid btnBgColor hex rgb-code in appConfig&amp;quot; ); else ocolorEnd = parsRgb(colrRadiantEnd); if (FontColor == null || FontColor.Length != 6) colorFont = Color .Black; //default else colorFont = parsRgb(FontColor); int iH = int .Parse(h); int iW = int .Parse(w); Bitmap oBmp1 = new Bitmap (iW, iH); Graphics oGrp1 = Graphics .FromImage(oBmp1); // seems not to have effect oGrp1.CompositingQuality = CompositingQuality .HighQuality; oGrp1.InterpolationMode = InterpolationMode .HighQualityBilinear; LinearGradientBrush lgb = new LinearGradientBrush ( new Rectangle (0, 0, iW, iH), colorStart, ocolorEnd, LinearGradientMode .Vertical); oGrp1.FillRectangle(lgb, 0, 0, iW, iH); System.Drawing. FontFamily fntFam = new FontFamily (FontName); Font fnt = new Font (fntFam, float .Parse(fontSize)); StringFormat stringFormat = StringFormat .GenericDefault; //we must set this value, other wise text will default to left. stringFormat.Alignment = StringAlignment .Center; SizeF szf = oGrp1.MeasureString(t, fnt, new SizeF (iW, iH), stringFormat); //center PointF FPoint = new PointF ((iW - szf.Width) / 2, (iH - szf.Height) / 2); oGrp1.DrawString(t, fnt, new SolidBrush (colorFont), new RectangleF (FPoint.X, FPoint.Y, szf.Width, szf.Height), stringFormat); Response.ContentType = &amp;quot;image/jpeg&amp;quot; ; Response.Cache.SetETag(hashCode.ToString()); //Response.Cache.SetLastModified(DateTime.Now); Response.Cache.SetCacheability( HttpCacheability .Public); oBmp1.Save(Response.OutputStream, System.Drawing.Imaging. ImageFormat .Jpeg); Response.End(); } }...(&lt;a href="http://technolog.nl/blogs/eprogrammer/archive/2006/07/12/Howto_3A00_-Dynamically-Create-Gradient-Buttons-using-ASPX-and-.NET.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1032" width="1" height="1"&gt;</description></item></channel></rss>