<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Brendan on Windows Home Server</title><subtitle type="html">Add-ins and APIs and platforms, oh my!</subtitle><id>http://blogs.msdn.com/b/brendangrant/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/brendangrant/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2009-02-17T15:00:10Z</updated><entry><title>Why SCSI?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/archive/2009/06/18/why-scsi.aspx" /><id>http://blogs.msdn.com/b/brendangrant/archive/2009/06/18/why-scsi.aspx</id><published>2009-06-18T22:25:02Z</published><updated>2009-06-18T22:25:02Z</updated><content type="html">&lt;p&gt;Some old foggies in the computing industry (myself included) remember a time when being called “skuzzy” was a complement because we thought the speaker was referring to &lt;a href="http://en.wikipedia.org/wiki/SCSI"&gt;SCSI&lt;/a&gt;, or the Small Computer System Interface which for a time dominated much of the high end desktop and server market for connecting hard drives, optical drives, scanners and countless other devices.&lt;/p&gt;  &lt;p&gt;Today it really lost ground to improved versions of IDE, SATA, USB, and IEEE-1394 on the average desktop, laptop and server, but still exists in many high end servers and is still well supported in Windows and is even seen in many people’s Home Server Consoles which may identify internal SATA drives as SCSI:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhySCSI_AE40/SCSI%20Drives_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="SCSI Drives" border="0" alt="SCSI Drives" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhySCSI_AE40/SCSI%20Drives_thumb.png" width="429" height="412" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The answer to this comes from Henry Gabryjelski, a patent agent at Microsoft:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The reason requires a trip through the history of Windows NT storage (stop reading anytime).&lt;/p&gt;    &lt;p&gt;Short answer: You’re using a 3rd party driver to control the SATA adapter, which reports itself as a “SCSI” controller.&lt;/p&gt;    &lt;p&gt;Long answer:&lt;/p&gt;    &lt;p&gt;ATA miniports in Windows (until Vista) had no capability to support more than one outstanding request at a time.&amp;#160; This is because ATA devices were originally able to handle only a single request at a time.&amp;#160; Although native command queuing (NCQ -- multiple outstanding requests) was added to Parallel ATA (PATA), the implementations were so ... diverse ... that supporting them was not possible for Microsoft, thus no support added. &lt;/p&gt;    &lt;p&gt;Of course, vendors thought that NCQ was the best thing since sliced bread, since it improved performance of the drives.&amp;#160; Therefore, they used another driver model, that of the SCSI miniport driver, to control their hardware.&amp;#160; It provided the ability to have multiple outstanding requests, therefore enabling NCQ.&amp;#160; Due to the different means of reporting device IDs between SCSI and ATA, however, there were some oddities that resulted.&amp;#160; One of these oddities is that the drive is reported as “SCSI”.&amp;#160; Another oddity is that the SCSI INQUIRY data may not fully match the ATA IDENTIFY DATA, since the identifier fields have different fields of different lengths.&lt;/p&gt;    &lt;p&gt;So, you have a 3rd party SATA controller driver, and thus see “SCSI” even though it’s really SATA.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;There’s one question answered, only another now remains: “Why on earth does a patent agent know such things?” The answer to that is far simpler: Henry is a former Windows Storage Driver Developer.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9777144" width="1" height="1"&gt;</content><author><name>Brendan Grant</name><uri>http://blogs.msdn.com/Brendan-Grant/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>“Ahhh green”</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/archive/2009/06/18/ahhh-green.aspx" /><id>http://blogs.msdn.com/b/brendangrant/archive/2009/06/18/ahhh-green.aspx</id><published>2009-06-18T21:21:59Z</published><updated>2009-06-18T21:21:59Z</updated><content type="html">&lt;p&gt;At times life can be pretty complicated... backing up your home PCs and safeguarding your family files shouldn’t be, and when designing Windows Home Server the conscious decision was made to try to limit the number of configuration knobs and simply the information given so that in the end managing the server and knowing the general health of your home network would be pretty easy, even from a distance.&lt;/p&gt;  &lt;p&gt;Instead of requiring an administrator to login daily or check their email to find out of anything had gone wrong, we bubble up a general health state which will alert not only the server administrator to potential problems, but also anyone else in the house.&lt;/p&gt;  &lt;p&gt;The most commonly seen is through a notification icon that sits next to the clock of each client PC:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/Ahhgreen_9328/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/Ahhgreen_9328/image_thumb_1.png" width="20" height="20" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Within the console we also display the same value:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/Ahhgreen_9328/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/Ahhgreen_9328/image_thumb.png" width="77" height="77" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This same can be seen on the front of many OEM built Home Servers such as on the &lt;a href="http://www.hp.com/united-states/campaigns/mediasmart-server/#/EXOverview/"&gt;HP MediaSmart EX485&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/Ahhgreen_9328/HP_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="HP" border="0" alt="HP" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/Ahhgreen_9328/HP_thumb.png" width="182" height="187" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;and the &lt;a href="http://us.acer.com/acer-v2/product.do?LanguageISOCtxParam=en&amp;amp;inu49e.current.c2att92=451&amp;amp;link=ln314e&amp;amp;CountryISOCtxParam=US&amp;amp;kcond47e.c2att92=451&amp;amp;rcond159e.att21k=1&amp;amp;kcond48e.c2att101=54825&amp;amp;rcond190e.att21k=1&amp;amp;acond23=US&amp;amp;sp=page17e&amp;amp;rcond157e.c2att92=451&amp;amp;ctx1g.c2att92=451&amp;amp;kcond50e.c2att92=451&amp;amp;rcond45e.att21k=1&amp;amp;rcond158e.c2att1=25&amp;amp;ctx2.c2att1=25&amp;amp;inu53e.current.c2att92=451&amp;amp;rcond44e.c2att1=25&amp;amp;rcond186e.c2att92=451&amp;amp;rcond189e.c2att1=25&amp;amp;ctx1.att21k=1&amp;amp;CRC=3001324579"&gt;Acer Aspire easyStore AH340-UA230N&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/Ahhgreen_9328/Acer_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Acer" border="0" alt="Acer" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/Ahhgreen_9328/Acer_thumb.png" width="204" height="187" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;With the above one can simply say “ahhh green” (or blue) and know that all is well in the home... at least with regards to ones data&lt;/p&gt;  &lt;p&gt;All of these work great... but require you to either be running the client tray app (with the “Display Network Health Notifications” option checked), be logged into the Home Server Console or be within visual range of ones Home Server. &lt;/p&gt;  &lt;p&gt;Did you know you can use this same information in your own applications?&lt;/p&gt;  &lt;p&gt;Unfortunately there is no quick and easy GetHealthState() method within the Windows Home Server SDK, instead the value is determined by going through each outstanding &lt;a href="http://msdn.microsoft.com/en-us/library/bb425850.aspx"&gt;Notification&lt;/a&gt; and determining if any exist that are marked as a Warning or Error... and if so we consider the overall state to be same as the most severe, non-suppressed notification.&lt;/p&gt;  &lt;p&gt;Over on MSDN there exists a bit of &lt;a href="http://msdn.microsoft.com/en-us/library/dd172104.aspx"&gt;sample code that demonstrates how to do this on demand&lt;/a&gt;, though with a few minor tweaks you can turn it into something more asynchronous that will alert you as to when the health has changed:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; HealthChangedEventArgs : EventArgs&lt;/pre&gt;

  &lt;pre&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;public&lt;/span&gt; HealthState CurrentHealth { get; &lt;span class="kwrd"&gt;private&lt;/span&gt; set; }&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;public&lt;/span&gt; HealthChangedEventArgs(HealthState health)&lt;/pre&gt;

  &lt;pre&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;.CurrentHealth = health;&lt;/pre&gt;

  &lt;pre&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;HealthChangedEventArgs&amp;gt; HealthChanged;&lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnHealthChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, HealthChangedEventArgs e)&lt;/pre&gt;

  &lt;pre&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;            EventHandler&amp;lt;HealthChangedEventArgs&amp;gt; temp = HealthChanged;&lt;/pre&gt;

  &lt;pre&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (temp != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre class="alt"&gt;            {&lt;/pre&gt;

  &lt;pre&gt;                temp(sender, e);&lt;/pre&gt;

  &lt;pre class="alt"&gt;            }&lt;/pre&gt;

  &lt;pre&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;        HealthState lastState;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;And then update the NotificationChanged function ever so slightly:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; NotificationChanged(&lt;span class="kwrd"&gt;string&lt;/span&gt; UniqueID, WHS_Notification_Type Type, WHS_Notification_Severity Severity, &lt;span class="kwrd"&gt;int&lt;/span&gt; IsSuppressed, &lt;span class="kwrd"&gt;string&lt;/span&gt; textHeader, &lt;span class="kwrd"&gt;string&lt;/span&gt; textDescription, &lt;span class="kwrd"&gt;string&lt;/span&gt; helpFilename, &lt;span class="kwrd"&gt;string&lt;/span&gt; helpSection, &lt;span class="kwrd"&gt;string&lt;/span&gt; helpLinkText)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            NotificationItem item = &lt;span class="kwrd"&gt;new&lt;/span&gt; NotificationItem(UniqueID, Severity, IsSuppressed, textHeader, textDescription, helpFilename, helpSection, helpLinkText);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="rem"&gt;//if an add, add/overwrite item to existing list&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Type == WHS_Notification_Type.WHS_NOTIFICATION_ADD)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                notificationItems[item.UniqueID] = item;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (Type == WHS_Notification_Type.WHS_NOTIFICATION_REMOVE)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                &lt;span class="rem"&gt;//If remove, if item exists remove it&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (notificationItems.ContainsKey(item.UniqueID))&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                    notificationItems.Remove(item.UniqueID);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            &lt;span class="rem"&gt;//Get current health, if different than last, raise event of new state&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;            HealthState currentState = GetHealthState();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (currentState != lastState)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                lastState = currentState;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                OnHealthChanged(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; HealthChangedEventArgs(currentState));&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;It’s just that simple.&lt;/p&gt;

&lt;p&gt;Best of all... this code can be run on the server or on any client PC that is joined to a Windows Home Server and where both are running and communicating, recently &lt;a href="http://www.homeserverhacks.com/"&gt;MVP Donovan West&lt;/a&gt; recently released his first add-in, &lt;a href="http://www.homeserverhacks.com/2009/05/give-your-windows-home-server-its-own.html"&gt;@WHSTweet&lt;/a&gt; which publishes your health to twitter for remote monitoring using this same information.&lt;/p&gt;

&lt;p&gt;Next week I’ll show another simple way you can take this information and leverage it to find out your general health from afar...ish.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9776966" width="1" height="1"&gt;</content><author><name>Brendan Grant</name><uri>http://blogs.msdn.com/Brendan-Grant/ProfileUrlRedirect.ashx</uri></author><category term="Windows Home Server" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Windows+Home+Server/" /><category term="Development Tips" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Development+Tips/" /></entry><entry><title>2-Pack Seagate Barracuda 7200.11 1.5TB 32MB Drive $200 at Dell Home</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/archive/2009/05/22/2-pack-seagate-barracuda-7200-11-1-5tb-32mb-drive-200-at-dell-home.aspx" /><id>http://blogs.msdn.com/b/brendangrant/archive/2009/05/22/2-pack-seagate-barracuda-7200-11-1-5tb-32mb-drive-200-at-dell-home.aspx</id><published>2009-05-22T20:23:26Z</published><updated>2009-05-22T20:23:26Z</updated><content type="html">&lt;p&gt;I just saw the following referenced in an internal discussion list and given it’s public info, had to share this deal listed on &lt;a href="http://bensbargains.net/history/102330"&gt;Ben’s Bargains&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;Deal: 2-Pack Seagate Barracuda 7200.11 1.5TB 32MB Drive $200 at &lt;a href="http://bensbargains.net/merchants/6/Dell-Home-Coupons/"&gt;Dell Home Coupons&lt;/a&gt;&lt;/h4&gt;    &lt;p&gt;&lt;a href="http://bensbargains.net/redirect/102330"&gt;&lt;img border="0" alt="2-Pack Seagate Barracuda 7200.11 1.5TB 32MB Drive" align="right" src="http://bensimages.com/50000/img52078m.jpg" /&gt;&lt;/a&gt;Dell Home has the 2-Pack Seagate Barracuda 7200.11 ST31500341AS 1.5TB SATA 3.0Gb/s Hard Drive for $270 - $70 off coupon code &lt;b&gt;P0HD43$HB$DLDR&lt;/b&gt; [Exp 5/26, 1500] = &lt;b&gt;$200&lt;/b&gt; with free shipping. Features a rotational speed of 7200RPM and 32MB Cache. Here's &lt;a href="http://bensbargains.net/link.php?threadid=102330&amp;amp;linkid=0"&gt;Seagate's site&lt;/a&gt; pimping this drive. [&lt;a href="http://bensbargains.net/link.php?threadid=102330&amp;amp;linkid=1"&gt;Compare&lt;/a&gt;]&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;My poor little Home Server at home *only* has 5.91 TB of disk space... a pair of these will surely give me a little more room to grow :)&lt;/p&gt;  &lt;p&gt;This for a drive that currently runs $129.99 on NewEgg.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9635539" width="1" height="1"&gt;</content><author><name>Brendan Grant</name><uri>http://blogs.msdn.com/Brendan-Grant/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>"Why can't I install Power Pack 2?"</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/archive/2009/04/08/why-can-t-i-install-power-pack-2.aspx" /><id>http://blogs.msdn.com/b/brendangrant/archive/2009/04/08/why-can-t-i-install-power-pack-2.aspx</id><published>2009-04-09T03:23:55Z</published><updated>2009-04-09T03:23:55Z</updated><content type="html">&lt;p&gt;Since &lt;a href="http://blogs.technet.com/homeserver/archive/2009/03/23/windows-home-server-announcing-power-pack-2.aspx"&gt;releasing Power Pack 2&lt;/a&gt; last month I've been contacted by a few users who were not automatically upgraded to Power Pack 2 despite having Windows Update enabled, even where and clicking the &lt;strong&gt;Update Now&lt;/strong&gt; button doesn't find or install it:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_6.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_thumb_2.png" width="410" height="113" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The ultimate cause has been that while they were running Power Pack 1, they were running an pre-release version and Windows Update is generally not used to update beta software.&lt;/p&gt;  &lt;p&gt;Based on talking with these users, as well as a quick look some build numbers from the &lt;a href="http://www.microsoft.com/products/ceip/EN-US/default.mspx"&gt;Customer Experience Improvement Program&lt;/a&gt; it's clear that there are are enough users out there running pre-release versions of Power Pack 1 (and even some running Power Pack 2) that a blog post is warranted to remind everyone to make sure they know which version they are running and how to uninstall the beta version (if applicable).&lt;/p&gt;  &lt;p&gt;It's important to make sure that, not just so you don't risk hitting bugs that may have been fixed by the final release, but also because running pre-release software limits which feature and bug updates to Windows Home Server may be received, items such as &lt;a href="http://support.microsoft.com/kb/950193"&gt;KB950193&lt;/a&gt;, &lt;a href="http://support.microsoft.com/kb/961030"&gt;KB961030&lt;/a&gt;, and others (while running the beta versions you should still be receiving updates to the underlying Windows Server 2003 operating system).&lt;/p&gt;  &lt;h4&gt;Checking the build number&lt;/h4&gt;  &lt;p&gt;In order to check the build number of our Windows Home Server:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Launch the Home Server Console and login &lt;/li&gt;    &lt;li&gt;Click on the &lt;strong&gt;Settings&lt;/strong&gt; button &lt;/li&gt;    &lt;li&gt;Select the &lt;strong&gt;Resources&lt;/strong&gt; tab &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;A fully up-to-date (as of the time of this writing) Home Server will report the following versions in the Resources page:&lt;/p&gt;  &lt;p&gt;Windows Home Server Console: 6.0.2030.0    &lt;br /&gt;Windows Home Server Backup &amp;amp; Restore: 6.0.2030.0     &lt;br /&gt;Windows Home Server Drive Extender: 6.0.2030.0     &lt;br /&gt;Windows Home Server Remote Access: 6.0.2030.0     &lt;br /&gt;Windows Home Server Storage Manager: 6.0.2030.0&lt;/p&gt;  &lt;p&gt;Or visually:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_2.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_thumb.png" width="639" height="519" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Of the long version numbers, it is the &lt;strong&gt;2030&lt;/strong&gt; portion we care about the most in this context as it denotes the build number.&lt;/p&gt;  &lt;p&gt;A pre-release version would report something to the effect of:&lt;/p&gt;  &lt;p&gt;Windows Home Server Console: 6.0.1771.0    &lt;br /&gt;Windows Home Server Backup &amp;amp; Restore: 6.0.1771.0     &lt;br /&gt;Windows Home Server Drive Extender: 6.0.1771.0     &lt;br /&gt;Windows Home Server Remote Access: 6.0.1771.0     &lt;br /&gt;Windows Home Server Storage Manager: 6.0.1771.0&lt;/p&gt;  &lt;p&gt;Or visually:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_4.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_thumb_1.png" width="639" height="519" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The build number of the final version of Power Pack 1 is &lt;strong&gt;1800&lt;/strong&gt;... so we'll need to remove &lt;strong&gt;1771&lt;/strong&gt; before we install it.&lt;/p&gt;  &lt;h4&gt;How do we uninstall it?&lt;/h4&gt;  &lt;ol&gt;   &lt;li&gt;Log into your Windows Home Server with Remote Desktop &lt;/li&gt;    &lt;li&gt;Click on the &lt;strong&gt;Start&lt;/strong&gt; button and navigate to &lt;strong&gt;Control Panel&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Add or Remove Programs&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Make sure that the &lt;strong&gt;Show updates &lt;/strong&gt;check box is checked &lt;/li&gt;    &lt;li&gt;Locate and click on the entry &lt;strong&gt;PRERELEASE Windows Home Server Power Pack 1(KB944298)&lt;/strong&gt;:       &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_8.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_thumb_3.png" width="734" height="534" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Press it's &lt;strong&gt;Remove&lt;/strong&gt; button &lt;/li&gt;    &lt;li&gt;Click the &lt;strong&gt;Next&lt;/strong&gt; button to begin the removal &lt;/li&gt;    &lt;li&gt;Accept any prompts confirming removal &lt;/li&gt;    &lt;li&gt;Wait for removal to complete &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;Finish&lt;/strong&gt; button to restart server &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;em&gt;If you are dealing with a pre-release version of Power Pack 2, follow the above instructions for it instead.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Once the pre-release version has been removed, the built in update mechanism can be used to update the box, either by waiting for Windows Update to do it on it's own, or manually.&lt;/p&gt;  &lt;p&gt;In the above example, after rebooting th0 box the server identifies itself with the following versions:&lt;/p&gt;  &lt;p&gt;Windows Home Server Console: 6.0.1500.6    &lt;br /&gt;Windows Home Server Backup &amp;amp; Restore: 6.0.1500.6     &lt;br /&gt;Windows Home Server Drive Extender: 6.0.1500.6     &lt;br /&gt;Windows Home Server Remote Access: 6.0.1500.6     &lt;br /&gt;Windows Home Server Storage Manager: 6.0.1500.6&lt;/p&gt;  &lt;p&gt;And visually:    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_12.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_thumb_5.png" width="639" height="519" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now we can go back to the &lt;strong&gt;General&lt;/strong&gt; settings tab and click the &lt;strong&gt;Update Now&lt;/strong&gt; button to begin installing Power Pack 1:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_14.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WhycantIseePowerPack2_C148/image_thumb_6.png" width="555" height="387" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Unfortunately you can't directly upgrade from build 1500 (RTM build) to 2030 (Power Pack 2), instead you must first upgrade to Power Pack 1, and then you can go to Power Pack 2.&lt;/p&gt;  &lt;p&gt;For those curious as to which version numbers correspond with various releases, take a look at this excellent &lt;a href="http://www.mediasmartserver.net/wiki/index.php/What_is_the_latest_version_of_Windows_Home_Server%3F"&gt;wiki entry on MediaSmartServer.net&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Wrapping it up&lt;/h4&gt;  &lt;p&gt;If you are one of those users willing to run beta software, it's important that you know just which build you are running and remember to remove it when the final version comes out... even if you are more than happy with the beta version.&lt;/p&gt;  &lt;p&gt;Granted there may be functionality in that old version that is preferred over the final one, sticking with the pre-release software can be risky as it almost certainly contains bugs that have since been fixed, but also may limit your ability to receive future Windows Home Server updates.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Editors Note: No actual Home Servers were harmed in the production of this blog post&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9539212" width="1" height="1"&gt;</content><author><name>Brendan Grant</name><uri>http://blogs.msdn.com/Brendan-Grant/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>New APIs in Power Pack 2!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/archive/2009/03/25/new-apis-in-power-pack-2.aspx" /><id>http://blogs.msdn.com/b/brendangrant/archive/2009/03/25/new-apis-in-power-pack-2.aspx</id><published>2009-03-26T02:01:12Z</published><updated>2009-03-26T02:01:12Z</updated><content type="html">&lt;p&gt;Pssst, I've got a not so little secret for you.&lt;/p&gt;  &lt;p&gt;No, it's not that the &lt;a href="http://blogs.technet.com/homeserver/archive/2009/03/23/windows-home-server-announcing-power-pack-2.aspx"&gt;English version of Power Pack 2&lt;/a&gt; went live on Windows Update yesterday.&lt;/p&gt;  &lt;p&gt;It's not even that Windows Home Server has at long last &lt;a href="http://blogs.technet.com/homeserver/archive/2009/03/23/windows-home-server-now-available-on-msdn.aspx"&gt;reached MSDN and TechNet&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;What could be bigger than either of those?&lt;/p&gt;  &lt;p&gt;How about the fact that there are quite a few new APIs in Power Pack 2, things that are easy to miss if you aren't in the habit of examining every single new binary that comes as part of a QFE or Power Pack or scouring the &lt;a href="http://msdn.microsoft.com/en-us/library/bb425866.aspx"&gt;Windows Home Server SDK portal&lt;/a&gt; for changes (though I am a fan of both).&lt;/p&gt;  &lt;p&gt;These new APIs ultimately come in two flavors... some changes are things that have been shipping as part of previous QFE's for quite a few months, while others are things that are new in Power Pack 2... in either case all are now officially documented on MSDN.&lt;/p&gt;  &lt;p&gt;What are they? &lt;/p&gt;  &lt;h5&gt;Microsoft.HomeServer.SDK.Interop.v1.dll&lt;/h5&gt;  &lt;p&gt;Rather than describe each of these, I am going to let their names speak for them and what they can do:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.idiskinfo2.aspx"&gt;IDiskInfo2&lt;/a&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.idiskinfo2.locationdisplayname.aspx"&gt;LocationDisplayName&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.ishareinfo2.aspx"&gt;IShareInfo2&lt;/a&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.ishareinfo2.getpermissions.aspx"&gt;GetPermissions()&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.ishareinfo2.setpermissions.aspx"&gt;SetPermissions()&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.ishareinfo2.guid.aspx"&gt;GUID&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iuserinfo.aspx"&gt;IUserInfo&lt;/a&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iuserinfo.enabled.aspx"&gt;Enabled&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iuserinfo.firstname.aspx"&gt;FirstName&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iuserinfo.lastname.aspx"&gt;LastName&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iuserinfo.logonname.aspx"&gt;LogOnName&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iuserinfo.passwordstrength.aspx"&gt;PasswordStrength&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iuserinfo.remoteallowed.aspx"&gt;RemoteAllowed&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iwhsinfo2.aspx"&gt;IWHSInfo2&lt;/a&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iwhsinfo2.createshare.aspx"&gt;CreateShare()&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iwhsinfo2.getshareinfo2.aspx"&gt;GetShareInfo2()&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iwhsinfo2.getusersinfo.aspx"&gt;GetUsersInfo()&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.sdk.interop.v1.iwhsinfo2.removeshare.aspx"&gt;RemoveShare()&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;But wait... there's more!&lt;/p&gt;  &lt;h5&gt;HomeServerExt.dll&lt;/h5&gt;  &lt;p&gt;Back in Console land we've long had the ability to &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.extensibility.iconsoleservices.opensettings.aspx"&gt;open an arbitrary Settings page&lt;/a&gt; (provided we know it's guid) or a &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.extensibility.iconsoleservices.openurl.aspx"&gt;URL on the client PC&lt;/a&gt;... did you know you can also select a specific console tab? With a few tweaks to IConsoleServices you can:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.extensibility.iconsoleservices.aspx"&gt;IConsoleServices&lt;/a&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.extensibility.iconsoleservices.gettab.aspx"&gt;GetTab&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.extensibility.iconsoleservices.gettabs.aspx"&gt;GetTabs&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.extensibility.iconsoleservices.opentab.aspx"&gt;OpenTab&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;Each of the above methods rely on the new &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.extensibility.tabidentifierattribute.aspx"&gt;TabIdentifier attribute&lt;/a&gt; which can be used to decorate an &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.homeserver.extensibility.iconsoletab.aspx"&gt;IConsoleTab&lt;/a&gt; implementer so that other applications.&lt;/p&gt;  &lt;p&gt;While many of the first set of APIs will likely be very useful to 3rd party developers, these last bits were added primarily with OEMs in mind who desired a way to be able to easily guide a user through setting up of their new Windows Home Server.&lt;/p&gt;  &lt;h5&gt;Add-in EULAs&lt;/h5&gt;  &lt;p&gt;For an add-in to be installed via the Windows Home Server Console it must support 'silent' installation which prevents it from using the normal MSI mechanisms for popping a EULA in the face of a user and recurring their consent before continuing.&lt;/p&gt;  &lt;p&gt;For companies targeting Windows Home Server with products that required a EULA, they would often require that the user log into their server with Remote Desktop and manually kick off a normal MSI. This work around works, but isn't the best user experience and as a result we had some OEMs and others asking for some ability to pop a EULA at install time.&lt;/p&gt;  &lt;p&gt;With Power Pack 2 installed, a developer or company can include a EULA with their installer and when the user goes to install it via the console, they will be prompted for their agreement:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/EULA_C71F/image_4.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/EULA_C71F/image_thumb_1.png" width="489" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;What does it take for a developer to use this?&lt;/p&gt;  &lt;p&gt;Assuming that you have an add-in named... MyAddin.msi located in the &lt;a href="file://\\servername\Software\Add-ins"&gt;\\&lt;em&gt;servername&lt;/em&gt;\Software\Add-Ins\&lt;/a&gt; directory, then a developer need only include a file named MyAddin.rtf as well, and if this file is present then we will pop the &lt;a href="http://msdn.microsoft.com/en-us/library/cc766792.aspx"&gt;EULA dialog&lt;/a&gt;, if not things will work as they previously have.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9508809" width="1" height="1"&gt;</content><author><name>Brendan Grant</name><uri>http://blogs.msdn.com/Brendan-Grant/ProfileUrlRedirect.ashx</uri></author><category term="Windows Home Server" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Windows+Home+Server/" /><category term="Development Tips" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Development+Tips/" /><category term="Power Pack 2" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Power+Pack+2/" /></entry><entry><title>Windows Home Server Power Pack 2 Released</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/archive/2009/03/24/windows-home-server-power-pack-2-released.aspx" /><id>http://blogs.msdn.com/b/brendangrant/archive/2009/03/24/windows-home-server-power-pack-2-released.aspx</id><published>2009-03-24T21:30:45Z</published><updated>2009-03-24T21:30:45Z</updated><content type="html">&lt;p&gt;Have you looked on Windows Update lately? No? You should... at least if you are a running an English version of Windows Home Server.&lt;/p&gt;  &lt;p&gt;Why so? This morning we just released Power Pack 2 to Windows Update!&lt;/p&gt;  &lt;p&gt;What do you need to get it? Just make sure automatic updates are enabled and you'll get it automatically tonight, otherwise you can manually run Windows Update from the console and after a reboot you'll have installed and ready:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/e1565ef5f638_C95E/image_4.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/e1565ef5f638_C95E/image_thumb_1.png" width="639" height="519" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;No... Power Pack 2 does not include Windows Media Center... but with this update, computers that are running Windows Media Center can now connect to your home server to save and play content that is stored in shared folders!&lt;/p&gt;  &lt;p&gt;For more details on what Power Pack 2 includes, see &lt;a href="http://go.microsoft.com/fwlink/?LinkId=84725"&gt;the release notes&lt;/a&gt;, the main &lt;a href="http://blogs.technet.com/homeserver/archive/2009/03/23/windows-home-server-announcing-power-pack-2.aspx"&gt;Windows Home Server blog&lt;/a&gt; as well on &lt;a href="http://www.wegotserved.co.uk/2009/03/24/windows-home-server-power-pack-2-delivers-first-shoots-of-media-center-integration/"&gt;We Got Served&lt;/a&gt;, &lt;a href="http://mswhs.com/2009/03/24/power-pack-2-is-here/"&gt;MSWHS&lt;/a&gt;, &lt;a href="http://www.mediasmartserver.net/2009/03/23/microsoft-releases-windows-home-server-power-pack-2/"&gt;MediaSmartServer.net&lt;/a&gt; and countless other sites.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9504917" width="1" height="1"&gt;</content><author><name>Brendan Grant</name><uri>http://blogs.msdn.com/Brendan-Grant/ProfileUrlRedirect.ashx</uri></author><category term="Windows Home Server" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Windows+Home+Server/" /><category term="Power Pack 2" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Power+Pack+2/" /></entry><entry><title>Windows Home Server and Netbooks</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/archive/2009/03/15/windows-home-server-and-netbooks.aspx" /><id>http://blogs.msdn.com/b/brendangrant/archive/2009/03/15/windows-home-server-and-netbooks.aspx</id><published>2009-03-15T19:41:27Z</published><updated>2009-03-15T19:41:27Z</updated><content type="html">&lt;p&gt;Commenter &lt;a href="http://blogs.msdn.com/brendangrant/archive/2009/03/13/why-not-have-email-in-windows-home-server.aspx#9479214"&gt;JohnCz recently suggested&lt;/a&gt;: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Perhaps one day we'll see WHS OEMs offer a free netbook with WHS purchase.&amp;#160; Or perhaps a WHS bundled with an extender is on the horizon.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;While I can’t say when or if either will happen (partially due to pesky little NDAs, but mostly because I don’t know), it should be noted that from a marketing perspective something similar is already happening. Recently our friends at Acer recently launched the &lt;a href="http://www.engadget.com/2009/02/26/acers-easystore-h340-says-hello-atom-hello-windows-home-server"&gt;Acer easyStore H340&lt;/a&gt; in Japan and as part of their retail strategy there are selling it alongside one of their netbook models:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WindowsHomeServerandNetbooks_85DC/DSCN0815_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DSCN0815" border="0" alt="DSCN0815" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/WindowsHomeServerandNetbooks_85DC/DSCN0815_thumb.jpg" width="604" height="454" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Here’s hoping we’ll see similar display setups if/when the H340 comes stateside.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9479313" width="1" height="1"&gt;</content><author><name>Brendan Grant</name><uri>http://blogs.msdn.com/Brendan-Grant/ProfileUrlRedirect.ashx</uri></author><category term="Windows Home Server" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Windows+Home+Server/" /><category term="Retail" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Retail/" /></entry><entry><title>Why not have email in Windows Home Server?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/archive/2009/03/13/why-not-have-email-in-windows-home-server.aspx" /><id>http://blogs.msdn.com/b/brendangrant/archive/2009/03/13/why-not-have-email-in-windows-home-server.aspx</id><published>2009-03-13T19:38:20Z</published><updated>2009-03-13T19:38:20Z</updated><content type="html">&lt;p&gt;An often asked question by some of the more advanced users of Windows Home Server has been &amp;quot;Why doesn't it include built in support for hosting my own email on it?&amp;quot;&lt;/p&gt;  &lt;p&gt;The are two primary reasons, the most important being the fact that most users simply didn't want it.&lt;/p&gt;  &lt;p&gt;Back in 2004 or so when the &lt;a href="http://en.wikipedia.org/wiki/Skunk_works"&gt;skunkworks&lt;/a&gt; project that eventually became Windows Home Server first was getting rolling, various studies were performed to best understand what users really wanted and expected from a Home Server.&lt;/p&gt;  &lt;p&gt;Of those users with broadband internet connections (the target market for Windows Home Server) 86% were already &amp;quot;very satisfied&amp;quot; with their existing email which is pretty significant considering that when you broke down what services respondents were using, about ~50% of those using their provided ISP account, while another ~50% another uses one of the major web mail providers (Hotmail, Gmail, etc). Note that these two groups are not mutually exclusive as there company email and existing vanity domain based email and there still exists plenty of room for overlap.&lt;/p&gt;  &lt;p&gt;Back then For those who want email on their own vanity domain one would have to contract with a company for web hosting and get the email included or use a straight email provider, both of which would likely cost them a few bucks per month. If they wanted a more advanced mail server (like &lt;a href="http://www.microsoft.com/exchange/default.mspx"&gt;Exchange&lt;/a&gt;) they would likely pay significantly more.&lt;/p&gt;  &lt;p&gt;Now though, with services like &lt;a href="http://domains.live.com/"&gt;Windows Live Admin Center&lt;/a&gt; (formerly known as Windows Live Custom Domains)... you can use &lt;a href="http://www.hotmail.com/"&gt;Hotmail&lt;/a&gt; and all of the spam fighting and organizational tools it provides for free as the back-end for your own custom domain, all you have to do is provide the domain name and an &lt;a href="http://en.wikipedia.org/wiki/MX_record"&gt;MX record&lt;/a&gt;... which is a good thing if your home network ever goes down.&lt;/p&gt;  &lt;p&gt;Practically speaking... consider this hypothetical case:&lt;/p&gt;  &lt;p&gt;Imagine you have a house/apartment fire and on your way out, after making sure the kids and spouse are out the door ahead of you, and that the dog and cat are safe, you stop to grab your Windows Home Server knowing that even if the desktops and laptops go, you'll have all of the files and backups you need... what then?&lt;/p&gt;  &lt;p&gt;Even if your home isn't a complete loss, you may not be able to setup your email serving Windows Home Server there again right away due to the possibility of water damage or electrical issues. Where do you run your server in the mean time? The in laws house? The hotel room? Tethered to your cell phone?&lt;/p&gt;  &lt;p&gt;These are the kinds of issues that the average data center and/or enterprise has to think about in order to provide a given level of reliability and is not something a Home Server owner, even an advanced one should have to think about to ensure that they can keep sending and receiving email.&lt;/p&gt;  &lt;p&gt;This is part of why the &lt;a href="http://www.microsoft.com/azure/default.mspx"&gt;Azure Services Platform&lt;/a&gt; and related &lt;a href="http://dev.live.com/"&gt;Live Services&lt;/a&gt; are so interesting to watch as time goes on as it simplifies so much of the complexity behind having multiple data center class reliability and availability and while there certainly are aspects of a product like Windows Home Server that could take advantage of 'cloud services', it is unlikely that that it will ever be fully replaced by such a platform.&lt;/p&gt;  &lt;p&gt;Lets face it, services like Live Mesh is great... but it *only* gives you 5 gigs in the cloud for free. Why be limited to 5 gigs when I can have 5 TB on my Home Server for just a few dollars more and possibly replicate a subset of those files (my most important ones) to the cloud?&lt;/p&gt;  &lt;p&gt;Above I said there were two reasons... the second is that there is already a Microsoft server product which is almost as easy to use as Windows Home Server and provides email... it's called &lt;a href="http://www.microsoft.com/sbs/en/us/default.aspx"&gt;Windows Small Business Server 2008&lt;/a&gt; which not only has email through Exchange, but SharePoint, Forefront, SQL Server, WSUS and far far more and is intended those customers and businesses who want the kind of on premises services like email, which as I said is less the case with Windows Home Server users.&lt;/p&gt;  &lt;p&gt;Sure SBS 2008, it doesn't do everything Windows Home Server can... sometimes though two boxes/products/services/etc are required instead of one, just as we've seen with &lt;a href="http://blogs.technet.com/homeserver/archive/2008/09/04/10-computers-10-users.aspx"&gt;Windows Home Server's 10 PC and 10 user limit&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9473367" width="1" height="1"&gt;</content><author><name>Brendan Grant</name><uri>http://blogs.msdn.com/Brendan-Grant/ProfileUrlRedirect.ashx</uri></author><category term="Windows Home Server" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Windows+Home+Server/" /></entry><entry><title>Single Sign-on with ASP.NET on Windows Home Server</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/archive/2009/03/09/single-sign-on-with-asp-net-on-windows-home-server.aspx" /><id>http://blogs.msdn.com/b/brendangrant/archive/2009/03/09/single-sign-on-with-asp-net-on-windows-home-server.aspx</id><published>2009-03-09T20:28:38Z</published><updated>2009-03-09T20:28:38Z</updated><content type="html">&lt;p&gt;One of the major advantages Windows Home Server has over much of it’s competition (external hard drives, generic network attached storage devices, secondary PCs) is that it’s a full Windows Server under the hood and comes along with the ability to host almost any sort of web page or application you care to deploy to it, including those based on ASP.NET.&lt;/p&gt;  &lt;p&gt;With your server hosting all of your content at &lt;a href="https://smithfamily.homeserver.com"&gt;https://smithfamily.homeserver.com&lt;/a&gt;, there exists the need to control access, something Windows Home Server does on it's own through it's remote access web site which uses the underlying Windows accounts. 3rd party developers can leverage Windows or Forms based authentication in their own web applications... however in doing so they are normally responsible for handling authentication... did you know developers you can use the same login page that already ships on Windows Home Server in their own applications?&lt;/p&gt;  &lt;p&gt;Why so? The authentication system built in to ASP.NET can be used to offload some of the work of determining if a user is authenticated and what to do with them if they are not (amongst many other things)... these settings, like most other ASP.NET settings in the web.config file within a web application's directory and when the correct sections of config are copied between applications, single sign-on is the result.&lt;/p&gt;  &lt;p&gt;Before we go any further, if you do not already know how to use Forms based authentication in ASP.NET I would highly suggest taking &lt;a href="http://msdn.microsoft.com/en-us/library/aa480476.aspx"&gt;a quick read&lt;/a&gt; of what it can do for you and how.&lt;/p&gt;  &lt;p&gt;Lets take a look at the web.config (c:\Inetpub\remote\web.config) from a Home Server sitting under my desk at work:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;      &lt;br /&gt;&amp;lt;configuration&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;system.web&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;machineKey validationKey=&amp;quot;&amp;lt;key removed for length&amp;gt;&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160; decryptionKey=&amp;quot;&amp;lt;key removed for length&amp;gt;&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160; validation=&amp;quot;SHA1&amp;quot; decryption=&amp;quot;AES&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;authentication mode=&amp;quot;Forms&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;forms name=&amp;quot;RemotePortalAuth&amp;quot; loginUrl=&amp;quot;logon.aspx&amp;quot; protection=&amp;quot;All&amp;quot; path=&amp;quot;/&amp;quot; timeout=&amp;quot;12000&amp;quot; requireSSL=&amp;quot;false&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/authentication&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;authorization&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;deny users=&amp;quot;?&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;allow users=&amp;quot;*&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/authorization&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;httpRuntime maxRequestLength=&amp;quot;2097151&amp;quot; executionTimeout=&amp;quot;86400&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;customErrors mode=&amp;quot;On&amp;quot; defaultRedirect=&amp;quot;error.aspx&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;trace enabled=&amp;quot;false&amp;quot; requestLimit=&amp;quot;100&amp;quot; pageOutput=&amp;quot;false&amp;quot; traceMode=&amp;quot;SortByTime&amp;quot; localOnly=&amp;quot;false&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;sessionState mode=&amp;quot;InProc&amp;quot; cookieless=&amp;quot;false&amp;quot; timeout=&amp;quot;20&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;globalization requestEncoding=&amp;quot;utf-8&amp;quot; responseEncoding=&amp;quot;utf-8&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/system.web&amp;gt;       &lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In order for our own web application to use the same authentication back end and cookie as the existing Windows Home Server Remote Access web page, we need to copy two sections of the above file to the web.config file being used by our own custom app, specifically the &lt;a href="http://msdn.microsoft.com/en-us/library/w8h3skw9.aspx"&gt;machineKey&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/1d3t3c61.aspx"&gt;authentication&lt;/a&gt; key tags.&lt;/p&gt;  &lt;p&gt;The authentication key specifies not only what kind of authentication to use (forms), but what the name of the resulting authentication cookie will be (RemotePortalAuth) and where to send browsers who are not authenticated (login.aspx) while the machineKey defines the encryption keys to use&lt;/p&gt;  &lt;p&gt;Before hitting save on my updated web.config file, I will need to tweak it slightly, changing the loginUrl property to point to the logon page that exists in a directory different than where the new web app is running:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;machineKey validationKey=&amp;quot;&amp;lt;key removed for length&amp;gt;&amp;quot;    &lt;br /&gt;&amp;#160;&amp;#160; decryptionKey=&amp;quot;&amp;lt;key removed for length&amp;gt;&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160; validation=&amp;quot;SHA1&amp;quot; decryption=&amp;quot;AES&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;authentication mode=&amp;quot;Forms&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;forms name=&amp;quot;RemotePortalAuth&amp;quot; loginUrl=&amp;quot;../remote/logon.aspx&amp;quot; protection=&amp;quot;All&amp;quot; path=&amp;quot;/&amp;quot; timeout=&amp;quot;12000&amp;quot; requireSSL=&amp;quot;false&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/authentication&amp;gt;&lt;/p&gt;  &lt;p&gt;What I described above is the manual process behind such a process, it would be the responsibility of an installer of a web site to open the existing web.config file, grab the needed bits and insert it into it's own web.config, which given only involves a bit of xml can be a simple process.&lt;/p&gt;  &lt;p&gt;What does this give us? If I installed a web application that lives in the virtual directory SingleSignOnExample on my Home Server and navigated to:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://smithfamily.homeserver.com/SingleSignOnExample/Default.aspx"&gt;https://smithfamily.homeserver.com/SingleSignOnExample/Default.aspx&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Unless I was already logged into the remote access web page, I'd be automatically redirected to:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://smithfamily.homeserver.com/remote/logon.aspx?ReturnUrl=%2fSingleSignOnExample%2fDefault.aspx"&gt;https://smithfamily.homeserver.com/remote/logon.aspx?ReturnUrl=%2fSingleSignOnExample%2fDefault.aspx&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Which would allow me to login with my existing credentials, and then be redirected back to the original URL:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://smithfamily.homeserver.com/SingleSignOnExample/Default.aspx"&gt;https://smithfamily.homeserver.com/SingleSignOnExample/Default.aspx&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;After this is all said and done, it may be good to have ones installer also edit the server's &lt;a href="http://msdn.microsoft.com/en-us/library/cc766796.aspx"&gt;websites.xml&lt;/a&gt; file to advertise the new web application to existing users of the remote access web site.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9467988" width="1" height="1"&gt;</content><author><name>Brendan Grant</name><uri>http://blogs.msdn.com/Brendan-Grant/ProfileUrlRedirect.ashx</uri></author><category term="Windows Home Server" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Windows+Home+Server/" /><category term="Development Tips" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Development+Tips/" /><category term="Tips and Tricks" scheme="http://blogs.msdn.com/b/brendangrant/archive/tags/Tips+and+Tricks/" /></entry><entry><title>The most useful feature of Remote Desktop I never knew about</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brendangrant/archive/2009/02/17/most-useful-feature-of-remote-desktop-i-never-knew-about.aspx" /><id>http://blogs.msdn.com/b/brendangrant/archive/2009/02/17/most-useful-feature-of-remote-desktop-i-never-knew-about.aspx</id><published>2009-02-18T02:00:10Z</published><updated>2009-02-18T02:00:10Z</updated><content type="html">&lt;p&gt;What follows is probably common knowledge, however given the fact that I didn’t learn either until after joining Microsoft I feel I need to share the wonders of &lt;a href="http://technet.microsoft.com/en-us/library/cc781321.aspx"&gt;local drive sharing in Remote Desktop&lt;/a&gt; for the one or two folks who do not yet know.&lt;/p&gt;  &lt;p&gt;Take your normal XP, 2003, Vista, Windows 7 Remote Desktop client:&lt;/p&gt;  &lt;p&gt;(showing XP as an example)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/MostusefulfeatureofRemoteDesktop_D12B/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/MostusefulfeatureofRemoteDesktop_D12B/image_thumb.png" width="415" height="187" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click on the &lt;strong&gt;Options&lt;/strong&gt; button and then select the &lt;strong&gt;Local Resources Tab&lt;/strong&gt;: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/MostusefulfeatureofRemoteDesktop_D12B/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/MostusefulfeatureofRemoteDesktop_D12B/image_thumb_2.png" width="415" height="475" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next click the &lt;strong&gt;More&lt;/strong&gt; button under Local devices and resources, then expand the &lt;strong&gt;Drives&lt;/strong&gt; list:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/MostusefulfeatureofRemoteDesktop_D12B/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/MostusefulfeatureofRemoteDesktop_D12B/image_thumb_3.png" width="423" height="439" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The above allows you to share local (or locally mapped) drives to the PC you are going to connect to with full read/write access.&lt;/p&gt;  &lt;p&gt;If I enable all of the drives... when I login to my Windows Home Server machine I’ll see something like this in My Computer:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/MostusefulfeatureofRemoteDesktop_D12B/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/MostusefulfeatureofRemoteDesktop_D12B/image_thumb_4.png" width="685" height="423" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;(note in the above only C &amp;amp; D are physical drives, the rest are mapped network drives)&lt;/p&gt;  &lt;p&gt;So I have access to the drives via My Computer and that’s neat... but it gets better, there exists a virtual computer named tsclient that contains all of the above folders, folders that I can use to map drives against:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/MostusefulfeatureofRemoteDesktop_D12B/image_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/brendangrant/WindowsLiveWriter/MostusefulfeatureofRemoteDesktop_D12B/image_thumb_5.png" width="544" height="406" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Why is this useful? When testing new builds of something on a target PC, no longer do I need to first copy the new version to a temp location and then again to another location and then move to my RDP window and copy it again... I can do a single copy operation from the source location on my development PC.&lt;/p&gt;  &lt;p&gt;More so if I have all of my coding work in a drive with an unusual letter that isn’t likely to exist on the target machine (say Q:), I can map the my &lt;a href="file://\\tsclient\Q\"&gt;\\tsclient\Q\&lt;/a&gt; share back to Q: on the target machine... this way if when debugging, my debugger will more easily be able to find the sources based on what is contained in my symbols (they are already pointing to Q: aren’t they?).&lt;/p&gt;  &lt;p&gt;Sure the above is probably common knowledge, but I didn’t learn it until over the summer, more shameful though was that I only accidently discovered (last week) that most recent versions of MSTSC allow you to do copy and paste file transfers.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9428926" width="1" height="1"&gt;</content><author><name>Brendan Grant</name><uri>http://blogs.msdn.com/Brendan-Grant/ProfileUrlRedirect.ashx</uri></author></entry></feed>