<?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>For The Developers! : Windows Server 2008</title><link>http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx</link><description>Tags: Windows Server 2008</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Windows Server 2008 App Compat Labs Released</title><link>http://blogs.msdn.com/jolson/archive/2008/04/29/windows-server-2008-app-compat-labs-released.aspx</link><pubDate>Wed, 30 Apr 2008 01:20:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8439688</guid><dc:creator>jolson</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jolson/comments/8439688.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=8439688</wfw:commentRss><description>&lt;p&gt;The first four labs in a series of Windows Server 2008 Application Compatibility labs have been released on MSDN. You can find them as follows:&lt;/p&gt;  &lt;p&gt;- MSDN Virtual Lab: &lt;a href="http://go.microsoft.com/?linkid=8787523"&gt;Windows Server 2008 - Access Rights, Impersonation&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;- MSDN Virtual Lab: &lt;a href="http://go.microsoft.com/?linkid=8787524"&gt;Windows Server 2008 - Impact of Code Signing&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;- MSDN Virtual Lab: &lt;a href="http://go.microsoft.com/?linkid=8787525"&gt;Windows Server 2008 - Installer Detection&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;- MSDN Virtual Lab: &lt;a href="http://go.microsoft.com/?linkid=8787526"&gt;Windows Server 2008 - Session 0 Isolation&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There will be more labs in the coming weeks. Stay tuned and enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8439688" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/jolson/archive/tags/App+Compat/default.aspx">App Compat</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Longhorn/default.aspx">Longhorn</category></item><item><title>New App Compat Video - Debugging</title><link>http://blogs.msdn.com/jolson/archive/2008/01/29/new-app-compat-video-debugging.aspx</link><pubDate>Wed, 30 Jan 2008 00:43:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7313228</guid><dc:creator>jolson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jolson/comments/7313228.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=7313228</wfw:commentRss><description>&lt;p&gt;A &lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=377306"&gt;new video&lt;/a&gt; has been posted to the &lt;a href="http://channel9.msdn.com/shows/Developer_Meet_Server"&gt;Developer Meet Server Show&lt;/a&gt; on Channel 9. In this video, we discuss tools and resources you should know about when debugging application compatibility issues. From the description of the video:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;quot;﻿In this video, we sit down (well, stand up actually) with Chris Jackson and Gov Maharaj to chat about debugging application compatibility issues (and some of the things Microsoft has done to mitigate typical app compat issues we've run into).&amp;quot;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7313228" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/jolson/archive/tags/App+Compat/default.aspx">App Compat</category></item><item><title>WS08 Feature of the Week #14 - Sub-queues in MSMQ 4.0</title><link>http://blogs.msdn.com/jolson/archive/2008/01/29/ws08-feature-of-the-week-14-sub-queues-in-msmq-4-0.aspx</link><pubDate>Wed, 30 Jan 2008 00:19:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7312869</guid><dc:creator>jolson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jolson/comments/7312869.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=7312869</wfw:commentRss><description>&lt;p&gt;&lt;b&gt;What are sub-queues? &lt;/b&gt;Subqueues are implicitly created local queues that are logical partitions of a physical queue. Applications can use subqueues to group messages. Subqueues are implicitly created when opened, are deleted when empty, and have no open handles. Messages cannot be sent to a subqueue. Messages can be received from subqueues, moved between the main queue and its subqueue, or moved between a pair of sibling subqueues.&lt;/p&gt;  &lt;p&gt;Subqueues do not have their own properties or state, but share the properties and state of their parent queue. For example, a subqueue does not have its own quota, access control list (ACL), or transactional type. Subqueues share the quota of the main queues. Messages in the subqueues consume the quota of the main queue. Subqueues cannot be created under journal and other system queues, or other subqueues. If journaling is enabled, copies of messages that are removed from a subqueue are sent to the journal queue of the main queue.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;So why sub-queues&lt;/b&gt;? MSMQ-based applications often require messages to be grouped based on some criteria. Previously, the only way to do this was to create several queues and when a message arrived in the main queue, move the message into a specific queue based on some selection criteria. &lt;/p&gt;  &lt;p&gt;Here&amp;#8217;s the thing: moving messages between physical queues is a resource-intensive process. If you are wanting to build a high performance application, it is best to try to avoid this resource-intensive process. But if you were building an application based on MSMQ 3.0, this was not very feasible. Now, the new sub-queues feature enables you to logically group messages within a single queue without the need of creating another physical queue.&lt;/p&gt;  &lt;p&gt;- &lt;a href="http://msdn2.microsoft.com/en-us/library/ms711414.aspx"&gt;MSDN Documentation&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;- &lt;a href="http://msdn2.microsoft.com/en-us/library/ms751535.aspx"&gt;WCF Examples&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7312869" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/jolson/archive/tags/LHS+Feature+Of+The+Week/default.aspx">LHS Feature Of The Week</category></item><item><title>New App Compat Video - MSI Installer Issues</title><link>http://blogs.msdn.com/jolson/archive/2008/01/18/new-app-compat-video-msi-installer-issues.aspx</link><pubDate>Fri, 18 Jan 2008 22:32:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7152326</guid><dc:creator>jolson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jolson/comments/7152326.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=7152326</wfw:commentRss><description>&lt;p&gt;I have posted &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=374129"&gt;a new video&lt;/a&gt; to the &lt;a href="http://channel9.msdn.com/shows/Developer_Meet_Server"&gt;Developer Meet Server Show&lt;/a&gt; on Channel 9. This video discusses common MSI Installer Issues you might run into if deploying an application onto Windows Vista or Windows Server 2008. From the description of the video:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;quot;In this video, we chat with Robert Flaming about application compatibility issues around Windows Installer for Windows Vista and Windows Server 2008. Mark Taylor, from our first Application Compatibility video, sits in as well to fire off some important questions (well, questions that are perhaps more educated than I would ask).&amp;quot;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7152326" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/jolson/archive/tags/App+Compat/default.aspx">App Compat</category></item><item><title>WS08 Feature of the Week #13 - Windows Process Activation Service (WAS)</title><link>http://blogs.msdn.com/jolson/archive/2008/01/18/ws08-feature-of-the-week-13-windows-process-activation-service-wpas.aspx</link><pubDate>Fri, 18 Jan 2008 22:11:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7152103</guid><dc:creator>jolson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jolson/comments/7152103.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=7152103</wfw:commentRss><description>&lt;p&gt;&lt;b&gt;What is Windows Process Activation Service? &lt;/b&gt;Windows Process Activation Service, also referred to as WAS, is a new component in IIS 7.0 that manages application pool configuration and worker processes instead of the WWW process. This enables the same configuration for both HTTP and non-HTTP sites to be used. Thanks to this separation (and in combination with the new modular architecture of IIS 7.0), you can even host non-HTTP sites without the WWW Service even being installed in the first place.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;How does Windows Process Activation Service work&lt;/b&gt;? Taken directly from the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms734677.aspx"&gt;documentation&lt;/a&gt;: &lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;#8220;The WAS process model generalizes the IIS 6.0 process model for the HTTP server by removing the dependency on HTTP. This allows WCF services to use both HTTP and non-HTTP protocols, such as Net.TCP, in a hosting environment that supports message-based activation and offers the ability to host a large number of applications on a given machine.&amp;quot;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What scenarios does this enable&lt;/b&gt;? Since WAS is not specific to HTTP sites, you can use WAS to host non-HTTP sites as well. But what do we mean by &amp;#8220;non-HTTP sites?&amp;#8221; Well, simply put, WAS can be used to host sites built on technologies like Windows Communication Foundation, for example. If you are using WCF with WAS, are you limited to listening over HTTP? Not at all. In fact, that is the beauty and power of WAS. You can be hosting a WCF service within WAS that is using a netTcpBinding, netMsmqBinding, etc. As an extension to this, since WAS supports both HTTP and non-HTTP sites, this also means that you can be hosting a service that exposes itself over both HTTP and NET.TCP as well.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7152103" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/jolson/archive/tags/LHS+Feature+Of+The+Week/default.aspx">LHS Feature Of The Week</category></item><item><title>An actually funny video about Windows Server</title><link>http://blogs.msdn.com/jolson/archive/2008/01/11/an-actually-funny-video-about-windows-server.aspx</link><pubDate>Sat, 12 Jan 2008 01:52:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7080606</guid><dc:creator>jolson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jolson/comments/7080606.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=7080606</wfw:commentRss><description>&lt;p&gt;Well, at least I found it funny. A coworker &lt;a href="http://blogs.technet.com/windowsserver/pages/about-lone-server.aspx"&gt;brought this&lt;/a&gt; to my attention today. I thought it was pretty clever and enjoyed it. Then again, I've known for a while how great Windows Server 2008 is :). Here's an excerpt:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Once I was almost famous. For years, my friends and I were on the front lines: we were the Windows Server 2003 servers that powered Microsoft.com, one of the hottest Web sites in the world. Then, early last summer, everything changed. Quietly, without warning, the new kids took over. Windows Server 2008. Yes, I know, the product&amp;#8217;s not even done yet. These were Beta 3 servers, for Pete&amp;#8217;s sake. Long way from prime time. But there they were, humming away. No problems. All of &amp;#8216;em on Windows Server 2008. Except me. The last Windows Server 2003 left at Microsoft.com.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/windowsserver/pages/about-lone-server.aspx"&gt;Enjoy&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7080606" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>WS08 Feature Of The Week #12 - IIS7 Administration API</title><link>http://blogs.msdn.com/jolson/archive/2008/01/11/ws08-feature-of-the-week-12-iis7-administration-api.aspx</link><pubDate>Fri, 11 Jan 2008 23:28:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7079005</guid><dc:creator>jolson</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jolson/comments/7079005.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=7079005</wfw:commentRss><description>&lt;p&gt;Hello everyone, and welcome back after our winter break hiatus. We have a lot of cool features to cover in the coming weeks that will especially show off the power of Windows Server 2008 as an application server. So, this week we will kick off the new year by taking a short little peek at the new management API coming in IIS7.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What is new in IIS7 Administration? &lt;/b&gt;IIS7 provides a comprehensive managed-code API that allows complete manipulation of the XML configuration files and convenience access to server objects. IIS7 includes Microsoft.Web.Administration, which is a new management API for the web server that enables editing configuration through complete manipulation of the XML configuration files and also provides convenience objects to manage the server, its properties and state. The configuration editing aspect of the API provides programmatic access to read and write configuration properties in the IIS configuration file hierarchy and specific configuration files. The object management aspect of this API provides a series of top-level administration objects for direct management of the server (i.e. sites, application pools, worker processes, etc.).&lt;/p&gt;  &lt;p&gt;The management classes reside in the Microsoft.Web.Administration namespace. The classes provide a weakly-typed interface to access configuration sections and convenience objects with properties and methods representing attributes of the configuration (like the path of a virtual directory) or actions to take on the object (like recycling an application pool).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.iis.net/articles/view.aspx/IIS7/Extending-IIS7/Using-Microsoft-Web-Administration/How-to-Use-Microsoft-Web-Administration"&gt;How To Use Microsoft.Web.Administration&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7079005" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/jolson/archive/tags/LHS+Feature+Of+The+Week/default.aspx">LHS Feature Of The Week</category></item><item><title>Video - App Compat and Windows Server 2008</title><link>http://blogs.msdn.com/jolson/archive/2008/01/11/video-app-compat-and-windows-server-2008.aspx</link><pubDate>Fri, 11 Jan 2008 23:10:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7078775</guid><dc:creator>jolson</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jolson/comments/7078775.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=7078775</wfw:commentRss><description>&lt;p&gt;As part of the &lt;a href="http://channel9.msdn.com/shows/Developer_Meet_Server"&gt;&amp;quot;Developer Meet Server&amp;quot; show&lt;/a&gt; on Channel 9, I have started a new series of videos on the topic of application compatibility for Windows Server 2008. I will be releasing one video interview per week all the way until launch, so make sure to keep an eye open!&lt;/p&gt;  &lt;p&gt;in &lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=370935"&gt;this first video&lt;/a&gt;, we discuss a bunch of topics in this video that are very pertinent to the topic of Application Compatibility on Windows Server 2008, from Session 0 Isolation to IIS 7 to Mandatory Integrity Control, among many others (I will give any of you five geek points if you can work in &amp;quot;Session 0 Isolation&amp;quot; or &amp;quot;Mandatory Integrity Control&amp;quot; into your next dinner party conversation!).&lt;/p&gt;  &lt;p&gt;So, make sure to &lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=370935"&gt;go check it out&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7078775" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/App+Compat/default.aspx">App Compat</category></item><item><title>The launch of marshal-as.net</title><link>http://blogs.msdn.com/jolson/archive/2007/11/22/the-launch-of-marshal-as-net.aspx</link><pubDate>Fri, 23 Nov 2007 02:03:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6474239</guid><dc:creator>jolson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jolson/comments/6474239.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=6474239</wfw:commentRss><description>&lt;p&gt;In my &lt;a href="http://www.managed-world.com/ManagedAndNativeInteropCOrCCLI.aspx"&gt;previous post&lt;/a&gt;, I talked about why I personally love C++/CLI as a solution for managed and native interop. With the launch of Visual Studio 2008, and the include of the new marshalling library, there is on part of the equation missing, I believe. On the C# side of the interop equation, you have &lt;a href="http://www.pinvoke.net"&gt;http://www.pinvoke.net&lt;/a&gt;. When I'm wanting to interop with a given Windows API, there is a very (very) good chance that the wrappers have already been posted onto pinvoke.net.&lt;/p&gt;  &lt;p&gt;While the marshal_as&amp;lt;&amp;gt; construct of the marshalling library in VC++ 2008 is quite extensible through the use of templates, there is no community site for me to go to in order to retrieve an existing piece of the interop puzzle. That is, until now. &lt;/p&gt;  &lt;p&gt;With the help of Kate Gregory, there is now a new website for those C++/CLI users out there: &lt;a href="http://www.marshal-as.net"&gt;http://www.marshal-as.net&lt;/a&gt;. If that link doesn't work for you, give it a day or two as this is a new website and DNS is still propagating for it. &lt;/p&gt;  &lt;p&gt;I have already sent Kate a couple of samples that I had done for my own interop work with Visual C++ 2008 (have I mentioned yet how easy my life is now that I'm using C++/CLI in Visual C++ 2008?). You should pop over and check it out. If you have your own samples that you want to submit, feel free to use the contact form (the email icon) at the website and email your sample to the website. &lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6474239" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Programming/default.aspx">Programming</category></item><item><title>What's Mandatory Integrity Control?</title><link>http://blogs.msdn.com/jolson/archive/2007/11/12/what-s-mandatory-integrity-control.aspx</link><pubDate>Tue, 13 Nov 2007 02:00:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6154924</guid><dc:creator>jolson</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jolson/comments/6154924.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=6154924</wfw:commentRss><description>&lt;p&gt;Mandatory Integrity Control (MIC) is a cool new security feature built in to Windows Vista and Windows Server 2008. It adds another &amp;quot;layer&amp;quot; of security to Windows resources (files, processes, etc.) over the usual DACL (Discretionary Access Control Lists) that we have in Windows XP and Windows Server 2003. &lt;/p&gt;  &lt;p&gt;Essentially, Mandatory Integrity Control adds an &amp;quot;Integrity Level&amp;quot; to resources present in the Windows operating system. There are four possible integrity levels. They are (from most privileged to least privileged): System IL, High IL, Medium IL, and Low IL. System Services run at System IL, Administrative Processes run at High IL, and all resources in Windows with an explicitly set integrity level exist at Medium IL by default. When one resource wants access to another resource, the first resource's integrity level must be greater than or equal to the integrity level of the requested resource. This integrity level check takes place before we even check the DACLs on each resource.&lt;/p&gt;  &lt;p&gt;Processes, for instance, can access files that have an integrity level lower than or equal to their own integrity level. So let's say I have Notepad running under my own local account (not an administrative account). By default, Notepad.exe is launched with an integrity level of Medium. As long as I am trying to write to a file that has an integrity level of Medium or below, then the operation will success just fine.&lt;/p&gt;  &lt;p&gt;However, if I have a file that is sitting there with an integrity level of High, the write operation from Notepad will fail because Notepad doesn't have the proper integrity rights to access and to write to that resource.&lt;/p&gt;  &lt;p&gt;Let's go ahead and take a look at this in action (you can work through this &amp;quot;demo&amp;quot; if you are currently running Windows Vista or Windows Server 2008).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Demo&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;You _must_ be running Vista and Windows Server 2008 for this demo to work&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;1) Launch Notepad&lt;/p&gt;  &lt;p&gt;2) Enter some text and save the file as &amp;#8220;test.txt&amp;#8221; on your desktop. Now we have a text file with the default Medium IL.&lt;/p&gt;  &lt;p&gt;3) Launch a command prompt as Administrator (from the shortcut, right click and choose &amp;#8220;Run As Administrator&amp;#8221;)&lt;/p&gt;  &lt;p&gt;4) Navigate to your desktop (&amp;#8220;cd C:\Users\USER_NAME\Desktop&amp;#8221; in the command line for a default Vista installation).&lt;/p&gt;  &lt;p&gt;5) Issue this command to set the created file&amp;#8217;s integrity level to a High IL: &amp;#8220;icacls test.txt /setintegritylevel H&amp;#8221;. Now that the file has a high integrity level a default notepad process won&amp;#8217;t be able to save the file.&lt;/p&gt;  &lt;p&gt;6) Launch Notepad again (make sure it isn&amp;#8217;t launched as Administrator since Administrator permissions will make it have an integrity level of High, voiding this experiment). &lt;/p&gt;  &lt;p&gt;7) Open test.txt from your desktop&lt;/p&gt;  &lt;p&gt;8) Change the file and try to save it. Notepad will fail while trying to save (Notepad gives a &amp;#8220;user-friendly&amp;#8221; error, but the underlying error is actually &amp;#8220;Access Is Denies&amp;#8221;). &lt;/p&gt;  &lt;p&gt;There you have it, Mandatory Integrity Control in action! However, that's not the end to the story! &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Did You Know&lt;/strong&gt;? Internet Explorer &amp;#8220;Protected Mode&amp;#8221; actually uses Mandatory Integrity Levels under the hood to achieve its goals. Since IE Protected Mode runs with a low integrity level, and all files on the file system (and running processes) are a medium integrity level by default, an attempt to write to those files or processes fails.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6154924" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Programming/default.aspx">Programming</category></item><item><title>Tech Ed Developer (Europe)</title><link>http://blogs.msdn.com/jolson/archive/2007/11/05/tech-ed-developer-europe.aspx</link><pubDate>Mon, 05 Nov 2007 14:03:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5905895</guid><dc:creator>jolson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jolson/comments/5905895.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=5905895</wfw:commentRss><description>&lt;p&gt;Howdy all, I will be at Tech Ed Developer this week doing several things. First of all, I will be giving two talks: the first on Application Compatibility in Windows Server 2008 outlining the top issues developers need to be aware of when developing for it, and second, a talk on Transactional NTFS as it pertains to Windows Server 2008. &lt;/p&gt;  &lt;p&gt;Also, I will be &amp;quot;manning&amp;quot; the Ask The Experts booth for Windows Server 2008. So if you want to chat about Windows Server 2008 (or just say hello), make sure to drop on by (I will have the hours I plan on working the booth posted there at the booth).&lt;/p&gt;  &lt;p&gt;Here's a rundown:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Monday, 3pm - [INF203] WS08 For Developers - App Compat, Tent 1 &lt;/li&gt;    &lt;li&gt;Thursday, 4:30pm - [INF307] WS08 For Developers - Transactional NTFS &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I'm also hoping to attend some sessions myself. These will mostly be around C++ (TLA323, TLA302, TLA404, etc.). &lt;/p&gt;  &lt;p&gt;So, if you're going to be at the conference, please, drop on by the Ask The Experts booth for Windows Server 2008 and say hello!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5905895" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/TxF/default.aspx">TxF</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Presentation/default.aspx">Presentation</category><category domain="http://blogs.msdn.com/jolson/archive/tags/App+Compat/default.aspx">App Compat</category></item><item><title>New Works With Windows Server 2008 Program</title><link>http://blogs.msdn.com/jolson/archive/2007/07/31/new-works-with-windows-server-2008-program.aspx</link><pubDate>Wed, 01 Aug 2007 00:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4152790</guid><dc:creator>jolson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jolson/comments/4152790.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=4152790</wfw:commentRss><description>&lt;P&gt;There is a new kid on the block around our Logo program with Windows Server. What is that? With the release of Windows Server 2008, we will be introducing a new "Works With" program. What is the "Works With Windows Server 2008 Program"?&lt;/P&gt;
&lt;P&gt;The "Works With Windows Server 2008 Program" is a program that helps highlight and promote applications that are compatible with Windows Server 2008. The program requirements are actually a subset of the requirements for the "Certified For Windows Server 2008" program. This helps provide a better "stepping stone" for ISVs that are interested in delivering high quality applications for the Windows Server platform.&lt;/P&gt;
&lt;P&gt;To get started, check out &lt;A title=http://www.innovateonwindowsserver.com/OverviewBenefits.aspx href="http://www.innovateonwindowsserver.com/OverviewBenefits.aspx" mce_href="http://www.innovateonwindowsserver.com/OverviewBenefits.aspx"&gt;http://www.innovateonwindowsserver.com/OverviewBenefits.aspx&lt;/A&gt;. In the coming weeks, Microsoft will be releasing an analyzer tool for the Works With program that will help you discover application compatibility issues you may face when ensuring your application works with Windows Server 2008. &lt;/P&gt;
&lt;P&gt;So make sure to keep an eye out on &lt;A href="http://www.innovateonwindowsserver.com/" mce_href="http://www.innovateonwindowsserver.com/"&gt;Innovate On&lt;/A&gt; for coming announcements (and I will continue to make this information available to you directly on this blog, of course). Stay tuned!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4152790" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/App+Compat/default.aspx">App Compat</category></item><item><title>Listing Running Transactions In A Resource Manager</title><link>http://blogs.msdn.com/jolson/archive/2007/07/19/listing-running-transactions-in-a-resource-manager.aspx</link><pubDate>Fri, 20 Jul 2007 00:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3962895</guid><dc:creator>jolson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jolson/comments/3962895.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=3962895</wfw:commentRss><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The more I work with TxF, the more I realize that our (Microsoft's) coverage of certain KTM topics is sorely lacking. One of those areas is around documentation and samples of managing resource managers (important if you are wanting to investigate programatically the running status of a resource manager). 
&lt;P&gt;Sometimes, being an evangelist can be quite fun (or frustrating) because the documentation leaves something to be desired and you can't run to the internet because the only results you get back or to the documentation on MSDN. And of course, since you're on the cutting searching for the control codes online provides you with two results, both pointing back to MSDN. It becomes doubly "interesting" if you are a managed developer because a large number of management-oriented information for KTM is all done through DeviceIoControl (an API that is NOT fun to try to P/Invoke into, especially using certain control codes). 
&lt;P&gt;Anyways, that's all beside the point... moving right along. 
&lt;P&gt;If you are writing an application to monitor TxF (or even building it into your own application), there are some core "things" that you need to do. One of the first ones (and the one I will cover in this post) is to get a list of transactions in a given resource manager. This is done using the &lt;A href="http://msdn2.microsoft.com/en-us/library/aa364603.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa364603.aspx"&gt;FSCTL_TXFS_LIST_TRANSACTIONS&lt;/A&gt; control code. 
&lt;P&gt;What structure is DeviceIoControl passing back to us in this instance? A &lt;A href="http://msdn2.microsoft.com/en-us/library/aa365702.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa365702.aspx"&gt;TXFS_LIST_TRANSACTIONS&lt;/A&gt; structure. Looking at this structure, we see two fields: NumberOfTransactions and BufferSizeRequired. &lt;BR&gt;That's nice and all, but where is the information about those transactions? The information is stored in a TXFS_LIST_TRANSACTIONS_ENTRY structure. 
&lt;P&gt;The trick is that the TXFS_LIST_TRANSACTIONS_ENTRY structure is mentioned nowhere in the documentation for FSCTL_TXFS_LIST_TRANSACTIONS. So how do you get to it? An array of TXFS_LIST_TRANSACTIONS_ENTRY structures are stored in memory after your TXFS_LIST_TRANSACTIONS structure. So assuming you have two running transactions in the given resource manager, you would pass in a pointer to the TXFS_LIST_TRANSACTIONS structure, and here is what the memory would actually look like coming back from DeviceIoControl: 
&lt;P&gt;&lt;A href="http://www.managed-world.com/images/Listingrunningtransactionsinaresourceman_BD53/MemoryLayout3.png" mce_href="http://www.managed-world.com/images/Listingrunningtransactionsinaresourceman_BD53/MemoryLayout3.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=189 src="http://www.managed-world.com/images/Listingrunningtransactionsinaresourceman_BD53/MemoryLayout_thumb3.png" width=710 border=0 mce_src="http://www.managed-world.com/images/Listingrunningtransactionsinaresourceman_BD53/MemoryLayout_thumb3.png"&gt;&lt;/A&gt; 
&lt;P&gt;The impact of this is that you need to allocate enough memory for not only your TXFS_LIST_TRANSACTIONS structure, but the array of TXFS_LIST_TRANSACTIONS_ENTRY structures as well. You might notice a little bit of a "chicken and egg" problem here. If I'm using FSCTL_TXFS_LIST_TRANSACTIONS to retrieve the transactions, how could I know how many entry structures to allocate when I don't know how many transactions there are yet? 
&lt;P&gt;Well, assuming there are one or more running transactions in the resource manager, you have to call DeviceIoControl with FSCTL_TXFS_LIST_TRANSACTIONS at least twice: once to find out how big of a buffer you need to allocate (read: to calculate how many ENTRY structures to accomodate for), and then another time after allocating the extra memory to have it fill the actual ENTRY structures. 
&lt;P&gt;Why do I say "at least" twice? Because, between the time we make our first call and the time we make our second call, more transactions could have appeared and we will have to allocate even more memory. A little bit of a "cat and mouse game," I must say. 
&lt;P&gt;If you are a managed developer, this may sound a bit scary. Don't be scared though, it's not too bad (and I know I at least have fun writing this kind of lower-level code :P). 
&lt;P&gt;So let's dive right in and look at the code to make this work! 
&lt;P&gt;In pseudo-code, this is what we have to do: 
&lt;P&gt;------------------------&lt;BR&gt;while (true)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Deallocate memory from last loop through this 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Allocate memory for transaction list buffer 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Call DeviceIoControl with FSCTL_TXFS_LIST_TRANSACTIONS 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// If DeviceIoControl Succeeded 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Get list of transaction entries after TXFS_LIST_TRANSACTIONS structure&lt;BR&gt;} 
&lt;P&gt;// Deallocate any remaining memory&lt;BR&gt;------------------------ 
&lt;P&gt;Not that bad really. So here it is implemented in native code: 
&lt;DIV style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: consolas"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;1&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a31515"&gt;&lt;WINDOWS.H&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;2&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a31515"&gt;&lt;TCHAR.H&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;3&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a31515"&gt;&lt;STDIO.H&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;4&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;#include&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a31515"&gt;"Winioctl.h"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;5&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;6&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; _tmain(&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; argc, LPTSTR argv)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;7&lt;/SPAN&gt; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;8&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD lastError, bytesReturned;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;9&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HANDLE rmDirectory;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;10&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TXFS_LIST_TRANSACTIONS *txList = NULL;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;11&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;12&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;// Get handle to directory where resource manager resides&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;13&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rmDirectory = CreateFile(TEXT(&lt;SPAN style="COLOR: #a31515"&gt;"C:\\"&lt;/SPAN&gt;), &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;14&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GENERIC_READ,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;15&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;16&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;17&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OPEN_EXISTING,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;18&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILE_FLAG_BACKUP_SEMANTICS,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;19&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NULL);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;20&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;21&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (rmDirectory != INVALID_HANDLE_VALUE)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;22&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;23&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;// Get a list of transactions within the given&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;24&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;// resource manager&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;25&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD neededBufferSize = &lt;SPAN style="COLOR: blue"&gt;sizeof&lt;/SPAN&gt;(TXFS_LIST_TRANSACTIONS);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;26&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;while&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;27&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;28&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;&lt;SPAN style="COLOR: green"&gt;// Deallocate previously allocated memory if we are back&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;29&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;&lt;SPAN style="COLOR: green"&gt;// here after getting back ERROR_MORE_DATA&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;30&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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (NULL != txList)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;31&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;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;32&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;&lt;SPAN style="COLOR: blue"&gt;delete&lt;/SPAN&gt;[] (&lt;SPAN style="COLOR: blue"&gt;char&lt;/SPAN&gt;*)txList;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;33&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;txList = NULL;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;34&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;}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;35&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;36&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;&lt;SPAN style="COLOR: green"&gt;// Get the list of running transactions in the RM&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;37&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;txList = (TXFS_LIST_TRANSACTIONS*)&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;char&lt;/SPAN&gt;[neededBufferSize];&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;38&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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (!DeviceIoControl(rmDirectory,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;39&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;FSCTL_TXFS_LIST_TRANSACTIONS,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;40&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;NULL,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;41&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;0,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;42&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;txList,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;43&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;neededBufferSize,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;44&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;amp;bytesReturned,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;45&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;NULL))&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;46&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;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;47&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;&lt;SPAN style="COLOR: green"&gt;// How did we fail?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;48&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;lastError = GetLastError();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;49&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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (lastError == ERROR_MORE_DATA)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;50&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;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;51&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;&lt;SPAN style="COLOR: green"&gt;// We need to enlarge the buffer and try again&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;52&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;neededBufferSize = txList-&amp;gt;BufferSizeRequired;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;53&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;&lt;SPAN style="COLOR: blue"&gt;continue&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;54&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;}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;55&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;&lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;56&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;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;57&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;_tprintf(TEXT(&lt;SPAN style="COLOR: #a31515"&gt;"Unhandled exception: %u\n"&lt;/SPAN&gt;), lastError);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;58&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;&lt;SPAN style="COLOR: blue"&gt;break&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;59&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;}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;60&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;}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;61&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;&lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;62&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;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;63&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;_tprintf(TEXT(&lt;SPAN style="COLOR: #a31515"&gt;"Transaction Count: %u\n\n"&lt;/SPAN&gt;), txList-&amp;gt;NumberOfTransactions);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;64&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;65&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;&lt;SPAN style="COLOR: green"&gt;// List Tx details&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;66&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;TXFS_LIST_TRANSACTIONS_ENTRY *txEntry;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;67&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;txEntry = (TXFS_LIST_TRANSACTIONS_ENTRY *)((&lt;SPAN style="COLOR: blue"&gt;char&lt;/SPAN&gt; *)txList &lt;/P&gt;
&lt;P style="MARGIN: 0px"&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;+ &lt;SPAN style="COLOR: blue"&gt;sizeof&lt;/SPAN&gt;(TXFS_LIST_TRANSACTIONS));&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;68&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;&lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; (DWORD i = 0; i &amp;lt; txList-&amp;gt;NumberOfTransactions; i++)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;69&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;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;70&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;txEntry++;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;71&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;72&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;&lt;SPAN style="COLOR: green"&gt;// Get GUID string&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;73&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;WCHAR szGuid[40];&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;74&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;StringFromGUID2(txEntry-&amp;gt;TransactionId, (WCHAR *)&amp;amp;szGuid, 40);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;75&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;76&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;&lt;SPAN style="COLOR: green"&gt;// Print Tx info&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;77&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;_tprintf(TEXT(&lt;SPAN style="COLOR: #a31515"&gt;"TX %s: %u\n"&lt;/SPAN&gt;), &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;78 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;szGuid,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;79&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;txEntry-&amp;gt;TransactionState);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;80&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;}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;81&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;82&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;&lt;SPAN style="COLOR: blue"&gt;break&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;83&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;}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;84&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;85&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;86&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;// Any memory left to deallocate?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;87&lt;/SPAN&gt; &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; (NULL != txList)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;88&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;89&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;&lt;SPAN style="COLOR: blue"&gt;delete&lt;/SPAN&gt;[] (&lt;SPAN style="COLOR: blue"&gt;char&lt;/SPAN&gt;*)txList;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;90&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;txList = NULL;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;91&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;92&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;93&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;94&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;95&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_tprintf(TEXT(&lt;SPAN style="COLOR: #a31515"&gt;"Unable to get valid handle to Resource Manager\n"&lt;/SPAN&gt;));&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;96&lt;/SPAN&gt; &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; 1;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;97&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;98&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;99&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_tprintf(TEXT(&lt;SPAN style="COLOR: #a31515"&gt;"\nPress any key to exit...\n"&lt;/SPAN&gt;));&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;100&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getchar();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;101&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;102&lt;/SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; 0;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;103&lt;/SPAN&gt; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;And that's how you do it. It's not the most fun getting in to DeviceIoControl (unless you're a geek like me and enjoying this kind of stuff), but hopefully with this post out there to help it will be easier to find out how to do this since there is a lack of documentation around this area. 
&lt;P&gt;In closing, there is some work that needs to be done around making management of kernel-level transactions a lot easier than it is now. In some ways, it is pretty clear that this is still a "1.0" technology. So while you could use the KTM directly for your transaction coordination, I would highly recommend sticking with using DTC for your transaction coordination as it is much more mature from a management perspective (and there are quite a few enhancements with DTC in Vista and Windows Server 2008). &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3962895" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/TxF/default.aspx">TxF</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Programming/default.aspx">Programming</category></item><item><title>Windows Server 2008 Developer Training Kit</title><link>http://blogs.msdn.com/jolson/archive/2007/07/19/windows-server-2008-developer-training-kit.aspx</link><pubDate>Fri, 20 Jul 2007 00:03:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3962720</guid><dc:creator>jolson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jolson/comments/3962720.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=3962720</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/jamescon/archive/2007/07/17/just-released-windows-server-2008-developer-training-kit-beta-3.aspx"&gt;James Conard announces&lt;/a&gt; over on his blog that our team has just released the Windows Server 2008 Developer Training Kit for Beta 3. Mosey on over and check it out. You can find resources on everything from WCF, to Cardspace, to WF, to Windows Eventing, to PowerShell, to IIS 7, to Transactional NTFS.&lt;/p&gt; &lt;p&gt;So if you are a developer interested in checking out Windows Server 2008, make sure to &lt;a href="http://blogs.msdn.com/jamescon/archive/2007/07/17/just-released-windows-server-2008-developer-training-kit-beta-3.aspx"&gt;grab it&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3962720" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/TxF/default.aspx">TxF</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Programming/default.aspx">Programming</category></item><item><title>Windows Server "Longhorn" - Beta 3 Has Arrived!</title><link>http://blogs.msdn.com/jolson/archive/2007/04/26/windows-server-longhorn-beta-3-has-arrived.aspx</link><pubDate>Thu, 26 Apr 2007 04:08:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2277835</guid><dc:creator>jolson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jolson/comments/2277835.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jolson/commentrss.aspx?PostID=2277835</wfw:commentRss><description>&lt;p&gt;Well, it's official. Beta 3 of Windows Server "Longhorn" &lt;a href="http://www.microsoft.com/windowsserver/longhorn/default.mspx"&gt;has launched&lt;/a&gt;. With it, I finally get to release some of the work I've been working on lately.&lt;/p&gt; &lt;p&gt;If you are a developer, I encourage to take a look at "&lt;a href="http://blogs.msdn.com/jolson/archive/2007/04/26/top-ways-to-light-up-your-apps-on-windows-server-longhorn.aspx"&gt;The Top Ways To Light Up Your Apps On Windows Server 'Longhorn'&lt;/a&gt;" that was just launched today.&amp;nbsp;It outlines key ways that you, the developer, can leverage all the new and improved enhancements to the Server platform to really make your applications shine in a whole new light.&lt;/p&gt; &lt;p&gt;I encourage any of you with access to Beta 3 to try it out. Windows Server "Longhorn" is quickly shaping up to be the best Server release from Microsoft ever. &amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2277835" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jolson/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/jolson/archive/tags/Programming/default.aspx">Programming</category></item></channel></rss>