<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Brian - From The Inside Looking Out</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/brianbla/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/brianbla/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 04:49:13 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Visual Studio ALM Rangers</title>
      <link>https://docs.microsoft.com/archive/blogs/brianbla/visual-studio-alm-rangers</link>
      <pubDate>Thu, 19 Apr 2012 19:16:42 GMT</pubDate>
      <dc:creator><![CDATA[Brianbla]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brianbla/2012/04/19/visual-studio-alm-rangers/</guid>
      <description><![CDATA[The Visual Studio ALM Rangers has been around for quite some time now and I remember my first...]]></description>
      <content:encoded><![CDATA[<p>The Visual Studio ALM Rangers has been around for quite some time now and I remember my first project very well. My first project was as a developer on the client side user interface for an extension and enhancement to the Visual Studio Database Edition. My Ranger team extended the data generation feature to make it highly scalable. Unfortunately, for me at least, it was not released to the community but used internally by Microsoft Services. We were in our infancy at the time and I am pretty sure this was the first project that actually filled a gap with bits. This as my first Ranger gig and it was so much fun and my first community project. From this first project I have slowly navigated in to a role we refer to as the Ruck Master which is very akin to Scrum Master. Some may refer to me as the Ruck Police and for those days we use this head shot also seen in my <a href="https://blogs.msdn.com/b/willy-peter_schaub/archive/2010/06/24/introducing-the-visual-studio-alm-rangers-brian-blackman.aspx">Ranger Index introduction</a> page.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/35/metablogapi/1184.Brian20Bust20with20Sun20Glasses201.jpg1_74748DC3.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-35-metablogapi/1184.Brian20Bust20with20Sun20Glasses201.jpg1_5F00_74748DC3.jpg"><img title="Brian%20Bust%20with%20Sun%20Glasses%201.jpg[1]" style="display: inline; background-image: none;" border="0" alt="Brian%20Bust%20with%20Sun%20Glasses%201.jpg[1]" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/35/metablogapi/3644.Brian20Bust20with20Sun20Glasses201.jpg1_thumb_11E96F81.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-35-metablogapi/3644.Brian20Bust20with20Sun20Glasses201.jpg1_5F00_thumb_5F00_11E96F81.jpg" width="179" height="244" /></a></p>  <p>This picture was taken by a customer’s public relations and marketing photographer for use in the company newsletter where many thought I looked like some professional wrestler. As you can see from the Office logo on the shirt it was a while ago. This was back in my Microsoft Consulting days where I actually worked on the customer’s site for a couple of years. So, today the picture is used in jest when I am trying to keep the project leads focused on the target. But, what is Ruck you ask.</p>  <p>Ruck is the Rugby term used to define a “loose Scrum” and we (Willy-Peter came up with the use of the word) felt it was fitting to our Ranger process. Our process is one in which we strive for agility while learning how to overcome the constraints of a Ranger team. In this role I have been assisting and mentoring the Rangers in managing their teams and getting project lead role clarity for several <a href="https://blogs.msdn.com/b/visualstudioalm/archive/2012/02/29/welcome-to-visual-studio-11-alm-rangers-readiness-beta-wave.aspx">Visual Studio 11 Readiness</a> projects. We have learned allot with this wave of Ranger projects and are applying the learning from our retrospectives to our Ranger process. You can learn more about our process from our MSDN article, <a href="https://msdn.microsoft.com/en-us/magazine/hh394152.aspx">Visual Studio ALM Rangers—Reflections on Virtual Teams</a>. I also had the opportunity to work on the MSDN VM Factory article, <a href="https://msdn.microsoft.com/en-us/magazine/hh580740.aspx">Visual Studio ALM Rangers: Rise of the VM Factory</a> and an article that was published on Code Project, <a href="https://www.codeproject.com/Articles/324056/How-the-Visual-Studio-ALM-Rangers-use-Team-Foundat">How the Visual Studio ALM Rangers use Team Foundation Service to Get Ready for Visual Studio 11</a>. We have several more MSDN articles in the pipeline so look for these in forth coming MSDN magazine issues and keep your eyes on <a href="https://blogs.msdn.com/b/willy-peter_schaub/">Willy-Peter’s blog</a> for the most recent Ranger news. </p>  <p>Speaking of Willy, he is one of the most hard working and passionate Rangers I know. He is a machine that seems to operate non-stop for hours on end. And he is very gracious. He had some t-shirts made for some of the Rangers and it could have been paid for out of his own pocket. Here are pictures of the shirt. So, Willy is a kind hard working machine. <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/35/metablogapi/8422.wlEmoticon-smile_48C65478.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-35-metablogapi/8422.wlEmoticon_2D00_smile_5F00_48C65478.png" /> Thanks Willy!</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/35/metablogapi/4214.FrontShirt_1A6CCECB.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-35-metablogapi/4214.FrontShirt_5F00_1A6CCECB.jpg"><img title="FrontShirt" style="display: inline; background-image: none;" border="0" alt="FrontShirt" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/35/metablogapi/1104.FrontShirt_thumb_009B294D.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-35-metablogapi/1104.FrontShirt_5F00_thumb_5F00_009B294D.jpg" width="244" height="184" /></a><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/35/metablogapi/3731.IMG_0189_62BCA54B.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-35-metablogapi/3731.IMG_5F00_0189_5F00_62BCA54B.jpg"><img title="IMG_0189" style="display: inline; background-image: none;" border="0" alt="IMG_0189" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/00/35/metablogapi/6864.IMG_0189_thumb_24597249.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-00-35-metablogapi/6864.IMG_5F00_0189_5F00_thumb_5F00_24597249.jpg" width="228" height="183" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Visual Studio Team System 2010 Improvements</title>
      <link>https://docs.microsoft.com/archive/blogs/brianbla/visual-studio-team-system-2010-improvements</link>
      <pubDate>Fri, 01 May 2009 13:55:32 GMT</pubDate>
      <dc:creator><![CDATA[Brianbla]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brianbla/2009/05/01/visual-studio-team-system-2010-improvements/</guid>
      <description><![CDATA[Brian Harry, one of our prominent Technical Fellows, is blogging on the new features in Visual...]]></description>
      <content:encoded><![CDATA[<p><a href="https://blogs.msdn.com/bharry/default.aspx">Brian Harry</a>, one of our prominent Technical Fellows, is blogging on the new features in Visual Studio Team System. Please check out his blog for the recent posting on <a href="https://blogs.msdn.com/bharry/archive/2009/04/30/tfs-2010-admin-operations-setup-improvements.aspx">TFS 2010 Admin, Operations &amp; Setup Improvements</a>. This is a must read.</p>  <p>As time permits I will post new features that Brian doesn't cover and that I am working on in some way - mainly through our Ranger projects. The new features for Visual Studio Team System are many and we have a new SKU as well, one of the projects I am a lead on (I am on about 5 right now) we are creating guidance that will quickly get you up and aware of what is new and how to use the new feature. Our idea is that the guidance has a razor focus so that you can brief yourself quickly. I will be sharing more about these projects and VSTS 2010 in general in future posts.</p>  <p>Brian. </p>]]></content:encoded>
    </item>
    <item>
      <title>Junction Structures/Classes</title>
      <link>https://docs.microsoft.com/archive/blogs/brianbla/junction-structuresclasses</link>
      <pubDate>Tue, 03 Feb 2009 15:27:28 GMT</pubDate>
      <dc:creator><![CDATA[Brianbla]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brianbla/2009/02/03/junction-structuresclasses/</guid>
      <description><![CDATA[Following are the classes I had to create for use in working with junctions:  &#160;...]]></description>
      <content:encoded><![CDATA[<p>Following are the classes I had to create for use in working with junctions:</p>  <p>&#160;</p>  <p>[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]   <br />private class REPARSE_MOUNTPOINT_DATA_BUFFER    <br />{    <br />&#160;&#160;&#160; [FieldOffset(0)]    <br />&#160;&#160;&#160; internal uint ReparseTag;    <br />&#160;&#160;&#160; [FieldOffset(4)]    <br />&#160;&#160;&#160; internal uint ReparseDataLength;    <br />&#160;&#160;&#160; [FieldOffset(8)]    <br />&#160;&#160;&#160; internal ushort Reserved;    <br />&#160;&#160;&#160; [FieldOffset(10)]    <br />&#160;&#160;&#160; internal ushort ReparseTargetLength;    <br />&#160;&#160;&#160; [FieldOffset(12)]    <br />&#160;&#160;&#160; internal ushort ReparseTargetMaximumLength;    <br />&#160;&#160;&#160; [FieldOffset(14)]    <br />&#160;&#160;&#160; internal ushort Reserved1;    <br />&#160;&#160;&#160; [FieldOffset(16)]    <br />&#160;&#160;&#160; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_PATH * 3)]    <br />&#160;&#160;&#160; internal Char[] ReparseTarget = new Char[MAX_PATH * 3];    <br />} </p>  <p>/// &lt;summary&gt;   <br />/// REPARSE_DATA_BUFFER class    <br />/// &lt;/summary&gt;    <br />[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]    <br />private class REPARSE_DATA_BUFFER    <br />{    <br />&#160;&#160;&#160; [FieldOffset(0)]    <br />&#160;&#160;&#160; internal UInt32 ReparseTag;    <br />&#160;&#160;&#160; [FieldOffset(4)]    <br />&#160;&#160;&#160; internal ushort ReparseDataLength;    <br />&#160;&#160;&#160; [FieldOffset(6)]    <br />&#160;&#160;&#160; internal ushort Reserved;    <br />&#160;&#160;&#160; [FieldOffset(8)]    <br />&#160;&#160;&#160; internal ushort SSubstituteNameOffset;    <br />&#160;&#160;&#160; [FieldOffset(10)]    <br />&#160;&#160;&#160; internal ushort SSubstituteNameLength;    <br />&#160;&#160;&#160; [FieldOffset(12)]    <br />&#160;&#160;&#160; internal ushort SPrintNameOffset;    <br />&#160;&#160;&#160; [FieldOffset(14)]    <br />&#160;&#160;&#160; internal ushort SPrintNameLength;    <br />&#160;&#160;&#160; [FieldOffset(16)]    <br />&#160;&#160;&#160; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_PATH)]    <br />&#160;&#160;&#160; internal Char[] SPathBuffer = new Char[MAX_PATH];    <br />&#160;&#160;&#160; [FieldOffset(8)]    <br />&#160;&#160;&#160; internal ushort MSubstituteNameOffset;    <br />&#160;&#160;&#160; [FieldOffset(10)]    <br />&#160;&#160;&#160; internal ushort MSubstituteNameLength;    <br />&#160;&#160;&#160; [FieldOffset(12)]    <br />&#160;&#160;&#160; internal ushort MPrintNameOffset;    <br />&#160;&#160;&#160; [FieldOffset(14)]    <br />&#160;&#160;&#160; internal ushort MPrintNameLength;    <br />&#160;&#160;&#160; [FieldOffset(16)]    <br />&#160;&#160;&#160; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_PATH)]    <br />&#160;&#160;&#160; internal Char[] MPathBuffer = new Char[MAX_PATH];    <br />} </p>  <p>/// &lt;summary&gt;   <br />/// Class for GUID    <br />/// &lt;/summary&gt;    <br />[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi)]    <br />private class aGUID    <br />{    <br />&#160;&#160;&#160; [FieldOffset(0)]    <br />&#160;&#160;&#160; internal uint&#160; Data1;    <br />&#160;&#160;&#160; [FieldOffset(4)]    <br />&#160;&#160;&#160; internal ushort Data2;    <br />&#160;&#160;&#160; [FieldOffset(6)]    <br />&#160;&#160;&#160; internal ushort Data3;    <br />&#160;&#160;&#160; [FieldOffset(8)]    <br />&#160;&#160;&#160; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]    <br />&#160;&#160;&#160; internal Char[] Data4 = new Char[8];    <br />} </p>  <p>/// &lt;summary&gt;   <br />/// From WINNT.H    <br />/// The reparse GUID structure is used by all 3rd party layered drivers to    <br />/// store data in a reparse point. For non-Microsoft tags, The GUID field    <br />/// cannot be GUID_NULL.    <br />/// The constraints on reparse tags are defined below.    <br />/// Microsoft tags can also be used with this format of the reparse point buffer.    <br />/// &lt;/summary&gt;    <br />[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]    <br />private class REPARSE_GUID_DATA_BUFFER     <br />{    <br />&#160;&#160;&#160; [FieldOffset(0)]    <br />&#160;&#160;&#160; internal UInt32&#160; ReparseTag;    <br />&#160;&#160;&#160; [FieldOffset(4)]    <br />&#160;&#160;&#160; internal ushort ReparseDataLength;    <br />&#160;&#160;&#160; [FieldOffset(6)]    <br />&#160;&#160;&#160; internal ushort Reserved;    <br />&#160;&#160;&#160; [FieldOffset(8)]    <br />&#160;&#160;&#160; internal aGUID&#160; ReparseGuid;    <br />&#160;&#160;&#160; [FieldOffset(24)]    <br />&#160;&#160;&#160; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_REPARSE_SIZE)]    <br />&#160;&#160;&#160; internal Char[] DataBuffer = new Char[MAX_REPARSE_SIZE];    <br />}</p>  <p>In my next blog entry I will post some code that shows how to use all this to create, delete, and interrogate junctions.</p>]]></content:encoded>
    </item>
    <item>
      <title>Junction PInvoke Signatures</title>
      <link>https://docs.microsoft.com/archive/blogs/brianbla/junction-pinvoke-signatures</link>
      <pubDate>Sun, 21 Dec 2008 18:56:11 GMT</pubDate>
      <dc:creator><![CDATA[Brianbla]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brianbla/2008/12/21/junction-pinvoke-signatures/</guid>
      <description><![CDATA[Following are the signatures that I needed to enable Junctions through .NET. In another posting I...]]></description>
      <content:encoded><![CDATA[<p>Following are the signatures that I needed to enable Junctions through .NET. In another posting I will cover several structs that I had to create. If you are unable to wait for me to post them please let me know and I will get them here sooner.</p>  <p>&#160; /// CloseHandle function   <br />&#160; /// &lt;/summary&gt;    <br />&#160; /// &lt;param name=&quot;hObject&quot;&gt;Handle to an open object.&lt;/param&gt;    <br />&#160; /// &lt;returns&gt;If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError.&lt;/returns&gt;    <br />&#160; [System.Runtime.InteropServices.DllImport(&quot;Kernel32.dll&quot;, SetLastError = true)]    <br />&#160; private extern static int CloseHandle(IntPtr hObject); </p>  <p>&#160; /// &lt;summary&gt;   <br />&#160; /// CreateFile function    <br />&#160; /// &lt;/summary&gt;    <br />&#160; /// &lt;param name=&quot;FileName&quot;&gt;&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;DesiredAccess&quot;&gt;&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;ShareMode&quot;&gt;&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;lpSecurityAttributes&quot;&gt;&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;CreationDisposition&quot;&gt;&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;dwFlagsAndAttributes&quot;&gt;&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;hTemplateFile&quot;&gt;&lt;/param&gt;    <br />&#160; /// &lt;returns&gt;INVALID_HANDLE_VALUE on error or the handle to file if success&lt;/returns&gt;    <br />&#160; [System.Runtime.InteropServices.DllImport(&quot;Kernel32.dll&quot;, SetLastError = true)]    <br />&#160; private extern static IntPtr CreateFile(string FileName, uint DesiredAccess,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uint ShareMode, IntPtr lpSecurityAttributes,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uint CreationDisposition, uint dwFlagsAndAttributes,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr hTemplateFile); </p>  <p>&#160; /// &lt;summary&gt;   <br />&#160; /// Junction form of DeviceIoControl Win32 function    <br />&#160; /// &lt;/summary&gt;    <br />&#160; /// &lt;param name=&quot;hDevice&quot;&gt;Handle of device opened with CreateFile&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;nIoControlCode&quot;&gt;Code of DeviceIoControl operation&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;rmp&quot;&gt;Pointer to a buffer that contains the REPARSE_MOUNTPOINT_DATA_BUFFER data required to perform the operation.&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;nBufferSize&quot;&gt;Size of the buffer pointed to by lpInBuffer, in bytes.&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;lpOutBuffer&quot;&gt;Pointer to a buffer that receives the operation's output data.&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;lpOutBufferSize&quot;&gt;Size of the buffer pointed to by lpOutBuffer, in bytes.&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;lpBytesReturned&quot;&gt;Receives the size, in bytes, of the data stored into the buffer pointed to by lpOutBuffer. &lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;lpOverlapped&quot;&gt;Pointer to an OVERLAPPED structure. Discarded for this case&lt;/param&gt;    <br />&#160; /// &lt;returns&gt;If the function succeeds, the return value is nonzero. If the function fails, the return value is zero.&lt;/returns&gt;    <br />&#160; [System.Runtime.InteropServices.DllImport(&quot;Kernel32.dll&quot;, SetLastError = true)]    <br />&#160; private extern static bool DeviceIoControl(IntPtr hDevice,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uint nIoControlCode,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; REPARSE_MOUNTPOINT_DATA_BUFFER rmp,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uint nBufferSize,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr lpOutBuffer,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr lpOutBufferSize,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ref uint lpBytesReturned,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr lpOverlapped); </p>  <p>&#160; /// &lt;summary&gt;   <br />&#160; /// Junction form of DeviceIoControl Win32 function    <br />&#160; /// &lt;/summary&gt;    <br />&#160; /// &lt;param name=&quot;hDevice&quot;&gt;Handle of device opened with CreateFile&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;nIoControlCode&quot;&gt;Code of DeviceIoControl operation&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;lpInBuffer&quot;&gt;Pointer to a buffer.&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;nBufferSize&quot;&gt;Size of the buffer pointed to by lpInBuffer, in bytes.&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;lpOutBuffer&quot;&gt;Pointer to a buffer that receives the operation's output data.&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;lpOutBufferSize&quot;&gt;Size of the buffer pointed to by lpOutBuffer, in bytes.&lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;lpBytesReturned&quot;&gt;Receives the size, in bytes, of the data stored into the buffer pointed to by lpOutBuffer. &lt;/param&gt;    <br />&#160; /// &lt;param name=&quot;lpOverlapped&quot;&gt;Pointer to an OVERLAPPED structure. Discarded for this case&lt;/param&gt;    <br />&#160; /// &lt;returns&gt;If the function succeeds, the return value is nonzero. If the function fails, the return value is zero.&lt;/returns&gt;    <br />&#160; [System.Runtime.InteropServices.DllImport(&quot;Kernel32.dll&quot;, SetLastError = true)]    <br />&#160; private extern static bool DeviceIoControl(IntPtr hDevice,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uint nIoControlCode,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr lpInBuffer,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr lpBufferSize,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr lpvReparseBuf,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int nBufferSize,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ref uint lpBytesReturned,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr lpOverlapped); </p>  <p>&#160; /// &lt;summary&gt;   <br />&#160; /// Junction form of GetFileAttributes Win32 function    <br />&#160; /// &lt;/summary&gt;    <br />&#160; /// &lt;param name=&quot;lpFileName&quot;&gt;File Name&lt;/param&gt;    <br />&#160; /// &lt;returns&gt;The attributes of the specified file or directory, returned in a DWORD, indicates success. 0xFFFFFFFF indicates failure.&lt;/returns&gt;    <br />&#160; [System.Runtime.InteropServices.DllImport(&quot;Kernel32.dll&quot;, SetLastError = true)]    <br />&#160; private extern static uint GetFileAttributes(string FileName); </p>]]></content:encoded>
    </item>
    <item>
      <title>TFS Branching Guide 2.0 Released</title>
      <link>https://docs.microsoft.com/archive/blogs/brianbla/tfs-branching-guide-2-0-released</link>
      <pubDate>Sat, 20 Dec 2008 09:16:57 GMT</pubDate>
      <dc:creator><![CDATA[Brianbla]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brianbla/2008/12/20/tfs-branching-guide-2-0-released/</guid>
      <description><![CDATA[Today, we posted the 2nd major release of the TFS Branching Guide here on Codeplex.  Branching...]]></description>
      <content:encoded><![CDATA[<p>Today, we posted the 2<sup>nd</sup> major release of the TFS Branching Guide <a href="https://www.codeplex.com/TFSBranchingGuideII">here</a> on Codeplex.</p>  <p>Branching strategy is one of the most important aspects of TFS deployment. The right strategy can lead to optimized team cooperation, increased productivity and a successful adoption. On the other hand, a bad branching strategy can cause frustrations, damage production and derail TFS adoption in an organization. We have therefore put a lot of effort in creating a set of practical guidance to educate our customers and partners and support their VSTS adoption efforts.</p>  <p>This guidance covers the common cases and not always the special cases. If you have a special case, i.e. Enterprise Scrums Teams with Continuous Integration then you may have different requirements and therefore different scenarios from the guidance. I plan to continue to contribute to the guidance regarding my experiences in implementing special scenarios.</p>  <p>If there is any one thing I can share with you it is that you need to prove out your assumptions and branching strategies in a test environment before you implement them in production. Too many times do I learn of organizations that use the production environment for testing.</p>  <p><a title="https://www.codeplex.com/TFSBranchingGuideII" href="https://www.codeplex.com/TFSBranchingGuideII">https://www.codeplex.com/TFSBranchingGuideII</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Visual Studio Team System 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/brianbla/visual-studio-team-system-2010</link>
      <pubDate>Tue, 30 Sep 2008 18:28:45 GMT</pubDate>
      <dc:creator><![CDATA[Brianbla]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brianbla/2008/09/30/visual-studio-team-system-2010/</guid>
      <description><![CDATA[This week we also launched a new Visual Studio &#8220;topic area&#8221; on Channel 9 for keeping up...]]></description>
      <content:encoded><![CDATA[<p>This week we also launched a new Visual Studio &#8220;topic area&#8221; on <a href="https://channel9.msdn.com/VisualStudio" target="_blank">Channel 9</a> for keeping up with all of the latest Visual Studio and .NET Framework Channel 9 content. This is some really cool stuff!</p>  <p><b>Visual Studio Team System Week on Channel 9 &#8211; Content Calendar</b></p>  <p>(Live version of this content calendar lives <a href="https://channel9.msdn.com/posts/VisualStudio/Visual-Studio-Team-System-2010-Week-on-Channel-9/">here</a> with new URL&#8217;s being added every day this week)</p>  <p><b>Overview Day </b>(Monday, September 29<sup>th</sup>):     <br />- <a href="https://channel9.msdn.com/posts/Dan/Norman-Guadagno-Announcing-Visual-Studio-Team-System-2010/">Announcing Visual Studio Team System 2010</a></p>  <p>- <u><a href="https://channel9.msdn.com/posts/VisualStudio/Visual-Studio-Team-System-2010-Week-on-Channel-9/">Visual Studio Team System 2010 Week on Channel 9!</a></u>     <br /><strong>Architecture Day</strong> (Tuesday, September 30th):     <br />- <a href="https://channel9.msdn.com/posts/VisualStudio/Cameron-Skinner-Visual-Studio-Team-System-2010-Architecture/">Cameron Skinner: Visual Studio Team System 2010 - Architecture</a>     <br />- <a href="https://channel9.msdn.com/posts/VisualStudio/Top-down-design-with-Visual-Studio-Team-System-2010/">&quot;Top-down&quot; design with Visual Studio Team System 2010</a>     <br />- <a href="https://channel9.msdn.com/posts/VisualStudio/Bottom-up-Design-with-Visual-Studio-Team-System-2010-Architect/">&quot;Bottom-up&quot; Design with Visual Studio Team System 2010 Architect</a>     <br />- <a href="https://channel9.msdn.com/shows/ARCast.TV/ARCastTV-Peter-Provost-on-whats-coming-for-Architects-in-Visual-Studio-Team-System/">ARCast.TV - Peter Provost on what&#8217;s coming for Architects in Visual Studio Team System</a>     <br /><strong>Business Alignment </strong>(Wednesday, October 1st):     <br />- Achieving Business Alignment with Visual Studio Team System 2010     <br />- Agile Planning Templates in Visual Studio Team System 2010     <br />- Enterprise Project Management with Visual Studio Team System 2010     <br />- Requirements Management and Traceability with Visual Studio Team System 2010     <br /><strong>Software Quality</strong> (Thursday, October 2nd):     <br />- Better Software Quality with Visual Studio Team System 2010     <br />- Manual Testing with Visual Studio Team System 2010     <br />- Historical Debugger and Test Impact Analysis in Visual Studio Team System 2010     <br /><strong>Team Foundation Server </strong>(Friday, October 3rd):     <br />- Brian Harry: Team Foundation Server 2010     <br />- Branching and Merging Visualization with Team Foundation Server 2010     <br />- Enterprise Team Foundation Server Management with Mario Rodriguez     <br />- Team Foundation Server 2010 Setup and Administration     <br />- An early look at Team Foundation Build 2010 with Jim Lamb     <br />- A first look at Visual Studio Team System Web Access 2010     <br />- Update on Team Foundation Server Migration and Synchronization</p>  <p>Brian Blackman    <br />Principal Application Development Consultant     <br />Microsoft Services - ISV Practice</p>]]></content:encoded>
    </item>
    <item>
      <title>Using NTFS Junctions in C#</title>
      <link>https://docs.microsoft.com/archive/blogs/brianbla/using-ntfs-junctions-in-c</link>
      <pubDate>Thu, 05 Jun 2008 15:32:51 GMT</pubDate>
      <dc:creator><![CDATA[Brianbla]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brianbla/2008/06/05/using-ntfs-junctions-in-c/</guid>
      <description><![CDATA[The work I will blog about is based on the work that Mark Russinovich did with SysInternals. I used...]]></description>
      <content:encoded><![CDATA[<p>The work I will blog about is based on the work that Mark Russinovich did with <a href="\\live.sysinternals.com\tools" target="_blank">SysInternals</a>. I used Mark's Junction.exe as my use case/scenario to guide the work I did and found some source at <a href="https://www.flexhex.com">www.flexhex.com</a>.</p> <p>NTFS junction points are a type of <a href="https://msdn.microsoft.com/en-us/library/aa365503(VS.85).aspx" target="_blank">reparse point</a> where you can link to local directories. There are utilities out that allow you to create and delete junction points. You can find reference to them in this Microsoft Support Article: <a title="https://support.microsoft.com/kb/205524" href="https://support.microsoft.com/kb/205524">https://support.microsoft.com/kb/205524</a>.</p> <p>What I did was wrote C# code using Platform Invoke Support to call into NTFS to create, delete, and interrogate junction points. No rocket science but a challenge when you don't have access to the source code - that includes me.</p> <p>In this post I will show you the layout of the reparse structures in C#. You can find references to this on the Internet, such as <a title="https://www.flexhex.com/docs/articles/hard-links.phtml" href="https://www.flexhex.com/docs/articles/hard-links.phtml">https://www.flexhex.com/docs/articles/hard-links.phtml</a>, and in WinNT.h, WinIoCtrl.h, winbase.h. Much of the rest are just standard file i/o values.</p> <p>To start you will need to define some maximum values.  <p><font face="Courier New">// Our maximum reparse point name size<br>private const int MAX_NAME_LENGTH = 1024;<br>private const int MAX_PATH = 260;<br>// Maximum reparse buffer info size. The max user defined reparse<br>// data is 16KB, plus there's a header.<br>private const int MAX_REPARSE_SIZE = 17000; </font> <p><font face="Courier New">// winnt.h<br>private const uint IO_REPARSE_TAG_SYMBOLIC_LINK = (0);<br>private const uint IO_REPARSE_TAG_MOUNT_POINT = (0xA0000003);<br>private const uint IO_REPARSE_TAG_HSM = (0xC0000004);<br>private const uint IO_REPARSE_TAG_SIS = (0x80000007);<br>private const uint IO_REPARSE_TAG_DFS = (0x8000000A); </font> <p><font face="Courier New">private const uint REPARSE_MOUNTPOINT_HEADER_SIZE = 8; </font> <p><font face="Courier New">// from WinIoCtl.h<br>private const uint FSCTL_SET_REPARSE_POINT = 589988;<br>private const uint FSCTL_GET_REPARSE_POINT = 589992;</font>  <p><font face="Courier New">// from winbase.h<br>private const int INVALID_HANDLE_VALUE = -1;<br>private const uint GENERIC_READ = 0x80000000;<br>private const uint GENERIC_WRITE = 0x40000000;<br>private const uint GENERIC_EXECUTE = 0x20000000;<br>private const uint GENERIC_ALL = 0x10000000; </font> <p><font face="Courier New">//Sharing<br>private const uint FILE_SHARE_NONE = 0x00000000;<br>private const uint FILE_SHARE_READ = 0x00000001;<br>private const uint FILE_SHARE_WRITE = 0x00000002;<br>private const uint FILE_SHARE_DELETE = 0x00000004; </font> <p><font face="Courier New">private const uint FILE_ATTRIBUTE_NORMAL = 0x00000080;<br>private const uint FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400&nbsp; ; </font> <p><font face="Courier New">//Create<br>private const uint CREATE_NEW = 1;<br>private const uint CREATE_ALWAYS = 2;<br>private const uint OPEN_EXISTING = 3;<br>private const uint OPEN_ALWAYS = 4;<br>private const uint TRUNCATE_EXISTING = 5; </font> <p><font face="Courier New">//Reparse<br>private const uint FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000;<br>private const uint FILE_FLAG_BACKUP_SEMANTICS = 0x02000000; </font></p> <p><font face="Courier New">In my next post I will show you some classes you need to create and the signatures for the PInvoke calls.</font></p>]]></content:encoded>
    </item>
    <item>
      <title>From The Inside Looking Out</title>
      <link>https://docs.microsoft.com/archive/blogs/brianbla/from-the-inside-looking-out</link>
      <pubDate>Sat, 15 Mar 2008 08:36:18 GMT</pubDate>
      <dc:creator><![CDATA[Brianbla]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/brianbla/2008/03/15/from-the-inside-looking-out/</guid>
      <description><![CDATA[I am Brian Blackman, my title is Application Development Consultant, and I work with ISV customers...]]></description>
      <content:encoded><![CDATA[<p>I am Brian Blackman, my title is Application Development Consultant, and I work with ISV customers under Microsoft Services Partner Advantage (MSPA.) I will talk about MSPA in future posts.  <p>Of my 11+ years at Microsoft, I have spent most of that time in Services with a few attachments to the Product Groups, e.g. the early days of Microsoft Access (code name Cirrus and the predecessor to Omega) and Windows for Automotive (WfA).  <p>I will blog and rant on just about anything I think is of value for someone outside of Microsoft, special announcements and reference to other important Microsoft employee blogs such as Brian Harry. I will post about technical topics, including code I have written that I think is worthy of your time without giving away any IP.  <p>My first post introduction blog will be on creating NTFS Junctions through C#. It is something I did about a year ago and is no rockets science yet a challenge without source code access - that includes me! Yes, that is correct, just because you work at Microsoft does not mean you have source code access. In fact, customers will have access when I do not. I use to have access, but overtime we became more secure about such access. For example, I just lost my access to CE and WfA since I no longer work with those products or those product groups.  <p>Until my next rant,</p> <p>Brian</p>]]></content:encoded>
    </item>
  </channel>
</rss>