<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Michał Cierniak : Rotor - all</title><link>http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx</link><description>Tags: Rotor - all</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Secure CRT</title><link>http://blogs.msdn.com/michaljc/archive/2005/01/02/345558.aspx</link><pubDate>Mon, 03 Jan 2005 04:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:345558</guid><dc:creator>michaljc</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/345558.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=345558</wfw:commentRss><description>&lt;p&gt;One of the cool new things we are doing in the security push is the conversion of all uses of potentially unsafe CRT (C Runtime) functions to their new, safe counterparts.&amp;nbsp; When we think of unsafe CRT functions, we usually think of string manipulation functions and these functions are probably indeed responsible for most of the security bugs &lt;br&gt;(For a few examples of what can go wrong with the traditional string manipulation functions, read &lt;a href="/michael_howard/archive/2004/12/10/279639.aspx"&gt;this post&lt;/a&gt;) but there are other improvements in the CRT libraries.&amp;nbsp; As &lt;a href="http://whidbey.msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vccrt/html/d9568b08-9514-49cd-b3dc-2454ded195a3.asp"&gt;mentioned on MSDN&lt;/a&gt; the main categories of improvement in CRT are: &lt;a href="http://whidbey.msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vccrt/html/019dd5f0-dc61-4d2e-b4e9-b66409ddf1f2.asp"&gt;parameter validation&lt;/a&gt;, sized buffers, null termination, enhanced error reporting, file system security, Windows security, and format string syntax checking.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;br&gt;For a great introduction to Secure CRT, read &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncode/html/secure03102004.asp"&gt;this article&lt;/a&gt; by Michael Howard.&amp;nbsp; A list of secure CRT functions with short descriptions and links to longer articles is &lt;a href="http://whidbey.msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vccrt/html/f87e5a01-4cb2-4379-9e8f-d4693828c55a.asp"&gt;available&lt;/a&gt; in the Whidbey section of MSDN.&amp;nbsp; Secure CRT is also &lt;a href="/shawnfa/archive/2004/04/08/110097.aspx"&gt;mentioned&lt;/a&gt; by another blogger.&amp;nbsp; A clever way of using templates to avoid typing the extra parameter when the compiler can deduce it itself is described &lt;a href="/greggm/archive/2004/09/17/231076.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Rotor&lt;/strong&gt;&lt;br&gt;Secure CRT functions are being discussed in the context of the ISO/IEC standard for C (in &lt;a href="http://www.open-std.org/jtc1/sc22/wg14"&gt;JTC1/SC22/WG14&lt;/a&gt;).&amp;nbsp; You can read the &lt;a href="http://std.dkuug.dk/jtc1/sc22/wg14/www/docs/n1031.pdf"&gt;submission&lt;/a&gt; and the &lt;a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1059.htm"&gt;Security TR Editor's Report&lt;/a&gt; online.&amp;nbsp; However, since these functions have not been added to the C standard yet and we want to compile Rotor Whidbey on non-Windows platforms, we will include implementations of some of the secure CRT functions in the Rotor distribution.&amp;nbsp; Our current plan is to include only as much as we need for Rotor, so this will not be a complete implementation.&lt;/p&gt;
&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-238213-3";
urchinTracker();
&lt;/script&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=345558" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+general/default.aspx">Rotor - general</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/CLR/default.aspx">CLR</category></item><item><title>Open Source Courses for .NET</title><link>http://blogs.msdn.com/michaljc/archive/2004/10/23/246750.aspx</link><pubDate>Sun, 24 Oct 2004 02:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:246750</guid><dc:creator>michaljc</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/246750.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=246750</wfw:commentRss><description>&lt;p&gt;Open source courses based on&amp;nbsp;.NET are a great resource both for creating courses at other universities and for people who simply want to use the materials to learn something on their own about either .NET in general or Rotor.&amp;nbsp; I know of two such courses available today from the University of Linz in Austria (&lt;a href="http://www.jku.at"&gt;Johannes Kepler Universität Linz&lt;/a&gt;):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://dotnet.jku.at/courses/dotnet"&gt;Application Development with C# and .NET&lt;/a&gt;.&amp;nbsp; I am posting this before I had time to fully explore the web site but apparently there are 700 slides worth of presentations (equivalent to 30 45-minute lectures, in German and English), 200 exercises with sample solutions, a larger case study and references to books that have been written for the course (books are also both in German and English).&lt;/li&gt; &lt;li&gt;&lt;a href="http://dotnet.jku.at/courses/CC"&gt;Compiler Construction&lt;/a&gt;.&amp;nbsp; Again, I haven’t actually read any of this yet but this seems to be a very cool compiler class with over 300 slides and a case study of a complete compiler for Z# (I’ve never heard of Z# and I assume that it must be a language of the level of complexity appropriate for a compiler class).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Other .NET-related&amp;nbsp;materials &lt;a href="http://dotnet.jku.at/courses"&gt;are available&lt;/a&gt; on a companion web site.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-238213-3";
urchinTracker();
&lt;/script&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=246750" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+general/default.aspx">Rotor - general</category></item><item><title>Rotor benchmarks</title><link>http://blogs.msdn.com/michaljc/archive/2004/07/19/188007.aspx</link><pubDate>Tue, 20 Jul 2004 04:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:188007</guid><dc:creator>michaljc</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/188007.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=188007</wfw:commentRss><description>&lt;p&gt;To date there has been no standard set of benchmarks that do something meaningful, run on Rotor and execute long enough to enable performance measurements.&amp;nbsp; Standard benchmarks are very important for publishing research results because they make easier to understand what applications are being presented in a given paper.&amp;nbsp; &lt;a href="http://research.microsoft.com/%7Ezorn/"&gt;Ben Zorn&lt;/a&gt; from MSR has just published &lt;a href="http://research.microsoft.com/%7Ezorn/benchmarks/default.htm"&gt;two benchmarks&lt;/a&gt;.&amp;nbsp; Hopefully, this is just a start and either Ben or others will put together more applications, so that we have a benchmark suite of 5-10 applications that can be used by all researchers looking into .NET.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;The two benchmarks available today are lcsbench and ahcbench.&amp;nbsp; Lcsbench is a front end of C# compiler written in C#.&amp;nbsp; Ahcbench is an implementation of Adaptive Huffman Compression.&amp;nbsp; Both benchmarks include three inputs of various sizes that achieve different execution times.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Do you know of other nicely packaged benchmarks for .NET?&amp;nbsp; Do they run on Rotor?&amp;nbsp; Let me know!&lt;br&gt;&lt;/p&gt;
&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-238213-3";
urchinTracker();
&lt;/script&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=188007" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+general/default.aspx">Rotor - general</category></item><item><title>IVNET'05</title><link>http://blogs.msdn.com/michaljc/archive/2004/05/28/144254.aspx</link><pubDate>Sat, 29 May 2004 01:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:144254</guid><dc:creator>michaljc</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/144254.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=144254</wfw:commentRss><description>&lt;A href="http://w2ks.dei.isep.ipp.pt/labdotnet/ivnet05.aspx"&gt;IVNET&amp;#8217;05&lt;/A&gt; (Conference of Innovative Views of .NET Technologies) is another conference related to CLI.&amp;nbsp; Its scope is actually much larger but the CFP lists a few areas relevant to my Rotor blog.&amp;nbsp; The two most obvious ones are &lt;EM&gt;programming languages&lt;/EM&gt; and &lt;EM&gt;CLI implementations&lt;/EM&gt;.&amp;nbsp; IVNET&amp;#8217;05 will be held in Porto, Portugal in June 2005.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=144254" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+general/default.aspx">Rotor - general</category></item><item><title>Slides from MSR Academic Days in Portugal</title><link>http://blogs.msdn.com/michaljc/archive/2004/05/28/144184.aspx</link><pubDate>Fri, 28 May 2004 22:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:144184</guid><dc:creator>michaljc</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/144184.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=144184</wfw:commentRss><description>&lt;P&gt;I returned yesterday from the &lt;A href="http://blogs.msdn.com/michaljc/archive/2004/05/11/130168.aspx"&gt;MSR Academic Days&lt;/A&gt;.&amp;nbsp; These events were quite interesting.&amp;nbsp; Organizers of the event in Portugal made the slides used for presentations available &lt;A href="http://research.microsoft.com/collaboration/university/europe/Events/AcademicDays/Portugal/2004/"&gt;on-line&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Slides for my Rotor presentations &lt;A href="http://research.microsoft.com/collaboration/university/europe/Events/AcademicDays/Portugal/2004/RotorIntro-May2004.ppt"&gt;are there&lt;/A&gt;.&amp;nbsp; In addition to Rotor, the presentation also mentions Semiworks and Phoenix at a very high level (two slides for each of these projects).&lt;/P&gt;
&lt;P&gt;There are also other interesting presentations there: Don Syme about &lt;A href="http://research.microsoft.com/collaboration/university/europe/Events/AcademicDays/Portugal/2004/dsyme-spain-portugal-v5.ppt"&gt;innovation in .NET&lt;/A&gt;.&amp;nbsp; Damien Watkins had three talks: about &lt;A href="http://research.microsoft.com/collaboration/university/europe/Events/AcademicDays/Portugal/2004/Portugal%20Comega.ppt"&gt;Comega&lt;/A&gt; (Comega&amp;nbsp;has &lt;A href="http://research.microsoft.com/Comega/"&gt;its own web site&lt;/A&gt;),&amp;nbsp;&lt;A href="http://research.microsoft.com/collaboration/university/europe/Events/AcademicDays/Portugal/2004/Portugal%20Multi-language%20Programming%20in%20.NET.ppt"&gt;multi-language programming&lt;/A&gt; and &lt;A href="http://research.microsoft.com/collaboration/university/europe/Events/AcademicDays/Portugal/2004/Portugal%20Using%20the%20.NET%20Framework%20in%20University%20Courses%20.ppt"&gt;.NET in teaching&lt;/A&gt;.&amp;nbsp; Bruno Cabral &lt;A href="http://research.microsoft.com/collaboration/university/europe/Events/AcademicDays/Portugal/2004/Rail.ppt"&gt;talked&lt;/A&gt; about &lt;A href="http://rail.dei.uc.pt"&gt;RAIL&lt;/A&gt;.&amp;nbsp; Ivan Medvedev talked about &lt;A href="http://research.microsoft.com/collaboration/university/europe/Events/AcademicDays/Portugal/2004/SecurityEMEA.PPT"&gt;Security in CLR&lt;/A&gt;.&amp;nbsp; Other talks were not about .NET&amp;nbsp;but they were all good (some talks were in Portuguese, so I didn't listen to them myself but I heard they were good).&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=144184" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+general/default.aspx">Rotor - general</category></item><item><title>Rotor RFP2 recipients</title><link>http://blogs.msdn.com/michaljc/archive/2004/05/18/134062.aspx</link><pubDate>Tue, 18 May 2004 14:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:134062</guid><dc:creator>michaljc</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/134062.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=134062</wfw:commentRss><description>&lt;p&gt;As &lt;A href="http://blogs.msdn.com/michaljc/archive/2004/05/10/129495.aspx"&gt;mentioned earlier&lt;/a&gt;, we have the final list of researchers awarded grants for proposed work related to Rotor.&amp;nbsp; &lt;a href="http://research.microsoft.com/programs/europe/rotor/2004Projects.aspx"&gt;The list is now public&lt;/a&gt;.&amp;nbsp; Check it out: there are many very exciting projects there.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=134062" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+general/default.aspx">Rotor - general</category></item><item><title>A servicing update of Rotor</title><link>http://blogs.msdn.com/michaljc/archive/2004/05/14/132399.aspx</link><pubDate>Sat, 15 May 2004 02:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:132399</guid><dc:creator>michaljc</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/132399.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=132399</wfw:commentRss><description>&lt;P&gt;Jan &lt;A href="http://discuss.develop.com/archives/wa.exe?A2=ind0405b&amp;amp;L=dotnet-rotor&amp;amp;T=0&amp;amp;F=&amp;amp;S=&amp;amp;P=148"&gt;has just announced&lt;/A&gt; that he created a project with the modifications needed to build and run Rotor on versions of MacOS, FreeBSD and Windows that were released since Rotor was shipped.&amp;nbsp; This servicing project is available at &lt;A href="http://servicing.sscli.net"&gt;http://servicing.sscli.net&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The following new OS versions are supported:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows XP SP2&lt;/LI&gt;
&lt;LI&gt;Windows Server 2003&lt;/LI&gt;
&lt;LI&gt;Mac OS X 10.3 (Panther)&lt;/LI&gt;
&lt;LI&gt;FreeBSD 5.2 &lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=132399" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+general/default.aspx">Rotor - general</category></item><item><title>Rotor talks at MSR Academic Days in May</title><link>http://blogs.msdn.com/michaljc/archive/2004/05/11/130168.aspx</link><pubDate>Wed, 12 May 2004 04:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:130168</guid><dc:creator>michaljc</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/130168.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=130168</wfw:commentRss><description>I will be giving talks about Rotor &lt;a href="http://research.microsoft.com/collaboration/university/europe/Events/AcademicDays/Portugal/2004/"&gt;next week in Vilamoura in&amp;nbsp;Portugal&lt;/a&gt; and the &lt;a href="http://research.microsoft.com/collaboration/university/europe/events/AcademicDays/Spain/2004/"&gt;week after that in Barcelona in Spain&lt;/a&gt;.&amp;nbsp; If you are interested in Rotor and will be around there, let me know even if you will not attend these events.
&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-238213-3";
urchinTracker();
&lt;/script&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=130168" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+general/default.aspx">Rotor - general</category></item><item><title>Rotor BOF notes</title><link>http://blogs.msdn.com/michaljc/archive/2004/05/10/129495.aspx</link><pubDate>Tue, 11 May 2004 02:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:129495</guid><dc:creator>michaljc</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/129495.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=129495</wfw:commentRss><description>&lt;P&gt;Last Thursday I went to the &lt;A href="http://db.usenix.org/events/vm04/bofs.html"&gt;Birds-Of-A-Feather session about Rotor&lt;/A&gt; at the &lt;A href="http://db.usenix.org/events/vm04/"&gt;Virtual Machine (VM'04) conference&lt;/A&gt;.&amp;nbsp; There were over a dozen attendees.&amp;nbsp; Most people haven't done much work with Rotor yet and they were there out of curiosity.&amp;nbsp; I managed to write down names of most but not all of the participants.&amp;nbsp; If I missed you and you want to be included, please let me know.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://sky.fit.qut.edu.au/~gough"&gt;John Gough&lt;/A&gt; had handouts of the newly written Appendix D for his &lt;A href="http://www.amazon.com/exec/obidos/tg/detail/-/0130622966"&gt;book&lt;/A&gt;.&amp;nbsp; This part talks about unsafe code and unmanaged data.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.intel.com/research/people/bios/glew_n.htm"&gt;Neal Glew&lt;/A&gt; from Intel talked about their experiences integrating a new JIT and GC into Rotor.&amp;nbsp; This work will be presented at the &lt;A href="http://dotnet.zcu.cz/NET_2004/program.htm"&gt;.NET workshop&lt;/A&gt; in a few weeks.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.cs.ucsb.edu/~lingli_z"&gt;Lingli Zhang&lt;/A&gt;, a graduate student from UCSB, is considering using Rotor for her thesis.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.ics.uci.edu/~dchandra"&gt;Deepak Chandra&lt;/A&gt;, a grad student from UC Irvine, is considering using Rotor for his information flow work.&lt;/LI&gt;
&lt;LI&gt;Mark Lewin from MSR was helping me present the winners of the &lt;A href="http://research.microsoft.com/Collaboration/University/Europe/RFP/Rotor2/RFP2.aspx"&gt;Rotor RFP2&lt;/A&gt;.&amp;nbsp; A few people asked for a link to a web page with that list but I think that it's not available yet (I will try to find out).&amp;nbsp; The list of RFP1 winners is &lt;A href="http://research.microsoft.com/programs/europe/rotor/rotorProjects.aspx"&gt;online&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Yahya Mirza announced a workshop he's organizing for OOPSLA.&lt;/LI&gt;
&lt;LI&gt;Tarek Abdelrahman from the University of Toronto, Hans Boehm from HP and a few others were just listening.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.azulsystems.com/company_gil.php"&gt;Gil Tene&lt;/A&gt; and Ivan Posva from Azul Systems were asking questions about Pinvoke and interop with native code and wrote down the info I showed them about &lt;A href="http://pinvoke.net"&gt;pinvoke.net&lt;/A&gt; and Adam Nathan's &lt;A href="http://www.amazon.com/exec/obidos/ASIN/067232170X"&gt;.NET and COM book&lt;/A&gt;.&lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=129495" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+general/default.aspx">Rotor - general</category></item><item><title>Rotor BOF at the VM'04 conference in San Jose</title><link>http://blogs.msdn.com/michaljc/archive/2004/05/02/124908.aspx</link><pubDate>Mon, 03 May 2004 05:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:124908</guid><dc:creator>michaljc</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/124908.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=124908</wfw:commentRss><description>&lt;P&gt;I wanted to remind you about the Birds-of-a-Feather session devoted to Rotor at the VM'04 conference this week.&amp;nbsp; The BOF &lt;A href="http://www.usenix.org/events/vm04/activities.html#bofs"&gt;is scheduled&lt;/A&gt; for Thursday, May 6, 7:30 p.m.&amp;#8211;10:00 p.m. You can find a description at &lt;A href="http://www.usenix.org/events/vm04/bofs.html"&gt;http://www.usenix.org/events/vm04/bofs.html&lt;/A&gt;.&amp;nbsp; The BOF is co-organized by &lt;A href="http://sky.fit.qut.edu.au/~gough/"&gt;John Gough&lt;/A&gt;, &lt;A href="http://www.razorsoft.net/weblog/"&gt;Peter Drayton &lt;/A&gt;and me.&amp;nbsp; For those who cannot attend, I will write a short report after the BOF.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=124908" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+general/default.aspx">Rotor - general</category></item><item><title>CLR loader and fusion</title><link>http://blogs.msdn.com/michaljc/archive/2004/04/14/113634.aspx</link><pubDate>Thu, 15 Apr 2004 08:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:113634</guid><dc:creator>michaljc</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/113634.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=113634</wfw:commentRss><description>&lt;p&gt;One of the interesting features of CLR is the ability to control which version of a given assembly is used by an application.&amp;nbsp; This mechanism is quite powerful and I thought I would create a concrete simple example to illustrate the basic concepts.&lt;br&gt;My example uses at the same time three different policies: application, publisher and administrator.&amp;nbsp; Alan Shi wrote &lt;a href="http://blogs.gotdotnet.com/alanshi/PermaLink.aspx/d4edb084-c625-4b6e-8e5c-7c2580cfcee9"&gt;a&amp;nbsp;very good article&lt;/a&gt; about these three policies.&lt;br&gt;I will assume that you have read this article or have otherwise knowledge when each of these policies should be used.&amp;nbsp; I will merely demonstrate an example that will use all three policies.&lt;br&gt;If you want to learn more about fusion and the loader, you can have a look at three blogs written by &lt;a HREF="/alanshi"&gt;Alan Shi&lt;/a&gt;, &lt;a HREF="/suzcook"&gt;Suzanne Cook&lt;/a&gt; and &lt;a HREF="/junfeng/category/3376.aspx"&gt;Junfeng Zhang&lt;/a&gt;.&amp;nbsp; Nice examples are also presented in Chapter 4 of the &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/059600351X"&gt;SSCLI Essentials&lt;/a&gt; and in Chapter 2 of &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201734117"&gt;Essential .NET, Volume 1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Everything I present here applies to the product CLR and Rotor (except that the specific location of the machine config file is different) but it's great to use Rotor because you can look at the code that implements every piece of what I will demonstrate.&amp;nbsp; To see how it is all implemented, look around the files in the clr\src\fusion\binder directory of the Rotor distribution.&amp;nbsp; I include specific pointers to the source code at the end of the article.&lt;/p&gt;
&lt;p&gt;Let's go to the example.&amp;nbsp; Since we will place multiple versions of the same assembly in the GAC, we have to use a strongly named assembly.&amp;nbsp; First we have to generate the key pair:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;sn -k foo.snk&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;Microsoft (R) Shared Source CLI Strong Name Utility&amp;nbsp; Version 1.0.0003.0&lt;br&gt;Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;Key pair written to foo.snk&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Now, we'll create a very simple assembly signed with the key we just produced:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;type foo.cs&lt;/strong&gt;&lt;br&gt;[assembly: System.Reflection.AssemblyKeyFile("foo.snk")]&lt;br&gt;[assembly: System.Reflection.AssemblyVersion("1.0.0.0")]&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;public class Foo {&lt;br&gt;&amp;nbsp; static int version = 1;&lt;br&gt;&amp;nbsp; public void M() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.WriteLine("I'm foo version {0}", version);&lt;br&gt;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt;&lt;br&gt;A simple application will first use reflection to print the full assembly name of our component including its version number and then will call into that component:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;type app.cs&lt;/strong&gt;&lt;br&gt;public class App {&lt;br&gt;&amp;nbsp; static void Main() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.WriteLine("Using " + typeof(Foo).Assembly.FullName);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Foo f = new Foo();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.M();&lt;br&gt;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Now let's compile both the component and the app and run it:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;csc -t:library foo.cs&lt;br&gt;&lt;/strong&gt;Microsoft (R) Visual C# Shared Source CLI Compiler version 1.0.0003&lt;br&gt;for Microsoft (R) Shared Source CLI version 1.0.0&lt;br&gt;Copyright (C) Microsoft Corporation 2002. All rights reserved.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;csc app.cs -r:foo.dll&lt;/strong&gt;&lt;br&gt;Microsoft (R) Visual C# Shared Source CLI Compiler version 1.0.0003&lt;br&gt;for Microsoft (R) Shared Source CLI version 1.0.0&lt;br&gt;Copyright (C) Microsoft Corporation 2002. All rights reserved.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;clix app.exe&lt;br&gt;&lt;/strong&gt;Using foo, Version=&lt;strong&gt;1.0.0.0&lt;/strong&gt;, Culture=neutral, PublicKeyToken=&lt;strong&gt;8847c0fffaada479&lt;/strong&gt;&lt;br&gt;I'm foo version &lt;strong&gt;1&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Note that if you repeat the experiment, you will see a different value for the PublicKeyToken.&amp;nbsp; It is important that you use your value of the token in all places in this article where I ask you to type the public key token.&lt;/p&gt;
&lt;p&gt;So far, so good.&amp;nbsp; Now, we will place our component in the GAC, so that we can have multiple versions side by side:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;gacutil -i foo.dll&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;Microsoft (R) Shared Source CLI Global Assembly Cache Utility.&amp;nbsp; Version 1.0.0003.0&lt;br&gt;Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;Assembly successfully added to the cache&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Now let's create versions 2 of the assembly, and place it in the GAC.&amp;nbsp; We will modify the source file as follows and execute same commands as before to compile the component and add it to the GAC:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;type foo.cs&lt;br&gt;&lt;/strong&gt;[assembly: System.Reflection.AssemblyKeyFile("foo.snk")]&lt;br&gt;[assembly: System.Reflection.AssemblyVersion("2.0.0.0")]&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;public class Foo {&lt;br&gt;static int version = 2;&lt;br&gt;public void M() {&lt;br&gt;&amp;nbsp;System.Console.WriteLine("I'm foo version {0}", version);&lt;br&gt;}&lt;br&gt;}&lt;br&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;csc -t:library foo.cs&lt;br&gt;&lt;/strong&gt;Microsoft (R) Visual C# Shared Source CLI Compiler version 1.0.0003&lt;br&gt;for Microsoft (R) Shared Source CLI version 1.0.0&lt;br&gt;Copyright (C) Microsoft Corporation 2002. All rights reserved.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;gacutil -i foo.dll&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;Microsoft (R) Shared Source CLI Global Assembly Cache Utility.&amp;nbsp; Version 1.0.0003.0&lt;br&gt;Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;Assembly successfully added to the cache&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Let's run our application again:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;clix app.exe&lt;br&gt;Using foo, Version=&lt;strong&gt;1.0.0.0&lt;/strong&gt;, Culture=neutral, PublicKeyToken=8847c0fffaada479&lt;br&gt;I'm foo version &lt;strong&gt;1&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;It still uses version 1.&amp;nbsp; Now imagine that the version 2 is a newer, better version and we would like to make our app use it but we have no access to the source of the app and we can't recompile it to link with the new version of foo.dll.&lt;/p&gt;
&lt;p&gt;We will try various policies to make our app use the new version of the component.&amp;nbsp; Let's start with the application policy.&amp;nbsp; The application policy is specified by creating a configuration file that is placed in the same directory as the application.&amp;nbsp; The config file must have the same name as the application with the .config suffix.&amp;nbsp; Here's what I put in the config file for our example:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;type app.exe.config&lt;/strong&gt;&lt;br&gt;&amp;lt;configuration&amp;gt;&lt;br&gt;&amp;lt;runtime&amp;gt;&lt;br&gt;&amp;lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&amp;gt;&lt;br&gt;&amp;lt;dependentAssembly&amp;gt;&lt;br&gt;&amp;lt;assemblyIdentity name="foo"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;publicKeyToken="8847c0fffaada479"&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; culture="neutral" /&amp;gt;&lt;br&gt;&amp;lt;bindingRedirect &lt;strong&gt;oldVersion="1.0.0.0"&lt;/strong&gt;&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;strong&gt;newVersion="2.0.0.0"&lt;/strong&gt; /&amp;gt;&lt;br&gt;&amp;lt;/dependentAssembly&amp;gt;&lt;br&gt;&amp;lt;/assemblyBinding&amp;gt;&lt;br&gt;&amp;lt;/runtime&amp;gt;&lt;br&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;br&gt;As you can guess, this policy says that if the application requests foo.dll,version 1, the loader should load version 2 instead.&amp;nbsp; Let's see if it worked:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;clix app.exe&lt;/strong&gt;&lt;br&gt;Using foo, Version=&lt;strong&gt;2.0.0.0&lt;/strong&gt;, Culture=neutral, PublicKeyToken=8847c0fffaada479&lt;br&gt;I'm foo version &lt;strong&gt;2&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;That was easy, right?&amp;nbsp; Now let's assume that a yet newer version, version 3, of the component is developed and the author of the component wants to make sure that all users of version 2 will start using version 3.&amp;nbsp; This can be accomplished with the publisher policy.&amp;nbsp; Let's first create version 3 of our example and place it in the GAC using same direction as for creating version 2 but typing "3" instead of "2" in the obvious places in foo.cs.&lt;br&gt;This publisher policy is specified by creating an assembly with a name of the form policy.[major].[minor].[component name].&amp;nbsp; For our example, it is policy.2.0.foo.dll to specify that it works for all requests to load version 2.0 of foo.dll.&amp;nbsp; The syntax for the policy is the same as for the application policy:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;type publisher.config&lt;/strong&gt;&lt;br&gt;&amp;lt;configuration&amp;gt;&lt;br&gt;&amp;lt;runtime&amp;gt;&lt;br&gt;&amp;lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&amp;gt;&lt;br&gt;&amp;lt;dependentAssembly&amp;gt;&lt;br&gt;&amp;lt;assemblyIdentity name="foo"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; publicKeyToken="8847c0fffaada479"&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; culture="neutral" /&amp;gt;&lt;br&gt;&amp;lt;bindingRedirect &lt;strong&gt;oldVersion="2.0.0.0"&lt;br&gt;&lt;/strong&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; &lt;strong&gt;newVersion="3.0.0.0"&lt;/strong&gt; /&amp;gt;&lt;br&gt;&amp;lt;/dependentAssembly&amp;gt;&lt;br&gt;&amp;lt;/assemblyBinding&amp;gt;&lt;br&gt;&amp;lt;/runtime&amp;gt;&lt;br&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;We link the policy file as a resource into an assembly with the required name.&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;al /link:publisher.config /out:policy.2.0.foo.dll /keyf:foo.snk /v:2.0.0.0&lt;/strong&gt;&lt;br&gt;Microsoft (R) Shared Source CLI Assembly Linker version 1.0.0003&lt;br&gt;for Microsoft (R) Shared Source CLI version 1.0.0&lt;br&gt;Copyright (C) Microsoft Corporation 2002. All rights reserved.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;gacutil -i policy.2.0.foo.dll&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;Microsoft (R) Shared Source CLI Global Assembly Cache Utility.&amp;nbsp; Version 1.0.0003.0&lt;br&gt;Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;Assembly successfully added to the cache&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;clix app.exe&lt;br&gt;&lt;/strong&gt;Using foo, Version=&lt;strong&gt;3.0.0.0&lt;/strong&gt;, Culture=neutral, PublicKeyToken=8847c0fffaada479&lt;br&gt;I'm foo version &lt;strong&gt;3&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;We're running our unmodified application that requests foo.dll version 1.&amp;nbsp; The application policy redirects the request to foo.dll version 2 and the publisher policy kicks in to redirect this request to foo.dll version 3.&lt;/p&gt;
&lt;p&gt;The last policy I will write about it the administrator policy.&amp;nbsp; Assume that we have a yet another version of our component.&amp;nbsp; For our experiment we will simply replace "3" with "4" in foo.cs; recompile it and place in the GAC like we did before to create versions 2 and 3.&lt;/p&gt;
&lt;p&gt;The administrator policy is placed in the CLR-wide configuration file.&amp;nbsp; For Rotor, this file is &lt;font color="#000080" face="Courier New" size="2"&gt;%TARGETCOMPLUS%\config\machine.config&lt;br&gt;&lt;/font&gt;You can edit this file and add there the redirection from version 3 to version 4.&amp;nbsp; The syntax is again the same as for the other policies, so you will need:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;&amp;lt;runtime&amp;gt;&lt;br&gt;&amp;lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&amp;gt;&lt;br&gt;&amp;lt;dependentAssembly&amp;gt;&lt;br&gt;&amp;lt;assemblyIdentity name="foo"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; publicKeyToken="8847c0fffaada479"&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; culture="neutral" /&amp;gt;&lt;br&gt;&amp;lt;bindingRedirect &lt;strong&gt;oldVersion="3.0.0.0"&lt;br&gt;&lt;/strong&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; &lt;strong&gt;newVersion="4.0.0.0"&lt;/strong&gt; /&amp;gt;&lt;br&gt;&amp;lt;/dependentAssembly&amp;gt;&lt;br&gt;&amp;lt;/assemblyBinding&amp;gt;&lt;br&gt;&amp;lt;/runtime&amp;gt;&lt;br&gt;&lt;/font&gt;Place this text, say, at the end of the machine.config file, right before the &lt;font color="#000080" face="Courier New" size="2"&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt; tag.&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;&lt;strong&gt;clix app.exe&lt;/strong&gt;&lt;br&gt;Using foo, Version=&lt;strong&gt;4.0.0.0&lt;/strong&gt;, Culture=neutral, PublicKeyToken=8847c0fffaada479&lt;br&gt;I'm foo version &lt;strong&gt;4&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Now we have chained three policies that redirect the requests from version 1 to 2, to 3 and to 4.&amp;nbsp; Typically, you would not use all three policies for the same assembly but I wanted to demonstrate that it is possible.&amp;nbsp; The policies are always consulted in the order presented in this article: application policy first, followed by publisher and followed by the administrator policy.&lt;/p&gt;
&lt;p&gt;Finally, let's verify that all 5 assemblies created by us are present in the GAC:&lt;br&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;C:\michal\projects\binding&amp;gt;gacutil -l&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;Microsoft (R) Shared Source CLI Global Assembly Cache Utility.&amp;nbsp; Version 1.0.0003.0&lt;br&gt;Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;The Global Assembly Cache contains the following assemblies:&lt;br&gt;foo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8847c0fffaada479, Custom=null&lt;br&gt;foo, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8847c0fffaada479, Custom=null&lt;br&gt;foo, Version=3.0.0.0, Culture=neutral, PublicKeyToken=8847c0fffaada479, Custom=null&lt;br&gt;foo, Version=4.0.0.0, Culture=neutral, PublicKeyToken=8847c0fffaada479, Custom=null&lt;br&gt;policy.2.0.foo, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8847c0fffaada479, Custom=null&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;(other assemblies omitted from the output)&lt;/p&gt;
&lt;p&gt;If you want to see how this is implemented in Rotor, you may start with a debugger.&amp;nbsp; Using windbg, start our application (type "windbg clix app.exe") and set a breakpoint in function ApplyPolicy in fusion.dll (type "bp fusion!ApplyPolicy").&lt;br&gt;ApplyPolicy is called first for "System" and then for "foo".&amp;nbsp; To make sure that you're looking at the interesting invocation of ApplyPolicy, you may want to verify that local variable pwzAsmName (once it's initialized) points too "foo" (this is a&amp;nbsp;Unicode string).&lt;br&gt;Interesting local variables are pwzVerAppCfg, pwzVerPublisherCfg and pwzVerAdminCfg with the obvious meaning associated with them.&amp;nbsp; Happy hacking!&lt;br&gt;&lt;/p&gt;
&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
_uacct = "UA-238213-3";
urchinTracker();
&lt;/script&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=113634" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category></item><item><title>Annotations for Rotor source files (9) - clr/src/inc</title><link>http://blogs.msdn.com/michaljc/archive/2004/03/04/84241.aspx</link><pubDate>Fri, 05 Mar 2004 03:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:84241</guid><dc:creator>michaljc</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/84241.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=84241</wfw:commentRss><description>&lt;P&gt;This is the last post giving brief summaries of .h files in the clr/src/inc directory of the Rotor distribution.&amp;nbsp; As usually whenever the file contains a good summary in a comment, I simply quote the comment here, otherwise I write new notes to capture the contents of the file.&amp;nbsp; Comments that are copied verbatim from the source file are &lt;FONT color=#000080 size=2&gt;distinguished by a font&lt;/FONT&gt;.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;stgpool.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// Pools are used to reduce the amount of data actually required in the database.&lt;BR&gt;&amp;nbsp;// This allows for duplicate string and binary values to be folded into one&lt;BR&gt;&amp;nbsp;// copy shared by the rest of the database.&amp;nbsp; Strings are tracked in a hash&lt;BR&gt;&amp;nbsp;// table when insert/changing data to find duplicates quickly.&amp;nbsp; The strings&lt;BR&gt;&amp;nbsp;// are then persisted consecutively in a stream in the database format.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;In-memory format used for the metadata heaps.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;stgpooli.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// This is helper code for the string and blob pools.&amp;nbsp; It is here because it is&lt;BR&gt;&amp;nbsp;// secondary to the pooling interface and reduces clutter in the main file.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Hash functions and get/put packed length&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;stresslog.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Defines STRESS_LOG0 and STRESS_LOG1 which are defined to be nops in Rotor.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;strongname.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;// Wrappers for signing and hashing functions needed to implement strong names&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;switches.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;switch configuration of common runtime features&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;threadpool.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Constants for the thread pool.&lt;/LI&gt;
&lt;LI&gt;Comment in the file is incorrect.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;timeline.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;// Simple timed manual event log, for profiling purposes.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;timer.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// This module contains the CTimer class which will time events and keep&lt;BR&gt;&amp;nbsp;// running totals.&amp;nbsp; This class will first try to use a high performance&lt;BR&gt;&amp;nbsp;// counter if the system supports it.&amp;nbsp; This type of counter is much more&lt;BR&gt;&amp;nbsp;// accurate than the system clock.&amp;nbsp; If the system does not support this, then&lt;BR&gt;&amp;nbsp;// the normal clock is used.&amp;nbsp; The total time is returned&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;tpoolfnsp.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Used like opcode.def.&amp;nbsp; Declares thread pool functions through the STRUCT_ENTRY macro.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;utilcode.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;Utility functions implemented in UtilCode.lib.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;utsem.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Utility semaphors and locks.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;vererror.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;definitions of data structures, needed to report verifier errors&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;warningcontrol.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;Header file to globally control the warning settings&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Not widely used&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;winwrap.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;This file contains wrapper functions for Win32 API's that take strings.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;wsinfo.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Not used in Rotor&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;wsperf.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// This is the internal interface for collecting and logging dynamic data&lt;BR&gt;&amp;nbsp;// allocations and deallocations. There is two kinds of data collected&lt;BR&gt;&amp;nbsp;// summary and detailed. Summary data gives a summary of of allocations made&lt;BR&gt;&amp;nbsp;// from various heaps (e.g. Highfrequency, Low frequency heap etc.). Summary &lt;BR&gt;&amp;nbsp;// data also includes number of common data structures allocated e.g. MethodDescs&lt;BR&gt;&amp;nbsp;// etc.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;xmlparser.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Defines the COM interface IXMLParser and related interfaces&lt;/LI&gt;
&lt;LI&gt;Generated from an IDL file not included in the Rotor distribution&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;__mscoree_file__.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Identification info put in resource files&lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=84241" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Annotated+Rotor/default.aspx">Annotated Rotor</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category></item><item><title>Annotations for Rotor source files (8) - clr/src/inc</title><link>http://blogs.msdn.com/michaljc/archive/2004/02/24/79605.aspx</link><pubDate>Wed, 25 Feb 2004 02:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:79605</guid><dc:creator>michaljc</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/79605.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=79605</wfw:commentRss><description>&lt;UL dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;LI&gt;&lt;STRONG&gt;palclr.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;// Various macros and constants that are necessary to make the CLR portable.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;palstartup.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// An implementation of startup code for Rotor's Unix PAL.&amp;nbsp; This file should&lt;BR&gt;&amp;nbsp;// be included by any file in a PAL application that defines main.&lt;BR&gt;&amp;nbsp;// palstartupw.h is the Unicode version of this file.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Wraps user's main with a call to PAL_initialize and sets PAL_Terminate via atexit.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;palstartupw.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;See palstartup.h&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;perfcounterdefs.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// Internal Interface for CLR to use Performance counters&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Defines the shapes of perf counter blocks as they might appear in shared memory&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;perfcounters.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// Internal Interface for CLR to use Performance counters&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Defines API to access counters and update them.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;perflog.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// Internal interface for logging perfromance data. Currently, two types of logging &lt;BR&gt;&amp;nbsp;// formats are supported, Pretty print for stdout and perf automation friendly &lt;BR&gt;&amp;nbsp;// format.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;pesectionman.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// Section Manager for portable executables&lt;BR&gt;&amp;nbsp;// Common to both Memory Only and Static (EXE making) code&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;posterror.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;PostError loads a resource string for a given error, fills it in using the equivalent of sprintf and generates an IErrorInfo via ICreateErrorInfo interface.&amp;nbsp; Sets the current error to that value by calling SetErrorInfo.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;prettyprintsig.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Defines PrettyPrintSig which is used in ildasm and PrettyPrintSigInternal which is used internally to compute GUIDs for types for use in COM interop.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;profilepriv.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Helper structs, enums, variables and functions for the profiling API&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;querybinding.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp; Query binding macros for internal use in mscoree.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Not used in Rotor.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;regdisp.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Arch-dependent but OS-independent struct representing register state and accessor functions.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;safegetfilesize.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// This provides a wrapper around GetFileSize() that forces it to fail&lt;BR&gt;&amp;nbsp;// if the file is &amp;gt;4g and pdwHigh is NULL. Other than that, it acts like&lt;BR&gt;&amp;nbsp;// the genuine GetFileSize().&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;setupcodes.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// This file contains the errors that the Setup and related tools return&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Not used in Rotor&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;shimload.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// Sets/Gets the directory based on the location of the module. This routine&lt;BR&gt;&amp;nbsp;// is called at COR setup time. Set is called during EEStartup and by the &lt;BR&gt;&amp;nbsp;// MetaData dispenser.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;sighelper.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;// This file defines the helpers for processing signature&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;stacktrace.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Not used in Rotor.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;stdmacros.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Portability macros and formatting macros for logging&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=79605" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Annotated+Rotor/default.aspx">Annotated Rotor</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category></item><item><title>Annotations for Rotor source files (7) - clr/src/inc</title><link>http://blogs.msdn.com/michaljc/archive/2004/02/18/75997.aspx</link><pubDate>Thu, 19 Feb 2004 02:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:75997</guid><dc:creator>michaljc</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/75997.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=75997</wfw:commentRss><description>&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;jitperf.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;// Internal interface for gathering JIT perfmormance stats. These stats are&lt;BR&gt;&amp;nbsp;// logged (or displayed) in two ways. If PERF_COUNTERS are enabled the &lt;BR&gt;&amp;nbsp;// perfmon etc. would display the jit stats. If ENABLE_PERF_LOG is enabled&lt;BR&gt;&amp;nbsp;// and PERF_OUTPUT env var is defined then the jit stats are displayed on the &lt;BR&gt;&amp;nbsp;// stdout. (The jit stats are outputted in a specific format to a file for &lt;BR&gt;&amp;nbsp;// automated perf tests.)&lt;/FONT&gt; 
&lt;LI&gt;A nop in Rotor v1.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;log.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Comment&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;// Logging Facility&lt;/FONT&gt; 
&lt;LI&gt;Usage is described in html docs for Rotor.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;loglf.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Defines categories of things to log. 
&lt;LI&gt;See log.h and the html docs.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;machine.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Defines DWORD and QWORD.&amp;nbsp; Optionally includes windows.h etc.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;md5.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;// A pretty-darned fast implementation of MD5&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;mdcommon.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;// Common header file for both MD and COMPLIB subdirectories&lt;/FONT&gt; 
&lt;LI&gt;Notes: 
&lt;OL&gt;
&lt;LI&gt;Defines an enum for file formats 
&lt;LI&gt;Defines strings (A &amp;amp; W) of metadata stream names.&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;member-offset-info.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Defines MEMBER_OFFSET_INFO: appends _member_offset_info to its argument 
&lt;LI&gt;See dump-tables.cpp.&amp;nbsp; This file defines structs that are declared as friends of various data structures.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;metadata.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp; Common includes for EE &amp;amp; metadata internal. This file contains&lt;BR&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp; definition of CorMetaDataScope&lt;/FONT&gt; 
&lt;LI&gt;Definitions of internal metadata APIs (COM-based) and their supporting structs and enums.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;metadatatracker.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;In Rotor stubbed out.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;metamodelpub.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Internal definitions of the metadata tables.&amp;nbsp; See &lt;A href="http://www.ecma-international.org/publications/standards/Ecma-335.htm"&gt;ECMA CLI&lt;/A&gt; Partition II.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;mscorcfg.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;A trivial XML parser for config files.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;mscoree.h&lt;/STRONG&gt; (not in tarball) 
&lt;UL&gt;
&lt;LI&gt;Generated from mscoree.idl&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;nativevaraccessors.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;// The following are used to read and write data given NativeVarInfo&lt;BR&gt;// for primitive types. Don't use these for VALUECLASSes.&lt;/FONT&gt; 
&lt;LI&gt;Related to ICorDebugInfo.&amp;nbsp; Used by the impl of the Debugger API.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;nsutilpriv.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;// Helpers for converting namespace separators.&lt;/FONT&gt; 
&lt;LI&gt;E.g. splitting a string into a namespace and name.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;openum.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Defines enums opcode_t (using opcode.def) and opcode_format_t.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;opinfo.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Defines types that implement the IL opcode decoder.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;outstring.h&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#000080 size=2&gt;&amp;nbsp;/* A simple, lightweight, character output stream, with very few&lt;BR&gt;&amp;nbsp;external dependancies (like sprintf ... ) */&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=75997" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Annotated+Rotor/default.aspx">Annotated Rotor</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category></item><item><title>Annotations for Rotor source files (6) - clr/src/inc</title><link>http://blogs.msdn.com/michaljc/archive/2004/02/14/73179.aspx</link><pubDate>Sun, 15 Feb 2004 02:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:73179</guid><dc:creator>michaljc</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/michaljc/comments/73179.aspx</comments><wfw:commentRss>http://blogs.msdn.com/michaljc/commentrss.aspx?PostID=73179</wfw:commentRss><description>&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;fuspriv.h&lt;/STRONG&gt; (not in tarball)&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Like other *.idl files, it is copied from palrt/idl&lt;/LI&gt;
&lt;LI&gt;Unlike other files generated from idl, this one doesn't have a corresponding idl file anywhere in the tarball.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;gchost.h&lt;/STRONG&gt; (not in tarball)&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;* Common Language Runtime Profiling interfaces&lt;BR&gt;*&lt;BR&gt;* The IGCHost allows a host environment to get statistics about the&lt;BR&gt;* garbage collector as well as to gain some limited control over collections.&lt;BR&gt;* This interface can be QueryInterface'd for on from the CorHost object.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Generated from gchost.idl&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;guidfromname.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Defines two GUID generators: CorGuidFromNameW, CorIIDFromCLSID&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;holder.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;// Various resource Holders&lt;BR&gt;&amp;nbsp;//&lt;BR&gt;&amp;nbsp;// General idea is to have a templatized class who's ctor and dtor call&lt;BR&gt;&amp;nbsp;// allocation management functions. This makes the holders type-safe, and&lt;BR&gt;&amp;nbsp;// the compiler can inline most/all of the holder code.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;None of the types declared in this file seems to be used.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;hrex.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;HR &amp;lt;-&amp;gt; SEH exception functions.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Examples: ThrowHR, ThrowError&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;iceefilegen.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;An implementation is in ceefilegen.cpp.&amp;nbsp; Parts of the interface dealing with signatures are deprecated in that implementation.&lt;/LI&gt;
&lt;LI&gt;Forwards to CeeFileGenWriter&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ilformatter.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;This is dead as are ilformatter.cpp and opinfo.[h,cpp].&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;il_kywd.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;// COM+ IL keywords, symbols and values&lt;BR&gt;&amp;nbsp;//&lt;BR&gt;&amp;nbsp;// This is the master table used in ILASM (asmparse.y)&lt;BR&gt;&amp;nbsp;// and ILDASM (dis.cpp)&lt;BR&gt;&amp;nbsp;// symbols and values are defined in asmparse.y &lt;BR&gt;&amp;nbsp;// and not used in dis.cpp&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Notes:&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Lexemes for ilasm and ildasm.&lt;/LI&gt;
&lt;LI&gt;Used like opcode.def&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;internaldebug.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;// This is internal code for debug mode which will turn on memory dump checking&lt;BR&gt;&amp;nbsp;// and other settings.&amp;nbsp; Call the api's according to:&lt;BR&gt;&amp;nbsp;// _DbgInit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; On startup to init the system.&lt;BR&gt;&amp;nbsp;// _DbgRecord Call this when you are sure you want dump checking.&lt;BR&gt;&amp;nbsp;//_DbgUninit&amp;nbsp;&amp;nbsp;&amp;nbsp; Call at process shutdown to force the dump.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Notes:&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;In Rotor all of these are nops.&lt;/LI&gt;
&lt;LI&gt;_DbgRecord sets a variable that is never used.&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;intrinsic.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;// Force several very useful functions to be intrinsic, which means that the&lt;BR&gt;&amp;nbsp;// compiler will generate code inline for the functions instead of generating&lt;BR&gt;&amp;nbsp;// a call to the function.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;A very short list of intrinsics we are asking the MS C++ compiler to inline&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ipcfunccall.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;// Define class to support a cross process function call.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;It seems to be used only in startup and shutdown to synchronize with PerfMon.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ipcmanagerinterface.h&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;// Interface for InterProcess Communication with a COM+ process.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Interfaces for creating IPC readers and writers.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ivalidator.h&lt;/STRONG&gt; (not in tarball)&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;// IValidator is used to staticly validate COR images.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Notes:&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Primarily used by PEVerify.&lt;/LI&gt;
&lt;LI&gt;Generated from&amp;nbsp;ivalidator.idl&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ivehandler.h&lt;/STRONG&gt; (not in tarball)&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Comment:&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;Verification Event Handler Interface&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Generated from&amp;nbsp;ivehandler.idl&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=73179" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/michaljc/archive/tags/Annotated+Rotor/default.aspx">Annotated Rotor</category><category domain="http://blogs.msdn.com/michaljc/archive/tags/Rotor+-+all/default.aspx">Rotor - all</category></item></channel></rss>