<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Remote Desktop Services (Terminal Services) Team Blog</title><link>http://blogs.msdn.com/rds/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>RemoteApp and Desktop Connection Feed Extensibility</title><link>http://blogs.msdn.com/rds/archive/2009/12/17/remoteapp-and-desktop-connection-feed-extensibility.aspx</link><pubDate>Thu, 17 Dec 2009 23:30:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9938462</guid><dc:creator>termserv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rds/comments/9938462.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9938462</wfw:commentRss><description>&lt;p&gt;In our earlier blog post, we introduced &lt;a href="http://blogs.msdn.com/rds/archive/2009/06/08/introducing-remoteapp-and-desktop-connections.aspx"&gt;RemoteApp and Desktop Connections&lt;/a&gt; to enable users to have their RemoteApp and Desktop icons integrated on their Windows 7 start menu.&amp;#160; &lt;a href="http://blogs.msdn.com/rds/archive/2009/06/08/introducing-remoteapp-and-desktop-connections.aspx"&gt;RemoteApp and Desktop Connections&lt;/a&gt; works with this new feature of Remote Desktop Web Access (RD Web Access)--the RemoteApp and Desktop Connection feed. This RemoteApp and Desktop Connection feed provides significant extensibility to partners and customers in presenting remote resources in various ways. The connection feed feature contains information about published remote resources (e.g. RDP files and their associated icon and image files) in a software-parsable XML format. &lt;/p&gt;  &lt;p&gt;On Remote Desktop Web Access (RD Web Access) Server, there are two URLs available to serve the connection feed. You need to choose one depending on the extensibility scenario.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;“/rdweb/pages/webfeed.aspx” URL:      &lt;br /&gt;This URL is used for RD Web Access website extensibility. You can create a new web page similar to the RD Web Access default webpage. Below are some of the features that are possible by using this URL &lt;/li&gt; &lt;/ol&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;Branding or customizations for your customers or organization. &lt;/li&gt;      &lt;li&gt;Visually sorting or segregating remote resource types (e.g. RemoteApp and Remote Desktop resources). &lt;/li&gt;      &lt;li&gt;Filtering remote resources at display time (for example, additional filtering apart from &lt;a href="http://blogs.msdn.com/rds/archive/2009/06/12/introducing-remoteapp-user-assignment.aspx"&gt;RemoteApp filtering&lt;/a&gt; ). &lt;/li&gt;      &lt;li&gt;Silverlight-based webpage for a rich user experience. &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;By using this connection feed URL&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;There is no need to write a custom authentication mechanism because the webpage runs within the RD Web Access web application. &lt;/li&gt;      &lt;li&gt;It is easier to support Single Sign On for launching remote resources. In a future post, we will cover on how to enable SSO. &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;ol&gt;   &lt;li value="2"&gt;“/rdweb/feed/webfeed.aspx” URL:      &lt;br /&gt;This URL can also be used to provide extensibility and is more flexible than the above URL. In addition to above feature set, below are some of the other&lt;a name="_GoBack"&gt;&lt;/a&gt; features that are possible by using this URL: &lt;/li&gt; &lt;/ol&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;Creating new client applications similar to &lt;a href="http://blogs.msdn.com/rds/archive/2009/06/08/introducing-remoteapp-and-desktop-connections.aspx"&gt;RemoteApp and Desktop Connections&lt;/a&gt; for downlevel windows clients and for thin clients. &lt;/li&gt;      &lt;li&gt;Creating new web portal similar to RD Web Access, not just a webpage alone. &lt;/li&gt;      &lt;li&gt;Integrating remote resource presentation with your existing web portal. &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;By using this connection feed URL&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;Client applications get an authentication cookie that will not expire. This can be used for easier automatic updates without re-prompting user for credentials. &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;Here is a sample connection XML containing information about remote resources:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;﻿&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ResourceCollection&lt;/span&gt; &lt;span class="attr"&gt;PubDate&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;2009-07-09T17:57:30.323Z&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;SchemaVersion&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/ts/2007/05/tswf&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;  &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Publisher&lt;/span&gt; &lt;span class="attr"&gt;LastUpdated&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;2009-07-09T17:57:12.588625Z&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Remote Desktop Services Default Connection&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Contoso&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Description&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;    &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;      &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Resource&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;60fb077b94a241a473cf982140337213e4d93177&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;&lt;strong&gt;Alias&lt;/strong&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;mspaint&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;&lt;strong&gt;Title&lt;/strong&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Paint&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;LastUpdated&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;2009-07-09T17:57:12.588625Z&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;RemoteApp&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ExecutableName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;mspaint.exe&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;        &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Icons&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;          &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;IconRaw&lt;/span&gt; &lt;span class="attr"&gt;FileType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Ico&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;&lt;strong&gt;FileURL&lt;/strong&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;/RDWeb/Pages/rdp/mspaint032x32.ico&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;          &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Icon32&lt;/span&gt; &lt;span class="attr"&gt;Dimensions&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;32x32&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;FileType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Png&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;&lt;strong&gt;FileURL&lt;/strong&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;/RDWeb/Pages/rdp/mspaint032x32.png&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;        &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Icons&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;        &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;FileExtensions&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;        &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HostingTerminalServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;          &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HostingTerminalServer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;            &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ResourceFile&lt;/span&gt; &lt;span class="attr"&gt;&lt;strong&gt;FileExtension&lt;/strong&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;.rdp&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;&lt;strong&gt;URL&lt;/strong&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;/RDWeb/Pages/rdp/Contoso-mspaint.rdp&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;            &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TerminalServerRef&lt;/span&gt; &lt;span class="attr"&gt;Ref&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Contoso&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;          &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HostingTerminalServer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;        &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HostingTerminalServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;      &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Resource&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;    &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;    &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TerminalServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;      &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TerminalServer&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Contoso&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Contoso&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;LastUpdated&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;2009-07-09T17:57:12.588625Z&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;    &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TerminalServers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;  &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Publisher&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ResourceCollection&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&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;The bolded attributes in the connection provide information about the remote resources. The schema file for the connection is located at %windir%\schemas\tsworkspace\tswf.xsd in Windows Server 2008 R2 or on a Window 7 client machine.&lt;/p&gt;

&lt;h4&gt;&lt;b&gt;Website extensibility: Using the connection to create a new web page&lt;/b&gt;&lt;/h4&gt;

&lt;p&gt;Following is a code sample in C# (ASP.NET) on how to use the connection to create a new web page as demonstrated at &lt;a href="http://channel9.msdn.com/pdc2008/ES22/"&gt;PDC 2008&lt;/a&gt;. This code sample uses a connection at the “/rdweb/pages/webfeed.aspx” location. Below are the steps that need to complete in creating the new web page.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;In Page PreInit, check for user authentication. If the user is not authenticated, redirect the request to the login page. &lt;/li&gt;

  &lt;li&gt;In Page Load, get the connection by calling Server.Execute on the webfeed.aspx page. &lt;/li&gt;

  &lt;li&gt;Parse the connection XML to get information on the remote resources. Use this information to present remote resources in your customized way. &lt;/li&gt;

  &lt;li&gt;Replace the default.aspx at %windir%\Web\RDWeb\Pages\en-US folder with this newly created page. This webpage will run inside the RD Web Access web application using an out-of-the box authentication mechanism. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notes on this sample code:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;It does not show how to enable RemoteApp and Desktop Connection’s Single Sign On feature. &lt;/li&gt;

  &lt;li&gt;It does not show how to differentiate the page content between the admin and a regular user. &lt;/li&gt;

  &lt;li&gt;It assumes that application locale is en-US. &lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; Debug=&amp;quot;false&amp;quot; Trace=&amp;quot;false&amp;quot; %&amp;gt;&lt;/span&gt;

&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt; @Import Namespace=&lt;span class="str"&gt;&amp;quot;System.IO&amp;quot;&lt;/span&gt; &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt; @Import Namespace=&lt;span class="str"&gt;&amp;quot;System.Collections.Generic&amp;quot;&lt;/span&gt; &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt; @Import Namespace=&lt;span class="str"&gt;&amp;quot;System.Web.Configuration&amp;quot;&lt;/span&gt; &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt; @Import Namespace=&lt;span class="str"&gt;&amp;quot;System.Xml&amp;quot;&lt;/span&gt; &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_PreInit(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
    {
        AuthenticationMode eAuthenticationMode = AuthenticationMode.None;
        AuthenticationSection objAuthenticationSection = ConfigurationManager.GetSection(&lt;span class="str"&gt;&amp;quot;system.web/authentication&amp;quot;&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; AuthenticationSection;

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (objAuthenticationSection != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
        {
            eAuthenticationMode = objAuthenticationSection.Mode;
        }

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (eAuthenticationMode == AuthenticationMode.Forms)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (HttpContext.Current.User.Identity.IsAuthenticated == &lt;span class="kwrd"&gt;false&lt;/span&gt;)
            {
                &lt;span class="rem"&gt;// User is not logged in, so redirect the request to login page.&lt;/span&gt;
                Response.Redirect(&lt;span class="str"&gt;&amp;quot;login.aspx?ReturnUrl=&amp;quot;&lt;/span&gt; + Request.FilePath);
            }
        }
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
    {
        &lt;span class="kwrd"&gt;try&lt;/span&gt;
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; connectionXml;

            &lt;span class="rem"&gt;// Execute the handler for webfeed.aspx in the context of current request &lt;/span&gt;
            &lt;span class="rem"&gt;// and capture output connectionXml.&lt;/span&gt;
            &lt;span class="kwrd"&gt;using&lt;/span&gt; (StringWriter stringWriter = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringWriter())
            {
                &lt;span class="rem"&gt;// This new web page is running under the same web application, and &lt;/span&gt;
                &lt;span class="rem"&gt;// with using existing authentication.&lt;/span&gt;
                &lt;span class="rem"&gt;// So We need run the Server.Execute to get the connection Xml.&lt;/span&gt;
                HttpContext.Current.Server.Execute(&lt;span class="str"&gt;&amp;quot;..//webfeed.aspx&amp;quot;&lt;/span&gt;, stringWriter);
                connectionXml = stringWriter.ToString();
            }

            &lt;span class="rem"&gt;// Set current reponse content type&lt;/span&gt;
            Response.ContentType = &lt;span class="str"&gt;&amp;quot;text/HTML&amp;quot;&lt;/span&gt;;

            &lt;span class="rem"&gt;//Strip out the BOM (U+FEFF)&lt;/span&gt;
            connectionXml = connectionXml.Trim();

            &lt;span class="rem"&gt;// Sample code to parse the connection xml. Instead of parsing the connection xml, we can also use XSL transformations directly to display the remote resources&lt;/span&gt;
            List&amp;lt;ConnectionResourceInfo&amp;gt; listConnectionResourceInfos = GetConnectionResourceInfo(connectionXml);

            dataListResources.DataSource = listConnectionResourceInfos;
            dataListResources.DataBind();

            labelStatus.Text = &lt;span class="str"&gt;&amp;quot;Connection Resources : &amp;quot;&lt;/span&gt; + listConnectionResourceInfos.Count;
        }
        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
        {
            labelStatus.Text = &lt;span class="str"&gt;&amp;quot;Error occurred ~ &amp;quot;&lt;/span&gt; + ex.Message;
        }
    }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; String GetAbsolutePath(&lt;span class="kwrd"&gt;string&lt;/span&gt; relativePath)
    {
        &lt;span class="kwrd"&gt;return&lt;/span&gt; String.Format(&lt;span class="str"&gt;&amp;quot;{0}://{1}{2}&amp;quot;&lt;/span&gt;, Request.Url.Scheme, Request.Url.Host, relativePath);
    }

    &lt;span class="rem"&gt;// Parse the XML file for demo purpose. In this function we are not using all &lt;/span&gt;
    &lt;span class="rem"&gt;// the xml information available, just the title and resource's image file path.&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; List&amp;lt;ConnectionResourceInfo&amp;gt; GetConnectionResourceInfo(&lt;span class="kwrd"&gt;string&lt;/span&gt; connectionXml)
    {
        List&amp;lt;ConnectionResourceInfo&amp;gt; listConnectionResourceInfos = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;ConnectionResourceInfo&amp;gt;();
        XmlDocument xmlDocument = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();

        &lt;span class="rem"&gt;// Load the connection xml string&lt;/span&gt;
        xmlDocument.LoadXml(connectionXml);

        XmlNamespaceManager xmlNamespaceManager = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlNamespaceManager(xmlDocument.NameTable);
        xmlNamespaceManager.AddNamespace(&lt;span class="str"&gt;&amp;quot;tswf&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;http://schemas.microsoft.com/ts/2007/05/tswf&amp;quot;&lt;/span&gt;);

        &lt;span class="rem"&gt;// Get the list of Resource elements&lt;/span&gt;
        XmlNodeList xmlNodeList = xmlDocument.SelectNodes(&lt;span class="str"&gt;&amp;quot;/tswf:ResourceCollection/tswf:Publisher/tswf:Resources/tswf:Resource&amp;quot;&lt;/span&gt;, xmlNamespaceManager);

        &lt;span class="rem"&gt;// For each resource get the title and image file relative path&lt;/span&gt;
        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; xmlNodeList.Count; i++)
        {
            ConnectionResourceInfo connectionResourceInfo = &lt;span class="kwrd"&gt;new&lt;/span&gt; ConnectionResourceInfo();

            connectionResourceInfo.Title = xmlNodeList[i].Attributes[&lt;span class="str"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;].Value;

            XmlNode xmlNodeIcon32 = xmlNodeList[i].SelectSingleNode(&lt;span class="str"&gt;&amp;quot;tswf:Icons/tswf:Icon32&amp;quot;&lt;/span&gt;, xmlNamespaceManager);

            &lt;span class="rem"&gt;// Convert the image's relative path to ablosute path&lt;/span&gt;
            connectionResourceInfo.ImageFilePath = GetAbsolutePath(xmlNodeIcon32.Attributes[&lt;span class="str"&gt;&amp;quot;FileURL&amp;quot;&lt;/span&gt;].Value);

            listConnectionResourceInfos.Add(connectionResourceInfo);

            &lt;span class="rem"&gt;// Here you would want to retrieve any other XML information you&lt;/span&gt;
            &lt;span class="rem"&gt;// want for each resource from the connection&lt;/span&gt;
        }

        &lt;span class="kwrd"&gt;return&lt;/span&gt; listConnectionResourceInfos;
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SignOut_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
    {
        &lt;span class="rem"&gt;//Redirect the request to logoff page&lt;/span&gt;
        Response.Redirect(&lt;span class="str"&gt;&amp;quot;LogOff.aspx&amp;quot;&lt;/span&gt;);
    }

    &lt;span class="rem"&gt;// Entity class to hold connection resource info, for now it contains only the resource title, and its image path&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ConnectionResourceInfo
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; title;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; imageFilePath;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Title
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; title; }
            set { title = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ImageFilePath
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; imageFilePath; }
            set { imageFilePath = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }
    }&lt;/pre&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;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Head1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;meta&lt;/span&gt; &lt;span class="attr"&gt;http-equiv&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;CONTENT-TYPE&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;content&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;TEXT/HTML; CHARSET=UTF-8&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;meta&lt;/span&gt; &lt;span class="attr"&gt;http-equiv&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;CACHE-CONTROL&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;content&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;NO-CACHE&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;meta&lt;/span&gt; &lt;span class="attr"&gt;http-equiv&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PRAGMA&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;content&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;NO-CACHE&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;New RD Web Access&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;btnSignOut&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SignOut&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SignOut_Click&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;labelStatus&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:DataList&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;dataListResources&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;RepeatDirection&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Horizontal&amp;quot;&lt;/span&gt;
            &lt;span class="attr"&gt;RepeatColumns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;4&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;BorderColor&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;black&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;CellPadding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;BorderWidth&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ItemStyle-BorderWidth&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Image&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ResImage&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ImageUrl&lt;/span&gt;&lt;span class="kwrd"&gt;='&amp;lt;%# DataBinder.Eval(Container.DataItem, &amp;quot;ImageFilePath&amp;quot;) %&amp;gt;'&lt;/span&gt;
                    &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;# DataBinder.Eval(Container.DataItem, &lt;span class="str"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;) &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:DataList&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&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;The sample page will appear as below.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/RemoteAppandDesktopConnectionFeedExtensi_DA1B/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/rds/WindowsLiveWriter/RemoteAppandDesktopConnectionFeedExtensi_DA1B/image_thumb.png" width="489" height="300" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;h4&gt;&lt;b&gt;Customized client applications: Using the connection to create a new client application &lt;/b&gt;&lt;/h4&gt;

&lt;p&gt;Following is a code sample in C# on how to use the connection to create a client application. This code sample uses the connection at the “/rdweb/feed/webfeed.aspx” location.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Send request to the connection URL page with auto-redirect enabled along with user credentials. The connection URL uses cookie-based authentication, so this initial request sent to the connection URL will be redirected to the login page. The login page, which uses Windows-based authentication, responds with the authentication cookie. The supplied user credentials in the request will be used in &lt;a href="http://blogs.msdn.com/rds/archive/2009/06/12/introducing-remoteapp-user-assignment.aspx"&gt;RemoteApp filtering&lt;/a&gt;. &lt;/li&gt;

  &lt;li&gt;Cache the authentication cookie for all subsequent requests. The cookie will not expire, so you can also reuse the same cookie for easy automatic connection updating without prompting the user for credentials. &lt;/li&gt;

  &lt;li&gt;Send the request to the connection URL with the authentication cookie, and get the connection XML in response. &lt;/li&gt;

  &lt;li&gt;Parse the connection XML, and download subsequent resource files and their associated icon and image files. &lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO; 
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Net;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Security;

&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetConnectionContents()
{
    System.Diagnostics.ConsoleTraceListener trace = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Diagnostics.ConsoleTraceListener();

    &lt;span class="rem"&gt;//RemoteApp and Desktop Connections uses HTTPS to connect to the server. &lt;/span&gt;
    &lt;span class="rem"&gt;//In order to connect properly, the client operating system must trust the SSL certificate of the RD Web Access server. &lt;/span&gt;
    &lt;span class="rem"&gt;//Also, the server name in the URL must match the one in the server’s SSL certificate&lt;/span&gt;

    &lt;span class="rem"&gt;// User credentials to access the connection. Fill in &amp;lt;username&amp;gt;, &amp;lt;password&amp;gt;, &amp;lt;domainname&amp;gt; with your user credentials.&lt;/span&gt;
    NetworkCredential networkCredential = &lt;span class="kwrd"&gt;new&lt;/span&gt; NetworkCredential(&lt;span class="str"&gt;&amp;quot;&amp;lt;username&amp;gt;&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;&amp;lt;domainname&amp;gt;&amp;quot;&lt;/span&gt;);            

    &lt;span class="rem"&gt;//This URL will generally be of this form.  Fill in &amp;lt;servername&amp;gt; with your server’s name&lt;/span&gt;
    &lt;span class="kwrd"&gt;string&lt;/span&gt; connectionUrl = &lt;span class="str"&gt;&amp;quot;https://&amp;lt;servername&amp;gt;/rdweb/feed/webfeed.aspx&amp;quot;&lt;/span&gt;;            

    &lt;span class="kwrd"&gt;string&lt;/span&gt; formsAuthenticationCookie = GetFormsAuthenticationCookie(connectionUrl, networkCredential, trace);

    &lt;span class="kwrd"&gt;string&lt;/span&gt; connectionXml = GetConnectionXml(connectionUrl, formsAuthenticationCookie, trace);

    &lt;span class="rem"&gt;//Fill in your code to parse the connection, and to download resource files and associated icon &amp;amp; image files. Use earlier cache cookie for authentication. &lt;/span&gt;
}

&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetFormsAuthenticationCookie(&lt;span class="kwrd"&gt;string&lt;/span&gt; connectionUrl, NetworkCredential networkCredential, System.Diagnostics.ConsoleTraceListener trace)
{
    &lt;span class="rem"&gt;//&lt;/span&gt;
    &lt;span class="rem"&gt;// Request connection page is protected by Forms Authentication Cookie. So making a request to that page will be redirected to login page&lt;/span&gt;
    &lt;span class="rem"&gt;// The login page is&lt;/span&gt;
    &lt;span class="rem"&gt;//&lt;/span&gt;
    trace.Write(&lt;span class="str"&gt;&amp;quot;Requesting : &amp;quot;&lt;/span&gt; + connectionUrl);
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(connectionUrl);
    CredentialCache credentialCache = &lt;span class="kwrd"&gt;new&lt;/span&gt; CredentialCache();
    credentialCache.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(connectionUrl), &lt;span class="str"&gt;&amp;quot;Negotiate&amp;quot;&lt;/span&gt;, networkCredential);
    httpWebRequest.Credentials = credentialCache;
    httpWebRequest.AllowAutoRedirect = &lt;span class="kwrd"&gt;true&lt;/span&gt;;

    HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (httpWebResponse.StatusCode == HttpStatusCode.OK)
    {
        trace.Write(&lt;span class="str"&gt;&amp;quot;Response: 200 &amp;quot;&lt;/span&gt;);
        trace.WriteLine(httpWebResponse.StatusCode);
    }
    &lt;span class="kwrd"&gt;else&lt;/span&gt;
    {
        trace.Fail(&lt;span class="str"&gt;&amp;quot;Response status is &amp;quot;&lt;/span&gt; + httpWebResponse.StatusCode + &lt;span class="str"&gt;&amp;quot;. Expected was OK&amp;quot;&lt;/span&gt;);
    }

    trace.WriteLine(&lt;span class="str"&gt;&amp;quot;Response will be the Forms Authentication Cookie&amp;quot;&lt;/span&gt;);
    trace.WriteLine(&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);

    &lt;span class="kwrd"&gt;string&lt;/span&gt; formsAuthenticationCookie;

    &lt;span class="kwrd"&gt;using&lt;/span&gt; (StreamReader streamReader = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamReader(httpWebResponse.GetResponseStream()))
    {
        formsAuthenticationCookie = streamReader.ReadToEnd();
        streamReader.Close();
    }

    trace.WriteLine(&lt;span class="str"&gt;&amp;quot;formsAuthenticationCookie &amp;quot;&lt;/span&gt; + formsAuthenticationCookie);

    &lt;span class="kwrd"&gt;return&lt;/span&gt; formsAuthenticationCookie;
}

&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetConnectionXml(&lt;span class="kwrd"&gt;string&lt;/span&gt; connectionUrl, &lt;span class="kwrd"&gt;string&lt;/span&gt; formsAuthenticationCookie, System.Diagnostics.ConsoleTraceListener trace)
{
    &lt;span class="rem"&gt;//&lt;/span&gt;
    &lt;span class="rem"&gt;// Request connection page&lt;/span&gt;
    &lt;span class="rem"&gt;//&lt;/span&gt;
    trace.Write(&lt;span class="str"&gt;&amp;quot;Requesting : &amp;quot;&lt;/span&gt; + connectionUrl);
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(connectionUrl);

    httpWebRequest.CookieContainer = &lt;span class="kwrd"&gt;new&lt;/span&gt; CookieContainer();

    &lt;span class="rem"&gt;//&lt;/span&gt;
    &lt;span class="rem"&gt;// Set Froms Authentication Cookie&lt;/span&gt;
    &lt;span class="rem"&gt;//&lt;/span&gt;
    httpWebRequest.CookieContainer.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Cookie(FormsAuthentication.FormsCookieName, formsAuthenticationCookie, &lt;span class="str"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;, httpWebRequest.RequestUri.Host));

    &lt;span class="rem"&gt;// Get response&lt;/span&gt;
    HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (httpWebResponse.StatusCode == HttpStatusCode.OK)
    {
        trace.Write(&lt;span class="str"&gt;&amp;quot;Response: 200 &amp;quot;&lt;/span&gt;);
        trace.WriteLine(httpWebResponse.StatusCode);
    }
    &lt;span class="kwrd"&gt;else&lt;/span&gt;
    {
        trace.Fail(&lt;span class="str"&gt;&amp;quot;Response status is &amp;quot;&lt;/span&gt; + httpWebResponse.StatusCode + &lt;span class="str"&gt;&amp;quot;. Expected was OK&amp;quot;&lt;/span&gt;);
    }

    trace.WriteLine(&lt;span class="str"&gt;&amp;quot;Response will be the connectionXml&amp;quot;&lt;/span&gt;);
    trace.WriteLine(&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);

    &lt;span class="kwrd"&gt;string&lt;/span&gt; connectionXml;

    &lt;span class="kwrd"&gt;using&lt;/span&gt; (StreamReader streamReader = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamReader(httpWebResponse.GetResponseStream()))
    {
        connectionXml = streamReader.ReadToEnd();
    }

    trace.WriteLine(&lt;span class="str"&gt;&amp;quot;connectionXml &amp;quot;&lt;/span&gt; + connectionXml);

    &lt;span class="kwrd"&gt;return&lt;/span&gt; connectionXml;
}&lt;/pre&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;As shown above, RemoteApp and Desktop Connection provides an easy way to customize the standard look and feel of RD Web Access or to present remote resources in new ways.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9938462" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/WS08+R2/default.aspx">WS08 R2</category><category domain="http://blogs.msdn.com/rds/archive/tags/RemoteApp+and+Desktop+Connections/default.aspx">RemoteApp and Desktop Connections</category><category domain="http://blogs.msdn.com/rds/archive/tags/RD+Web+Access/default.aspx">RD Web Access</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Rajagopal+Ramadugu/default.aspx">Author: Rajagopal Ramadugu</category></item><item><title>RemoteApp for Hyper-V</title><link>http://blogs.msdn.com/rds/archive/2009/12/15/remoteapp-for-hyper-v.aspx</link><pubDate>Wed, 16 Dec 2009 00:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9937399</guid><dc:creator>termserv</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/rds/comments/9937399.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9937399</wfw:commentRss><description>&lt;P&gt;Today, we want to talk about a little known feature in Windows Server 2008 R2 that could be described as RemoteApp for Hyper-V. Like Microsoft RemoteApp, it allows users to access a specific hosted application remotely, as opposed to the entire desktop. With RemoteApp, the application runs in the context of a server session; however, RemoteApp for Hyper-V enables remote access to an application running in a Hyper-V VM.&lt;/P&gt;
&lt;P&gt;With the advent of Windows 7, some enterprise customers were facing application compatibility issues with line-of-business applications that were specifically written for Windows XP and would not work on Windows 7. &lt;/P&gt;
&lt;P&gt;One obvious way to resolve this issue is to run those incompatible applications in Windows XP Mode, a new feature that is available in certain Windows 7 SKUs and which simplifies migration to the new OS by allowing legacy XP applications to seamlessly run in their own context within a Windows 7 environment. Windows XP mode has specific hardware, OS and memory &lt;A href="http://www.microsoft.com/windows/virtual-PC/support/requirements.aspx" mce_href="http://www.microsoft.com/windows/virtual-PC/support/requirements.aspx"&gt;requirements&lt;/A&gt;. While this solution works well on newer machines with hardware virtualization support, the hardware &lt;A href="http://www.microsoft.com/windows/virtual-PC/support/requirements.aspx" mce_href="http://www.microsoft.com/windows/virtual-PC/support/requirements.aspx"&gt;requirements&lt;/A&gt; for XP mode might be prohibitive for some older PCs.&lt;/P&gt;
&lt;P&gt;RemoteApp for Hyper-V allows users to remotely access Windows XP applications from their Windows 7 desktop with no additional hardware requirements. &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;B&gt;SKU support&lt;/B&gt;: RemoteApp for Hyper-V is supported on the following SKUs running as the guest OS: 
&lt;UL&gt;
&lt;LI&gt;Windows XP SP3: Professional &lt;/LI&gt;
&lt;LI&gt;Windows Vista SP1 and above: Enterprise and Ultimate &lt;/LI&gt;
&lt;LI&gt;Windows 7: Enterprise and Ultimate &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Here are some examples of applications that will benefit from this feature:&lt;/P&gt;
&lt;UL&gt;
&lt;UL&gt;
&lt;LI&gt;Applications that are compatible only with Windows XP SP3 &lt;/LI&gt;
&lt;LI&gt;Applications that can run on Windows Server 2003, but not Windows Server 2008 or Windows Server 2008 R2 &lt;/LI&gt;
&lt;LI&gt;Applications that are supposed to be run only on a data center server for data security or compliance reasons &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;To use this feature, a user connects remotely from a &lt;I&gt;client computer&lt;/I&gt; to the VM-hosted application. To host the applications, an administrator sets up a virtual machine with a &lt;I&gt;guest OS&lt;/I&gt; on a &lt;I&gt;Hyper-V server&lt;/I&gt; hosting the virtual machine. &lt;/P&gt;
&lt;P&gt;The &lt;I&gt;client computer&lt;/I&gt; must run Windows 7, but the &lt;I&gt;guest OS&lt;/I&gt; on the virtual machine can run Windows XP SP3, Windows Vista (with SP1 and above) or Windows 7. For a guest OS running Windows XP SP3, an &lt;A href="http://support.microsoft.com/kb/961742" mce_href="http://support.microsoft.com/kb/961742"&gt;update&lt;/A&gt; is required; for a guest OS running Windows Vista SP1 or above, another &lt;A href="http://support.microsoft.com/kb/961741" mce_href="http://support.microsoft.com/kb/961741"&gt;update&lt;/A&gt; is needed.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;So, how can an administrator deploy this? &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;There are two ways in which RemoteApp for Hyper-V can be deployed. The first way is the stand-alone scenario, in which all the administrator needs to do is set up a Hyper-V server with virtual machines running a client OS (for example, Windows XP SP3). The administrator would then set up the application and create RDP files that launch this application. A user can connect to the application via a simple Remote Desktop connection using the RDP file. &lt;/P&gt;
&lt;P&gt;Here’s how this setup would look: &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/RemoteAppforHyperV_E9B1/RemoteApp%20on%20HyperV%20-setup1_2.png" mce_href="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/RemoteAppforHyperV_E9B1/RemoteApp%20on%20HyperV%20-setup1_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; WIDTH: 640px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; HEIGHT: 480px; BORDER-LEFT-WIDTH: 0px" title="RemoteApp on HyperV -setup1" border=0 alt="RemoteApp on HyperV -setup1" src="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/RemoteAppforHyperV_E9B1/RemoteApp%20on%20HyperV%20-setup1_thumb.png" width=640 height=480 mce_src="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/RemoteAppforHyperV_E9B1/RemoteApp%20on%20HyperV%20-setup1_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;While this is a simple setup that an administrator can use to pilot the RemoteApp for Hyper-V, it offers no extra efficiency or ability to load balance. One serious drawback of this method is that since only one user can connect to an application at a time, one user connecting to multiple virtual machines effectively blocks out other users.&lt;/P&gt;
&lt;P&gt;To get around this problem, the recommended way to install RemoteApp for Hyper-V is over a &lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=e33b0953-e89a-4b97-a6fe-60da44add5c7" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=e33b0953-e89a-4b97-a6fe-60da44add5c7"&gt;complete VDI farm&lt;/A&gt; or &lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0d278f5c-37fa-43fb-8032-614c7bf1d617" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0d278f5c-37fa-43fb-8032-614c7bf1d617"&gt;personal virtual desktop&lt;/A&gt; setup, including setting up the RD Connection Broker role. An administrator would still need to perform the same manual steps of setting up the application and creating an RDP file, but there are significant advantages to going through the RD Connection Broker. An obvious one is load balancing. In addition, there is increased efficiency, simply because when a user is connected to a virtual machine, all applications launched by that user are redirected to the same virtual machine. Only one user can connect to applications running on a particular virtual machine at a time. &lt;/P&gt;
&lt;P&gt;One single user cannot block out an entire farm by holding onto different virtual machines on it at the same time. Until a user’s virtual machine is terminated, redirection is always to the same VM. RD Connection Broker ensures that a user connected to a VM stays connected until logged out.&lt;/P&gt;
&lt;P&gt;Here’s how the second setup scenario described above would look (running from a Windows XP SP3 farm, for instance): &lt;BR&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/RemoteAppforHyperV_E9B1/RemoteApp%20on%20HyperV-setup2_2.png" mce_href="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/RemoteAppforHyperV_E9B1/RemoteApp%20on%20HyperV-setup2_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; WIDTH: 640px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; HEIGHT: 480px; BORDER-LEFT-WIDTH: 0px" title="RemoteApp on HyperV-setup2" border=0 alt="RemoteApp on HyperV-setup2" src="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/RemoteAppforHyperV_E9B1/RemoteApp%20on%20HyperV-setup2_thumb.png" width=640 height=480 mce_src="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/RemoteAppforHyperV_E9B1/RemoteApp%20on%20HyperV-setup2_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Hosting applications in a farm of virtual machines running Windows XP SP3 is a simple way to give multiple people on the domain access to the applications. There is no security filtering for applications on a virtual machine farm. All domain users who have access to the farm will have access to the applications.&lt;/P&gt;
&lt;P&gt;If an administrator wants to give only a specific user access to an application, the application should be hosted on a personal desktop. In all cases--farms or personal desktops--an administrator only needs to create an RDP file and hand it over to a user, either via a network share or email. &lt;/P&gt;
&lt;P&gt;RemoteApp for Hyper-V is a basic but powerful platform capability which was designed with advanced administrators in mind who are willing to do the manual configuration steps to enable an environment that includes remote access to VM-hosted applications. It serves also as an extensibility point for our RDS partner ecosystem who may want to take advantage of this infrastructure capability and provide additional value-add to RDS customers by streamlining the configuration and expanding the usability and manageability of it. For example, with additional code, it is possible to integrate the RDP files with Remote Desktop Web Access. &lt;/P&gt;
&lt;H5&gt;&lt;/H5&gt;
&lt;H5&gt;Related links:&lt;/H5&gt;
&lt;P&gt;Update package for Windows XP SP3:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2f376f53-83cf-4e5b-9515-2cb70662a81b&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2f376f53-83cf-4e5b-9515-2cb70662a81b&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=2f376f53-83cf-4e5b-9515-2cb70662a81b&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Update package for Windows Vista SP1 or above:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=097B7478-3150-4D0D-A85A-6451F32C459C&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=097B7478-3150-4D0D-A85A-6451F32C459C&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=097B7478-3150-4D0D-A85A-6451F32C459C&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9937399" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/rds/archive/tags/WS08+R2/default.aspx">WS08 R2</category><category domain="http://blogs.msdn.com/rds/archive/tags/VDI/default.aspx">VDI</category><category domain="http://blogs.msdn.com/rds/archive/tags/XPMode/default.aspx">XPMode</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Janani+Venkateswaran/default.aspx">Author: Janani Venkateswaran</category></item><item><title>Deploying Windows Vista or Windows XP as the guest operating system in a Virtual Machine</title><link>http://blogs.msdn.com/rds/archive/2009/12/01/deploying-windows-vista-or-windows-xp-as-the-guest-operating-system-in-a-virtual-machine.aspx</link><pubDate>Tue, 01 Dec 2009 22:32:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9931124</guid><dc:creator>termserv</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/rds/comments/9931124.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9931124</wfw:commentRss><description>&lt;h4&gt;Overview&lt;/h4&gt;  &lt;p&gt;The purpose of this post is to help an Administrator configure a Windows Vista or Windows XP operating system in a virtual machine for a Remote Desktop Services Virtual Desktop Infrastructure (VDI) deployment. &lt;/p&gt;  &lt;p&gt;This post is an addendum to the &lt;b&gt;Step 2: Installing and Configuring the Virtual Machine&lt;/b&gt; section for the following Step-by-Step guides published in Microsoft ®TechNet:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Deploying Virtual Desktop Pools by Using Remote Desktop Web Access Step-by-Step &lt;a href="http://technet.microsoft.com/en-us/library/dd883278(WS.10).aspx"&gt;Guide&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;Deploying Virtual Desktop Pools by Using RemoteApp and Desktop Connection Step-by-Step &lt;a href="http://technet.microsoft.com/en-us/library/ee221061(WS.10).aspx"&gt;Guide&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;Deploying Personal Virtual Desktops by Using Remote Desktop Web Access Step-by-Step &lt;a href="http://technet.microsoft.com/en-us/library/dd883257(WS.10).aspx"&gt;Guide&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;Deploying Personal Virtual Desktops by Using RemoteApp and Desktop Connection Step-by-Step &lt;a href="http://technet.microsoft.com/en-us/library/dd772738(WS.10).aspx"&gt;Guide&lt;/a&gt;.&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Additional Steps required to support Windows Vista and Windows XP&lt;/h4&gt;  &lt;p&gt;The following steps need to be completed before the &lt;b&gt;Configure the virtual machine for Remote Desktop Services&lt;/b&gt; section in the guides mentioned above. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;b&gt;Choose supported operation system&lt;/b&gt;: Install the supported version of the Windows Vista or Windows XP as the guest operating system. The following link contains the reference to the list of various supported versions of &lt;a href="http://technet.microsoft.com/en-us/library/cc794868(WS.10).aspx"&gt;Windows Vista or Windows XP&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Install Integration Services component&lt;/b&gt;: Follow the instructions &lt;a href="http://technet.microsoft.com/en-us/library/ee256075(WS.10).aspx"&gt;here&lt;/a&gt; at Step 4: To install the integration services on the virtual machine.&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Only for Windows XP: Install PowerShell package: &lt;/b&gt;Follow the instructions &lt;a href="http://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx"&gt;here&lt;/a&gt; to install this package.&lt;b&gt; &lt;/b&gt;This step is not needed if you are using VBS script for configuring the guest operating systems.      &lt;br /&gt;      &lt;br /&gt;The following steps need to be completed before moving on the &lt;b&gt;Step 3&lt;/b&gt; in the guides mentioned above.&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Only for Windows XP: &lt;/b&gt;Restart the Windows XP machine.&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Additional Resources&lt;/h4&gt;  &lt;ol&gt;   &lt;li&gt;Configure Guest OS for Microsoft VDI using Powershell: &lt;b&gt;&lt;/b&gt;http://gallery.technet.microsoft.com/ScriptCenter/en-us/bd2e02d0-efe7-4f89-84e5-7ad70f9a7bf0&lt;/li&gt;    &lt;li&gt;Configure Guest OS for Microsoft VDI using VB Script&lt;b&gt;: &lt;/b&gt;&lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/68462b23-0890-4dbd-95b6-8de5763e4f68"&gt;http://gallery.technet.microsoft.com/ScriptCenter/en-us/68462b23-0890-4dbd-95b6-8de5763e4f68&lt;/a&gt;)      &lt;br /&gt;Note: If you choose to use the VB Script to automate configuring the settings, then you can skip Step# 3 in the section above.&lt;/li&gt; &lt;/ol&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9931124" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Mahadev+Alladi/default.aspx">Author: Mahadev Alladi</category><category domain="http://blogs.msdn.com/rds/archive/tags/WS08+R2/default.aspx">WS08 R2</category><category domain="http://blogs.msdn.com/rds/archive/tags/VDI/default.aspx">VDI</category></item><item><title>Windows Server 2008 R2 Haiku Contest</title><link>http://blogs.msdn.com/rds/archive/2009/11/19/windows-server-2008-r2-haiku-contest.aspx</link><pubDate>Thu, 19 Nov 2009 21:59:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9925786</guid><dc:creator>termserv</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/rds/comments/9925786.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9925786</wfw:commentRss><description>&lt;p&gt;The Windows Server team is running a Haiku contest for Windows Server 2008 R2.&amp;#160; Come up with the best Haiku, and you could win a Home Entertainment System.&amp;#160; See &lt;a href="http://www.r2haiku.com/"&gt;http://www.r2haiku.com/&lt;/a&gt; to enter.&lt;/p&gt;  &lt;p&gt;Maybe Remote Desktop Services will provide your inspiration!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9925786" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Rob+Leitman/default.aspx">Author: Rob Leitman</category><category domain="http://blogs.msdn.com/rds/archive/tags/WS08+R2/default.aspx">WS08 R2</category></item><item><title>Personal Virtual Desktops</title><link>http://blogs.msdn.com/rds/archive/2009/11/16/personal-virtual-desktops.aspx</link><pubDate>Tue, 17 Nov 2009 04:17:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9923362</guid><dc:creator>termserv</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/rds/comments/9923362.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9923362</wfw:commentRss><description>&lt;p&gt;With Windows Server 2008 R2 we support two VDI deployment scenarios: &lt;u&gt;virtual desktop pools&lt;/u&gt; and &lt;u&gt;personal virtual desktops&lt;/u&gt;. The two scenarios present two different models of assigning virtual machines to end users: shared and dedicated. This blog post describes &lt;u&gt;personal virtual desktops&lt;/u&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What is a personal virtual desktop?&lt;/b&gt; - A personal virtual desktop is a virtual machine hosted on a Remote Desktop Virtualization Host (RD Virtualization Host) server and assigned to a user. Unlike a virtual desktop pool, where a virtual machine can be configured to rollback the changes when a user logs off, a personal virtual desktop retains all changes made by the user. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;How do you assign a personal virtual desktop?&lt;/b&gt; - The Remote Desktop Connection Broker Manager (RD Connection Broker Manager) can be used to assign an unassigned virtual machine to a user. The assignment is stored in Active Directory. The assignment stays intact even after the user logs off from his or her assigned personal virtual desktop. An administrator can reassign a personal virtual desktop or make changes to the assignment through RD Connection Broker Manager. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;How do you access and log off from a personal virtual desktop? &lt;/b&gt;- Users can access their assigned personal virtual desktops through RemoteApp and Desktop Connections or RD Web Access. When a user clicks on the personal virtual desktop icon, Microsoft VDI solution prepares a pre-assigned virtual machine for a remote RDP connection. Whether the user has logged off or has a disconnected session he is assigned the same virtual machine each time.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Can a personal virtual desktop be made part of a virtual desktop pool?&lt;/b&gt; – No. It is a misconfiguration to add a virtual machine designated as a personal virtual desktop to a virtual desktop pool if the goal is to allow only the assigned user to access that virtual machine. When the designated user makes a connection to his personal virtual desktop which is now part of a virtual desktop pool, the connection will fail and a type mismatch event will be logged.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What is the cost of ownership of personal virtual desktops compared to virtual desktop pools? &lt;/b&gt;- Since there is a one-to-one mapping between a virtual machine and a user in the personal virtual desktop scenario, the initial cost and overall cost of ownership of a personal virtual desktop is higher than in the virtual desktop pool scenario in which virtual machines are shared between users. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;How many personal virtual desktops&lt;/b&gt; &lt;b&gt;can be assigned&lt;/b&gt; &lt;b&gt;per user?&lt;/b&gt; – One. ISVs can extend the inbox solution and provide users access to more than one personal virtual desktop. Refer to: &lt;a href="http://msdn.microsoft.com/en-us/library/dd401684(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/dd401684(VS.85).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Can the same Hyper-V server be used to deploy&lt;/b&gt; &lt;b&gt;personal virtual desktops and virtual machines from virtual desktop pools? &lt;/b&gt;– Yes. It is not required to have personal virtual desktops isolated from virtual desktop pools. &lt;/p&gt;  &lt;p&gt;For details on how to set up personal virtual desktops, refer to:   &lt;table border="1" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="bottom"&gt;           &lt;p&gt;&lt;b&gt;Technical Library&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="bottom"&gt;           &lt;p&gt;&lt;b&gt;Microsoft Download Center&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top"&gt;           &lt;p&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=147909"&gt;Deploying Personal Virtual Desktops by Using Remote Desktop Web Access Step-by-Step Guide&lt;/a&gt; (&lt;a href="http://go.microsoft.com/fwlink/?LinkId=147909"&gt;http://go.microsoft.com/fwlink/?LinkId=147909&lt;/a&gt;)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top"&gt;           &lt;p&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=147908"&gt;Deploying Personal Virtual Desktops by Using Remote Desktop Web Access Step-by-Step Guide&lt;/a&gt; (&lt;a href="http://go.microsoft.com/fwlink/?LinkId=147908"&gt;http://go.microsoft.com/fwlink/?LinkId=147908&lt;/a&gt;)&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top"&gt;           &lt;p&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=154801"&gt;Deploying Personal Virtual Desktops by Using RemoteApp and Desktop Connection Step-by-Step Guide&lt;/a&gt; (&lt;a href="http://go.microsoft.com/fwlink/?LinkId=154801"&gt;http://go.microsoft.com/fwlink/?LinkId=154801&lt;/a&gt;) &lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top"&gt;           &lt;p&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=154800"&gt;Deploying Personal Virtual Desktops by Using RemoteApp and Desktop Connection Step-by-Step Guide&lt;/a&gt; (&lt;a href="http://go.microsoft.com/fwlink/?LinkId=154800"&gt;http://go.microsoft.com/fwlink/?LinkId=154800&lt;/a&gt;) &lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9923362" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Virtualization/default.aspx">Virtualization</category><category domain="http://blogs.msdn.com/rds/archive/tags/WS08+R2/default.aspx">WS08 R2</category><category domain="http://blogs.msdn.com/rds/archive/tags/VDI/default.aspx">VDI</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Yuvraj+Budhraja/default.aspx">Author: Yuvraj Budhraja</category></item><item><title>RemoteApp and Desktop Connection Management Extensibility for provisioning apps via RD Web Access</title><link>http://blogs.msdn.com/rds/archive/2009/11/11/remoteapp-and-desktop-connection-management-extensibility-for-provisioning-apps-via-rd-web-access.aspx</link><pubDate>Thu, 12 Nov 2009 01:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9921120</guid><dc:creator>termserv</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/rds/comments/9921120.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9921120</wfw:commentRss><description>&lt;P&gt;Earlier, we described &lt;A href="http://blogs.msdn.com/rds/archive/2009/06/05/publishing-in-windows-server-2008-r2.aspx" mce_href="http://blogs.msdn.com/rds/archive/2009/06/05/publishing-in-windows-server-2008-r2.aspx"&gt;publishing in Windows Server 2008 R2&lt;/A&gt; and how RDP resources can be published by using the &lt;B&gt;RemoteApp and Desktop Connection Management&lt;/B&gt; service to users in RD Web Access. This blog post describes the third-party extensibility support available in the RemoteApp and Desktop Connection Management service, and how third parties (Enterprises or ISVs) can leverage it to publish any resources (RDP or non-RDP) in Windows Server 2008 R2.&lt;/P&gt;
&lt;P&gt;The RemoteApp and Desktop Connection Management service, which is part of the RD Connection Broker role service, is a new publishing feature in Windows Server 2008 R2. By default, the following three plug-ins are provided in the service:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;LegacyTS plug-in: Aggregates RemoteApp programs from Remote Desktop Session Host servers. &lt;/LI&gt;
&lt;LI&gt;VMFarm plug-in: Aggregates virtual desktop pools. &lt;/LI&gt;
&lt;LI&gt;MyDesktop plug-in: Provides the user with the assigned personal domain desktop.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;All three plug-ins provide only RDP files, in the following scenarios: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;RDP files for RemoteApp programs &lt;/LI&gt;
&lt;LI&gt;RDP files for virtual desktops in virtual desktop pools &lt;/LI&gt;
&lt;LI&gt;RDP files for per-user assigned virtual desktops &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In order to provide RDP or non-RDP files in any scenario other than the ones described above, you can write a plug-in to provide the list of resources, register it with the RemoteApp and Desktop Connection Management service, and display the resources in RD Web Access. For example, if you want to serve several different files (for example, some hand-crafted RDP files and some .osd (app-v) files that are on a physical drive on the machine running the RemoteApp and Desktop Connection Management service), you can write a simple plug-in that will aggregate the files from the location and pass them on to the service, which will then pass them on to RD Web Access. As a result, users will be able to access these files via the web page.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Writing a third-party plug-in&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Create a DLL that implements the ItsPubPlugin COM interface as described here: &lt;A href="http://msdn.microsoft.com/en-us/library/dd401684(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd401684(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/dd401684(VS.85).aspx&lt;/A&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;PRE class=csharpcode&gt;HRESULT  mySamplePlugin::GetResourceList(LPCWSTR userID, __out LONG *pceAppListSize, __deref_out_ecount(*pceAppListSize)pluginResource ** resourceList)

    typedef &lt;SPAN class=kwrd&gt;struct&lt;/SPAN&gt; {
        WCHAR alias[256];
        WCHAR name[256];
        [&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;, unique] WCHAR *resourceFileContents;
        WCHAR fileExtension[24];
        WCHAR resourcePluginType[256];
        boolean isDiscoverable;
        &lt;SPAN class=kwrd&gt;long&lt;/SPAN&gt; resourceType;
        unsigned &lt;SPAN class=kwrd&gt;long&lt;/SPAN&gt; pceIconSize;
        [size_is(pceIconSize)] &lt;SPAN class=kwrd&gt;byte&lt;/SPAN&gt; *iconContents;
        unsigned &lt;SPAN class=kwrd&gt;long&lt;/SPAN&gt; pcePluginBlobSize;
        [size_is(pcePluginBlobSize)] &lt;SPAN class=kwrd&gt;byte&lt;/SPAN&gt; *blobContents;
    } pluginResource;&lt;/PRE&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;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This interface is the one that the RemoteApp and Desktop Connection Management service will call into, when a user request comes in, to get the list of resources. &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;PRE class=csharpcode&gt;STDMETHODIMP mySamplePlugin::GetResource(LPCWSTR alias, LONG flags, __out pluginResource * resource)&lt;/PRE&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;/LI&gt;&lt;/UL&gt;
&lt;P&gt;This interface is a placeholder and does not need to be implemented. You can simply return E_NOTIMPL.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;PRE class=csharpcode&gt;STDMETHODIMP mySamplePlugin::GetCacheLastUpdateTime(__out unsigned &lt;SPAN class=kwrd&gt;long&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;long&lt;/SPAN&gt; * lastUpdateTime)&lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&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;This interface is called by the RemoteApp and Desktop Connection Management service to get the last cache updated time. If you don’t plan to implement caching, returning the current system time in Windows File Time format for the lastUpdateTime will indicate to the service that it needs to call the GetResourceList function (discussed above) to get the latest list of resources, instead of using its cache. However, this is not the recommended way of implementing the plug-in because this will cause RD Web Access to not use its cache, which will cause more data to be transferred across the network and slow user response time. The recommended way to implement this routine is to return the latest time that a resource has changed.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;PRE class=csharpcode&gt;STDMETHODIMP mySamplePlugin::get_pluginName(__deref_out BSTR * pVal)&lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&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;This interface is used to get the plug-in name.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;PRE class=csharpcode&gt;STDMETHODIMP mySamplePlugin::get_pluginVersion(__deref_out BSTR * pVal)&lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&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;This interface is used to get the plug-in version.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;PRE class=csharpcode&gt;STDMETHODIMP mySamplePlugin::ResolveResource(     __RPC__out DWORD *resourceType,
    __RPC__out_ecount_full_string(256) wchar_t resourceLocation[ 256 ],
    __RPC__out_ecount_full_string(256) wchar_t endPointName[ 256 ],
    __RPC__in_string wchar_t *userID,    __RPC__in_string wchar_t *alias)&lt;/PRE&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;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&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;This interface is used by the Remote Desktop Connection Broker service to resolve which virtual desktop is assigned to the user. It is not essential to have this implemented, and you can simply return E_NOTIMPL, unless you plan to have a custom implementation for providing the Personal Domain Desktop functionality.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Registering the third-party plugin:&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;After you have written the plug-in, complete the following steps:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Register the plug-in. &lt;BR&gt;regsvr32 mySamplePlugin.dll &lt;/LI&gt;
&lt;LI&gt;Create the following registry entries: 
&lt;OL type=a&gt;
&lt;LI&gt;Create a sub-key under &lt;B&gt;HKLM\software\Microsoft\Windows NT\CurrentVersion\TerminalServer\Centralized Publishing\&lt;/B&gt; with the CLSID of the mySamplePlugin &lt;/LI&gt;
&lt;LI&gt;Create a DWORD under &lt;B&gt;HKLM\software\Microsoft\Windows NT\CurrentVersion\TerminalServer\Centralized Publishing\{mySamplePlugin-CLSID}&lt;/B&gt; called &lt;B&gt;IsEnabled &lt;/B&gt;and set it to &lt;B&gt;1. &lt;/B&gt;(Setting it to 0 is equivalent to disabling the plugin)&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;
&lt;LI&gt;The publishing service will pick up the registry changes automatically and restart the publishing service, or you can restart the publishing service manually by using the following command: &lt;BR&gt;net stop tscpubrpc &amp;amp; net start tscpubrpc&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;After completing these steps, you are finished creating the third-party plug-in. When a client connects, in addition to the enabled default plug-ins, the publishing service will also aggregate the applications provided by your own plug-in and display them in RD Web Access. Note that this will work only for the RD Web Access scenario. In order to make extensibility work in the RemoteApp and Desktop Connections scenario so that you can download the published applications onto your Start menu, you must complete some additional steps, which will be covered in the next post. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9921120" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Ramasamy+Pullappan/default.aspx">Author: Ramasamy Pullappan</category><category domain="http://blogs.msdn.com/rds/archive/tags/RemoteApp+and+Desktop+Connections/default.aspx">RemoteApp and Desktop Connections</category><category domain="http://blogs.msdn.com/rds/archive/tags/RD+Web+Access/default.aspx">RD Web Access</category><category domain="http://blogs.msdn.com/rds/archive/tags/RemoteApp+and+Desktop+Connection+Managerment+Service/default.aspx">RemoteApp and Desktop Connection Managerment Service</category></item><item><title>Per User CAL Reporting Script</title><link>http://blogs.msdn.com/rds/archive/2009/11/09/per-user-cal-reporting-script.aspx</link><pubDate>Mon, 09 Nov 2009 23:03:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9919854</guid><dc:creator>termserv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rds/comments/9919854.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9919854</wfw:commentRss><description>&lt;p&gt;We have introduced a script to help the administrators tracking the usage trend of Windows Server 2003 Terminal Server (TS) Per User (PU) client access licenses (CALs), total usage of Windows Server 2008 TS PU CALs (including expired), and the usage of Windows Server 2008 TS PU CALs for a list of specified domains. &lt;/p&gt;  &lt;p&gt;The major scenarios addressed by the script includes the following -&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;For a Windows Server 2003 TS, this script helps the administrators tracking the users logged in to a TS in PU licensing mode over a period of time.&lt;/li&gt;    &lt;li&gt;For a Windows Server 2008 TS or a Windows Server 2008 R2 Remote Desktop Session Host Server (RDSH), this script helps the administrator tracking both valid &amp;amp; expired PU CALs. &lt;/li&gt;    &lt;li&gt;For a license server running Windows Server 2008 or Windows Server 2008 R2, this script enables administrators to generate PU CAL usage details for a list of specified domains.&lt;/li&gt;    &lt;li&gt;For a license server running Windows Server 2008 or Windows Server 2008 R2, while generating the PU CAL usage report for a list of specified domains, even if one or more of the domains in the list is unreachable, this script will still report the usage for all the reachable domains.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;For more detailed information, download the Per User Report Generation script from &lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/9739eaee-fb8a-4cb8-8456-7f138d175934"&gt;here&lt;/a&gt;. The batch script to execute the Per User Report Generation script periodically for a Windows Server 2003 TS is available at &lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/0aa075fd-def7-48e3-9eb3-9aaf1dc3a249"&gt;here&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9919854" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Licensing/default.aspx">Licensing</category><category domain="http://blogs.msdn.com/rds/archive/tags/WS08+R2/default.aspx">WS08 R2</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Saikat+De/default.aspx">Author: Saikat De</category></item><item><title>Announcing the launch of Remote Desktop Services Script Center to ease management</title><link>http://blogs.msdn.com/rds/archive/2009/11/04/announcing-the-launch-of-remote-desktop-services-script-center-to-ease-management.aspx</link><pubDate>Wed, 04 Nov 2009 18:36:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9917455</guid><dc:creator>termserv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rds/comments/9917455.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9917455</wfw:commentRss><description>&lt;p&gt;Hi everyone. We have published scripts to help simplify Remote Desktop Services management—including Virtual Desktop Infrastructure (VDI) management. You can download these scripts from the &lt;a href="http://technet.microsoft.com/en-us/scriptcenter/ee364707.aspx"&gt;Remote Desktop Services page on Script Center&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Here are some of the Remote Desktop Services management scripts that are available now:&lt;/p&gt;  &lt;p&gt;Virtual machine management&lt;/p&gt;  &lt;p&gt;&lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/bd2e02d0-efe7-4f89-84e5-7ad70f9a7bf0"&gt;Configure Guest OS for VDI (can be run as GP start-up script)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Virtual machine assignment management &lt;/p&gt;  &lt;p&gt;&lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/fc2cc86d-d887-4d0a-b574-db7ea46c2d5a"&gt;Bulk assign virtual machines to users or pools&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/7c6c8a91-fe10-41fd-9f8e-0f34e3acd700"&gt;List VM assignment information&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Infrastructure setup: RD Connection Broker cluster creation and management &lt;/p&gt;  &lt;p&gt;&lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/5aca700b-7b70-4d06-9ae3-2cfb4fc027ca"&gt;Manage RD Connection Broker cluster (create, add nodes)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/99a62b74-acec-441c-bb4d-4b524264aa93"&gt;Update RD Connection Broker configuration across nodes in a cluster&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Troubleshooting: &lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/site/search?f%5B0%5D.Type=RootCategory&amp;amp;f%5B0%5D.Value=RemoteDesktopServices&amp;amp;f%5B1%5D.Type=Tag&amp;amp;f%5B1%5D.Value=VDITroubleshooting"&gt;Configuration verification&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Others &lt;/p&gt;  &lt;p&gt;&lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/e8c3af96-db10-45b0-88e3-328f087a8700"&gt;Monitor sessions&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/d67e7c7e-a273-4ebc-b88b-c445e2e7c735"&gt;Generate usage report&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/313a95b3-a698-4bb0-9ed6-d89a47eacc72"&gt;Deploy RemoteApp programs to the Start menu by using RemoteApp and Desktop Connection&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Please visit the Script Center and try these scripts, and then let us know what you think. You can provide feedback either through the Comments section or the Discussion feature in Script Center. &lt;/p&gt;  &lt;p&gt;You can also upload your scripts to Script Center. Click &lt;b&gt;Upload&lt;/b&gt; on the right side of the &lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/site/search?f%5B0%5D.Type=RootCategory&amp;amp;f%5B0%5D.Value=servers&amp;amp;f%5B1%5D.Type=Tag&amp;amp;f%5B1%5D.Value=VDI%20Monitoring"&gt;Script Gallery home page&lt;/a&gt; and follow the simple process.&lt;/p&gt;  &lt;p&gt;We’ll update this post when additional scripts are available. Keep watching this space.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9917455" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/RemoteApp/default.aspx">RemoteApp</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Shanmugam+Kulandaivel/default.aspx">Author: Shanmugam Kulandaivel</category><category domain="http://blogs.msdn.com/rds/archive/tags/VDI/default.aspx">VDI</category><category domain="http://blogs.msdn.com/rds/archive/tags/RemoteApp+and+Desktop+Connections/default.aspx">RemoteApp and Desktop Connections</category><category domain="http://blogs.msdn.com/rds/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Windows 7 with RDP7: Best OS for VDI</title><link>http://blogs.msdn.com/rds/archive/2009/11/02/windows-7-with-rdp7-best-os-for-vdi.aspx</link><pubDate>Tue, 03 Nov 2009 03:02:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9916541</guid><dc:creator>termserv</dc:creator><slash:comments>17</slash:comments><comments>http://blogs.msdn.com/rds/comments/9916541.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9916541</wfw:commentRss><description>&lt;p&gt;In the minds of IT admins looking to enable a virtual desktop infrastructure (VDI) environment, Windows XP has by far been the preferred OS running in the VMs. However, with the arrival of Windows 7, IT admins have several important reasons, as outlined in this blog, to reconsider. In fact, an upcoming RDP Performance Whitepaper will provide a rich set of data to convince even the most skeptical critics that Windows 7, with its enhanced user experience, performance on the wire, and security outshines Windows XP as the virtualized guest OS of choice. &lt;/p&gt;  &lt;p&gt;When users connect to a Windows 7 VM, the RDP7 protocol will be used to communicate between client and VM if RDP 7 or Remote Desktop Connection 7 (RDC7) client is used. RDC7 client is offered on variety of OSs, including XPSP3, Vista SP1 and Vista SP2 and the same client is part of the Windows 7 OS (see blog post for more details: &lt;a href="http://blogs.msdn.com/rds/archive/2009/10/28/announcing-the-availability-of-remote-desktop-connection-7-0-for-windows-xp-sp3-windows-vista-sp1-and-windows-vista-sp2.aspx"&gt;Announcing the availability of Remote Desktop Connection 7.0 for Windows XP SP3, Windows Vista SP1, and Windows Vista SP2&lt;/a&gt; ).&lt;/p&gt;  &lt;p&gt;When an RDP 7 client connects to a Windows 7 VM, it can take advantage of all the new features implemented in Windows 7.&amp;#160; However, when the same RDP 7 client connects to a Windows XP VM, it will start talking the 9-year-old RDP 5.2 protocol. &lt;/p&gt;  &lt;h4&gt;User Experience&lt;/h4&gt;  &lt;p&gt;To test the user experience improvements that the RDP 7 client provides when connecting to a Windows 7 guest VM, we picked the following scenarios:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Media(.wmv) playing in a remote session with Windows Media Player      &lt;ol type="a"&gt;       &lt;li&gt;A Windows 7 VM will give you an experience that is close to watching the same video locally from your PC &lt;/li&gt;        &lt;li&gt;On Windows XP with RDP5.x , the video may degrade to become a “slide show” with audio sync behind &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;Video playing from any popular site:      &lt;ol type="a"&gt;       &lt;li&gt;You’ll find that with Windows 7 you can enjoy the video content &lt;/li&gt;        &lt;li&gt;With Windows XP, the experience is much worse. You may experience the same “slide show” effect as with media .wmv files &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;Aero graphics (“Aero glass”)      &lt;ol type="a"&gt;       &lt;li&gt;RDP7 with Windows 7 is able to remote Aero for your increased productivity and pleasure, so you don’t need to default to the green field of Windows XP Classic theme. &lt;/li&gt;        &lt;li&gt;Windows XP will not be able to provide Aero &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;Audio chat experience      &lt;ol type="a"&gt;       &lt;li&gt;Windows 7 will provide you with bi-directional audio, i.e. with the chance to reply, not only listen silently to the conversation. Using the microphone on your local device, you will be able to change a monologue to a dialogue &lt;/li&gt;        &lt;li&gt;With Windows XP, there will be no microphone input from your client computer &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;Multimonitor sessions--here the difference is even more pronounced      &lt;ol type="a"&gt;       &lt;li&gt;If you have more than a single monitor when connected to a Windows 7 VM, all of them will be available to your virtual desktop &lt;/li&gt;        &lt;li&gt;If you continue to work with Windows XP, only one of the monitors will be used, all others will sit on your table collecting dust &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;Logon speed      &lt;ol type="a"&gt;       &lt;li&gt;Window 7 Client boots faster; you can initiate logon before the whole OS is booted up. &lt;/li&gt;        &lt;li&gt;Windows XP boots slower; you have to wait for the entire OS to boot up before logging on. &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Performance&lt;/h4&gt;  &lt;p&gt;Let’s examine the performance of the RDP 7 protocol compared to the RDP 5.2 protocol of the Windows XP era.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Windows 7 introduced a new codec that compresses bitmaps very well and can also distinguish between text and images, applying different compression techniques with different levels of “lossiness” to text or images. The goal with text is to keep it readable, so lossy compression has to be avoided. With images, the human eye is more forgiving when we allow some lossiness, in order to save bandwidth. Windows XP is using RDP 5.2 bitmap compression, which requires twice as much bandwidth on the wire as the RDP 7 codec and does not have a good dynamic approach for different types of content. &lt;/li&gt;    &lt;li&gt;In addition to the bitmap compression improvement, the RDP 7 protocol supports a better byte compression technique that is 3 times more effective for all content from a VM to an RDP 7 client--graphics, print data, audio, clipboard, media, and so on. A Windows XP VM will use an older byte compression algorithm that will not be comparable to the modern compression technique available in RDP 7. &lt;/li&gt;    &lt;li&gt;IT admins can prioritize interactive traffic (graphics) higher than non-interactive traffic (print/files/clipboard) by assigning a ratio of available bandwidth to these two categories of traffic. By default in both Windows 7 and Windows XP, 70% of the available bandwidth is given to graphics/interactive data, and 30% to all other content. Only Windows 7 VMs allow admins to control this ratio based on their real needs. &lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Security&lt;/h4&gt;  &lt;p&gt;Windows 7 with RDP 7 takes remote session security to the next level. When connecting to a Windows XP VM, a connection will be created before security handshakes are finished:&lt;/p&gt;  &lt;ol type="a"&gt;   &lt;li&gt;Windows XP VM does not support Kerberos for client/server and/or user authentication &lt;/li&gt;    &lt;li&gt;Windows XP VM does not support Network Layer Authentication (NLA): the remote session can be created even for a rogue user &lt;/li&gt;    &lt;li&gt;Windows XP VM, does not support Server Authentication, so this VM can be used by any RDP server to steal user credentials &lt;/li&gt;    &lt;li&gt;Windows XP VM does not support Transport Layer Security (TLS) / Secure Sockets Layer (SSL) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Windows 7 VM with RDP 7 supports all of the functionality you need to keep your system more secure: user-server authentication, Single Sign On, and Network Layer Authentication.&lt;/p&gt;  &lt;h4&gt;Administration&lt;/h4&gt;  &lt;p&gt;Windows 7 VMs are easier to deploy and administrate than Windows XP VMs.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;On Windows 7, there is no need to install an enlightenment package or to reboot VMs after a VDI configuration. On Windows XP, the administrator needs to install the enlightenment package and reboot the VMs before the OS can be accessed by the user&lt;/li&gt;    &lt;li&gt;Windows 7 supports offline domain join, which makes the process of joining a VDI VM to a domain faster and less error-prone &lt;/li&gt;    &lt;li&gt;Windows 7 has a newer version of sysprep, which enables the administrators to create Windows 7 VMs faster &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The take-home message from this blog is simple: if you are considering deploying a VDI environment and you're after the best user experience, performance, security, and administration support, I recommend you use a device running the new RDC7 client connecting to Windows 7 as the desktop OS running in the virtual machines. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9916541" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Nelly+Porter/default.aspx">Author: Nelly Porter</category><category domain="http://blogs.msdn.com/rds/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/rds/archive/tags/VDI/default.aspx">VDI</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+George+Zhu/default.aspx">Author: George Zhu</category></item><item><title>Remote Desktop Load Simulation Toolset</title><link>http://blogs.msdn.com/rds/archive/2009/10/30/remote-desktop-load-simulation-toolset.aspx</link><pubDate>Fri, 30 Oct 2009 20:27:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9915452</guid><dc:creator>termserv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rds/comments/9915452.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9915452</wfw:commentRss><description>&lt;p&gt;I am pleased to announce the availability of the Remote Desktop Load Simulation Toolset.&amp;#160;&amp;#160; Many customers have asked us to provide the specific number and type of servers to use for Remote Desktop Services scalability.&amp;#160; This is a difficult question to answer without more complete information given the variation in use cases and the impact on server loading.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;To help answer that question, the RDS team created a toolset to create and measure load when using Remote Desktop Services.&amp;#160; We believe this toolset will also be useful for customers that wish to conduct their own scalability testing.&amp;#160; &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;It’s important to note that this is one tool to help answer this question, but not the only one.&amp;#160; In addition to using this toolset, measuring and understanding your own environment and usage cases is very important.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;The Remote Desktop Load Simulation Toolset is now available for download at &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c3f5f040-ab7b-4ec6-9ed3-1698105510ad&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=c3f5f040-ab7b-4ec6-9ed3-1698105510ad&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9915452" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+James+Baker/default.aspx">Author: James Baker</category></item><item><title>Announcing the availability of Remote Desktop Connection 7.0 for Windows XP SP3, Windows Vista SP1, and Windows Vista SP2</title><link>http://blogs.msdn.com/rds/archive/2009/10/28/announcing-the-availability-of-remote-desktop-connection-7-0-for-windows-xp-sp3-windows-vista-sp1-and-windows-vista-sp2.aspx</link><pubDate>Wed, 28 Oct 2009 16:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9914153</guid><dc:creator>termserv</dc:creator><slash:comments>44</slash:comments><comments>http://blogs.msdn.com/rds/comments/9914153.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9914153</wfw:commentRss><description>&lt;P&gt;We are pleased to announce the availability of Remote Desktop Connection 7.0 for downlevel operating systems on Wednesday, October 28&lt;SUP&gt;th&lt;/SUP&gt;. &lt;A href="http://support.microsoft.com/kb/969084" mce_href="http://support.microsoft.com/kb/969084"&gt;KB969084&lt;/A&gt; provides a detailed description of available functionality and provides links to the download package. This follows the previous post &lt;A href="http://blogs.msdn.com/rds/archive/2009/08/21/remote-desktop-connection-7-for-windows-7-windows-xp-windows-vista.aspx" mce_href="http://blogs.msdn.com/rds/archive/2009/08/21/remote-desktop-connection-7-for-windows-7-windows-xp-windows-vista.aspx"&gt;here&lt;/A&gt; that described in detail the functionality available using Remote Desktop Connection 7.0 on Windows 7, Windows Vista, and Windows XP SP3.&lt;/P&gt;
&lt;P&gt;The Windows XP SP3 Multilingual User Interface (MUI) package release is also coming soon. Stay tuned for this announcement in a few weeks. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Update: &lt;/STRONG&gt;If you have previously installed the fix in &lt;A href="http://support.microsoft.com/default.aspx/kb/968358" mce_href="http://support.microsoft.com/default.aspx/kb/968358"&gt;KB968358&lt;/A&gt; (You cannot use a mouse to select combo box items in a RemoteApp program that you connect to through Remote Desktop Connection (RDC) 6.1), installing RDC 7.0 will undo the fix.&amp;nbsp; We'll let you know when this is corrected.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Update 2: &lt;/STRONG&gt;The Multilingual User Interface (MUI) package for XP SP3 is now available for download. Please follow the &lt;A href="http://support.microsoft.com/?kbid=969085" mce_href="http://support.microsoft.com/?kbid=969085"&gt;KB article 969085&lt;/A&gt; for package description and download information.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9914153" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/TS+Client+Upgrade/default.aspx">TS Client Upgrade</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Gopikrishna+Kannan/default.aspx">Author: Gopikrishna Kannan</category></item><item><title>RDS CAL Single Pack now available in Retail channel</title><link>http://blogs.msdn.com/rds/archive/2009/10/22/rds-cal-single-pack-now-available-in-retail-channel.aspx</link><pubDate>Fri, 23 Oct 2009 03:35:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911837</guid><dc:creator>termserv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rds/comments/9911837.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9911837</wfw:commentRss><description>&lt;p&gt;Remote Desktop Services client access licenses (RDS CALs) were formerly sold in packs of 5 and 20. Customers buying Retail RDS CALs didn’t have a choice of buying a single CAL, which meant that they had to buy the next higher CAL Pack. For example, if the customer wanted 6 CALs, he had to buy two 5-CAL Packs.&lt;/p&gt;  &lt;p&gt;In response to customer requests, we now offer Single CAL Packs, giving customers the ability to buy exactly the number of CALs that they need. Single CAL Packs are available for Windows Server 2008 and Windows Server 2008 R2 in the following two types: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Per User&lt;/li&gt;    &lt;li&gt;Per Device&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Single CAL Packs are available with Retail and OEM channels and not with Volume licensing channels like Select, Open and Enterprise Agreements, as they can already order in units of one. 5- and 20-CAL packs are also still available.&lt;/p&gt;  &lt;p&gt;To install a Single CAL Pack on Windows Server 2008 R2 license server, follow the steps you would use to install any other retail CAL Pack. For Windows Server 2008, ask your TAM (Technical Account Manager) or EE (Escalation Engineer) for &lt;a href="http://support.microsoft.com/kb/971302"&gt;KB971302&lt;/a&gt; and install it on the license server. After installing this QFE on Windows Server 2008 license server, you can follow the same procedure to install the Single CAL Pack as any other retail CAL Pack.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911837" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Licensing/default.aspx">Licensing</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Silvia+Doomra/default.aspx">Author: Silvia Doomra</category></item><item><title>Using App-V without application sequencing for RDSH Compatibility issues</title><link>http://blogs.msdn.com/rds/archive/2009/10/20/using-app-v-without-application-sequencing-for-rdsh-compatibility-issues.aspx</link><pubDate>Tue, 20 Oct 2009 23:33:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9910258</guid><dc:creator>termserv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rds/comments/9910258.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9910258</wfw:commentRss><description>&lt;h5&gt;Introduction&lt;/h5&gt;  &lt;p&gt;This blog post refers to Microsoft Application Virtualization (App-V), which decouples applications from the operating system and virtualizes applications per user, per application instance. As a result, application conflicts and the need for regression testing are dramatically reduced (See &lt;a href="http://www.microsoft.com/systemcenter/appv/techoverview.mspx"&gt;here&lt;/a&gt; for details).&lt;/p&gt;  &lt;p&gt;App-V mitigates the application compatibility issues under Remote Desktop Services by reducing the conflicts between multiple application instances. However, the application must be pre-processed or ‘sequenced’ before deploying it on App-V. &lt;/p&gt;  &lt;p&gt;App-V also allows an alternative method to run an application in the virtualized environment without sequencing (for debugging purposes). The &lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/f632175d-42a5-41b5-be81-67de7b735a02"&gt;“RDS Compatibility using App-V” script&lt;/a&gt; leverages this functionality of App-V to enable any application to run inside an App-V bubble without sequencing it.&lt;/p&gt;  &lt;h5&gt;Who should use this script?&lt;/h5&gt;  &lt;p&gt;This script is targeted at IT administrators who intend to address application compatibility issues with applications deployed on RDSH.&lt;/p&gt;  &lt;p&gt;The main goal of the script is to run the applications that cannot run under Remote Desktop Service Host due to compatibility issues and are not targeted for sequencing. The script is used to run these applications quickly using App-V without sequencing them and is best suited for the following scenarios:&lt;/p&gt;  &lt;p&gt;· Fixing run-time application compatibility issues on RDSH where sequencing is not possible&lt;/p&gt;  &lt;p&gt;· Evaluating and verifying App-V application compatibility without sequencing the applications&lt;/p&gt;  &lt;h5&gt;How is this method different from using sequenced applications?&lt;/h5&gt;  &lt;p&gt;The preferred way of running applications under App-V is to first sequence them and then run them with the App-V client. This enables the usage of the complete virtualization and other features of App-V. &lt;/p&gt;  &lt;p&gt;The debugging method leveraged in this script does not enable file-system virtualization. Overall, this script is best suited for scenarios in which sequencing is not feasible.&lt;/p&gt;  &lt;h5&gt;How can I use this script? Where can I get this script?&lt;/h5&gt;  &lt;p&gt;The script and the instructions to use it are available at &lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us/f632175d-42a5-41b5-be81-67de7b735a02"&gt;http://gallery.technet.microsoft.com/ScriptCenter/en-us/f632175d-42a5-41b5-be81-67de7b735a02&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;References&lt;/h5&gt;  &lt;p&gt;Microsoft App-V: &lt;a href="http://www.microsoft.com/systemcenter/appv/default.mspx"&gt;http://www.microsoft.com/systemcenter/appv/default.mspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Microsoft App-V for RDSH: &lt;a href="http://www.microsoft.com/systemcenter/appv/terminalsvcs.mspx"&gt;http://www.microsoft.com/systemcenter/appv/terminalsvcs.mspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9910258" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/rds/archive/tags/App-V/default.aspx">App-V</category><category domain="http://blogs.msdn.com/rds/archive/tags/RD+Session+Host/default.aspx">RD Session Host</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Rama+Thippavajjala/default.aspx">Author: Rama Thippavajjala</category></item><item><title>Whitepaper Release: Application Virtualization 4.5 for Terminal Services</title><link>http://blogs.msdn.com/rds/archive/2009/10/14/whitepaper-release-application-virtualization-4-5-for-terminal-services.aspx</link><pubDate>Wed, 14 Oct 2009 21:29:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9907332</guid><dc:creator>termserv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rds/comments/9907332.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9907332</wfw:commentRss><description>&lt;p&gt;We are proud to announce the availability of the white paper “Application Virtualization 4.5 for Terminal Services.”&amp;#160; This white paper discusses the benefits, configurations, and considerations when planning a Terminal Services (TS) solution with Microsoft Application Virtualization for TS (App-V for TS).&amp;#160; Many customers want to find out the best way to configure and/or deploy App-V for TS on terminal servers.&amp;#160; This paper includes topics ranging from choosing an App-V for TS application delivery method to configuring RemoteApp and App-V for TS to work together.&amp;#160; We hope you find this document an indispensible read if you are implementing App-V for TS.&lt;/p&gt;  &lt;p&gt;You can download the white paper &lt;a href="http://download.microsoft.com/download/6/9/0/69095D7C-649D-4A0E-AF0B-17B26EACCF67/App-V%20Terminal%20Services.docx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9907332" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/RemoteApp/default.aspx">RemoteApp</category><category domain="http://blogs.msdn.com/rds/archive/tags/App-V/default.aspx">App-V</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+James+Baker/default.aspx">Author: James Baker</category></item><item><title>Using Remote Desktop Easy Print in Windows 7 and Windows Server 2008 R2</title><link>http://blogs.msdn.com/rds/archive/2009/09/28/using-remote-desktop-easy-print-in-windows-7-and-windows-server-2008-r2.aspx</link><pubDate>Tue, 29 Sep 2009 00:21:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9900455</guid><dc:creator>termserv</dc:creator><slash:comments>15</slash:comments><comments>http://blogs.msdn.com/rds/comments/9900455.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rds/commentrss.aspx?PostID=9900455</wfw:commentRss><description>&lt;p&gt;&lt;b&gt;What’s new in Windows 7?     &lt;br /&gt;&lt;/b&gt;Easy Print Redirection was available for Windows Server 2008 TS only and it was not available when connecting to computers running Windows Vista. Now it will also be available when connecting to Ultimate/Enterprise editions of Windows 7 and Windows Server 2008 R2 Remote Desktop Session Host servers. In addition, we’re happy to announce that with Win7 / WS08 R2, Easy Print no longer has a dependency on .NET Framework -- a common request from customers that didn’t want to install .NET on all clients from which they wanted to print. The XPS format to GDI conversion was done via .NET Framework before, but for Win7 / WS08 R2 the operating system does this conversion itself.&lt;/p&gt;  &lt;p&gt;For the full documentation about how Easy Print works, refer to this three-part blog :   &lt;br /&gt;&lt;a href="http://blogs.msdn.com/rds/archive/2007/04/26/introducing-terminal-services-easy-print-part-1.aspx"&gt;http://blogs.msdn.com/rds/archive/2007/04/26/introducing-terminal-services-easy-print-part-1.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/rds/archive/2007/05/03/introducing-terminal-services-easy-print-part-2.aspx"&gt;http://blogs.msdn.com/rds/archive/2007/05/03/introducing-terminal-services-easy-print-part-2.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/rds/archive/2007/10/05/introducing-terminal-services-easy-print-part-3.aspx"&gt;http://blogs.msdn.com/rds/archive/2007/10/05/introducing-terminal-services-easy-print-part-3.aspx&lt;/a&gt;    &lt;br /&gt;&lt;b&gt;     &lt;br /&gt;Remote Desktop Easy Print configuration properties:       &lt;br /&gt;&lt;/b&gt;The following table displays the Client/Server combinations that support Easy Print.    &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="127"&gt;           &lt;p&gt;&lt;b&gt;Client / Server -&amp;gt;               &lt;br /&gt;|                &lt;br /&gt;v&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="168"&gt;           &lt;p&gt;&lt;b&gt;Windows 7 &lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="162"&gt;           &lt;p&gt;&lt;b&gt;Windows Server 2008&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="180"&gt;           &lt;p&gt;&lt;b&gt;Windows Server                &lt;br /&gt;2008 R2&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="127"&gt;           &lt;p&gt;&lt;b&gt;Windows XP&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="168"&gt;           &lt;p&gt;Client : (1), (2)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="162"&gt;           &lt;p&gt;Client : (1), (2)             &lt;br /&gt;Server : (3)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="180"&gt;           &lt;p&gt;Client : (1), (2)             &lt;br /&gt;Server : (4)&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="127"&gt;           &lt;p&gt;&lt;b&gt;Windows Vista&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="168"&gt;           &lt;p&gt;Client : (1), (2)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="162"&gt;           &lt;p&gt;Client : (1), (2)             &lt;br /&gt;Server : (3)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="180"&gt;           &lt;p&gt;Client : (1), (2)             &lt;br /&gt;Server : (4)&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="127"&gt;           &lt;p&gt;&lt;b&gt;Windows 7 &lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="168"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="162"&gt;           &lt;p&gt;Server : (3)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="180"&gt;           &lt;p&gt;Server : (4)&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="127"&gt;           &lt;p&gt;&lt;b&gt;Windows Server 2008&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="168"&gt;           &lt;p&gt;Client : (2)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="162"&gt;           &lt;p&gt;Client : (2)             &lt;br /&gt;Server : (3)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="180"&gt;           &lt;p&gt;Client : (2)             &lt;br /&gt;Server : (4)&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="127"&gt;           &lt;p&gt;&lt;b&gt;Windows Server 2008 R2&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="168"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="162"&gt;           &lt;p&gt;Server : (3)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="180"&gt;           &lt;p&gt;Server : (4)&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;    &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="638"&gt;           &lt;p&gt;(1) RDC 6.1 or above (Windows XP with Service Pack 3 and above includes this).&lt;/p&gt;            &lt;p&gt;(2) Even if RDC 6.1 or above is used, &lt;i&gt;the user must install a supported version of .NET Framework separately&lt;/i&gt;. Microsoft .NET Framework 3.5 (which includes .NET Framework 3.0 SP1) can be downloaded from the Microsoft Download Center (&lt;a href="http://go.microsoft.com/fwlink/?LinkId=109422"&gt;http://go.microsoft.com/fwlink/?LinkId=109422&lt;/a&gt; ).              &lt;br /&gt;(3) Terminal Services role.              &lt;br /&gt;(4) Remote Desktop Session Host Role.&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;If all the requirements are met, the Easy Print driver is listed in the Model field of the redirected printer’s Properties dialog.   &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/UsingRemoteDesktopEasyPrintinWindows7and_C9D2/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/UsingRemoteDesktopEasyPrintinWindows7and_C9D2/image_thumb.png" width="421" height="464" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;     &lt;br /&gt;Troubleshooting:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;If you experience formatting problems using Easy Print.       &lt;br /&gt;&lt;/b&gt;Refer to the KB- 954744 article at &lt;a href="http://support.microsoft.com/kb/954744"&gt;http://support.microsoft.com/kb/954744&lt;/a&gt; (related: KB954743).      &lt;br /&gt;Refer to the KB- 970603 article at &lt;a href="http://support.microsoft.com/kb/970603"&gt;http://support.microsoft.com/kb/970603&lt;/a&gt;      &lt;br /&gt;Refer to the KB- 959442 article at &lt;a href="http://support.microsoft.com/kb/959442"&gt;http://support.microsoft.com/kb/959442&lt;/a&gt;      &lt;br /&gt;&lt;/li&gt;   &lt;b&gt;&lt;/b&gt;    &lt;li&gt;&lt;b&gt;If the client printers are not redirected as Easy Print:&lt;/b&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;First check the RDP version on the RDP client computer as well as the .NET framework version with respect to the operating system used (as explained above). Also verify that the RD Session Host / Terminal Server role is installed if the host computer is running Windows Server 2008 R2 or Windows Server 2008.&lt;/li&gt;      &lt;li&gt;Group Policy must be correctly set to enable Easy Print on the Server. The policy location is “Computer Configuration -&amp;gt; Administrative templates -Windows Components -&amp;gt; Remote Desktop Services &amp;gt; Remote Desktop Session Host -&amp;gt; Printer Redirection”. The setting “Use Remote Desktop Easy Print printer driver first” must be set to “Enabled” for Easy Print redirection, and it has to be “Disabled” for Legacy Print. For “Not configured”, Easy Print is chosen by default.       &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/UsingRemoteDesktopEasyPrintinWindows7and_C9D2/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rds/WindowsLiveWriter/UsingRemoteDesktopEasyPrintinWindows7and_C9D2/image_thumb_1.png" width="579" height="357" /&gt;&lt;/a&gt;&amp;#160;&lt;/li&gt;      &lt;li&gt;Check The Remote Desktop Configuration Tool (tsconfig.msc) settings to ensure that the “Windows Printer” option is not disabled (it is not disabled by default). &lt;/li&gt;      &lt;li&gt;Make sure that the “Printers” check box in the client (mstsc.exe) window on the “Local Resources” tab is checked. The corresponding setting in the associated RDP file is “redirectprinters:i:1”.&lt;/li&gt;      &lt;li&gt;Ensure that the spooler service is running on both the RDP Client &amp;amp; Server.       &lt;br /&gt;Windows Server 2008 added the ability for an Admin to configure spooler security and Windows 7/Windows Server 2008 R2 adds the UI for this. Therefore, it would be possible to alter the RDP server’s spooler security descriptor which might prevent RDP client printers from being redirected on the session. The spooler security descriptor must contain the “AU” (Authenticated User) ACL (Access Control List) which allows any authenticated user to open the spooler service for reading operations. Therefore, &lt;i&gt;if that ACL is missing from the spooler security descriptor&lt;/i&gt;, it must be &lt;i&gt;added&lt;/i&gt; like the example below using the command prompt (elevated).        &lt;br /&gt;&amp;gt; sc sdshow spooler        &lt;br /&gt;D:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)        &lt;br /&gt;&amp;gt; sc sdset spooler D:&lt;b&gt;(A;;CCLCSWLOCRRC;;;AU)&lt;/b&gt;(A;;CCDCLCSWRPWPDTLOCRSD        &lt;br /&gt;RCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)        &lt;br /&gt;[SC] SetServiceObjectSecurity SUCCESS&lt;/li&gt;      &lt;li&gt;If you connect over RD Gateway, ensure that the policy that disables printer redirection is turned off.&lt;/li&gt;      &lt;li&gt;If everything listed so far is correct and you still have a redirection problem, check the event logs.       &lt;br /&gt;        &lt;br /&gt;Some of the events to look for are:        &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;           &lt;tr&gt;             &lt;td valign="top" width="91"&gt;               &lt;p&gt;&lt;b&gt;Event ID&lt;/b&gt;&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="267"&gt;               &lt;p&gt;&lt;b&gt;Message&lt;/b&gt;&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="184"&gt;               &lt;p&gt;&lt;b&gt;Explanation&lt;/b&gt;&lt;/p&gt;             &lt;/td&gt;           &lt;/tr&gt;            &lt;tr&gt;             &lt;td valign="top" width="91"&gt;               &lt;p&gt;1105&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="267"&gt;               &lt;p&gt;Printer security information for the printer could not be set.&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="184"&gt;&amp;#160;&lt;/td&gt;           &lt;/tr&gt;            &lt;tr&gt;             &lt;td valign="top" width="91"&gt;               &lt;p&gt;1109&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="267"&gt;               &lt;p&gt;The printer could not be set as the default printer.&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="184"&gt;               &lt;p&gt;The default client printer and the default printer in the RDP session must be the same.&lt;/p&gt;             &lt;/td&gt;           &lt;/tr&gt;            &lt;tr&gt;             &lt;td valign="top" width="91"&gt;               &lt;p&gt;1111&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="267"&gt;               &lt;p&gt;The driver required for the printer is unknown. Contact the administrator to install the driver before you log in again.&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="184"&gt;               &lt;p&gt;If the Easy Print driver is missing in the host, this event will be logged.&lt;/p&gt;             &lt;/td&gt;           &lt;/tr&gt;            &lt;tr&gt;             &lt;td valign="top" width="91"&gt;               &lt;p&gt;1116&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="267"&gt;               &lt;p&gt;The printer cannot be redirected by using Remote Desktop Easy Print. &lt;i&gt;The client computer may not have a version of the Remote Desktop Connection client or Microsoft .NET Framework installed that supports this driver.&lt;/i&gt;&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="184"&gt;               &lt;p&gt;Make sure you’ve met all the requirements in the table above.&lt;/p&gt;             &lt;/td&gt;           &lt;/tr&gt;            &lt;tr&gt;             &lt;td valign="top" width="91"&gt;               &lt;p&gt;1103&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="267"&gt;               &lt;p&gt;An internal communication error occurred. Redirected printing will no longer function for a single user session. Check the status of the Remote Desktop Device Redirector in the System folder of Device Manager.&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="184"&gt;&amp;#160;&lt;/td&gt;           &lt;/tr&gt;            &lt;tr&gt;             &lt;td valign="top" width="91"&gt;               &lt;p&gt;1124&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="267"&gt;               &lt;p&gt;The number of printers per session limit was reached.&lt;/p&gt;             &lt;/td&gt;              &lt;td valign="top" width="184"&gt;&amp;#160;&lt;/td&gt;           &lt;/tr&gt;         &lt;/tbody&gt;&lt;/table&gt;        &lt;br /&gt;&lt;/li&gt;      &lt;li&gt;&lt;b&gt;If the number of redirected printers is less than the number of the RDP client printers.         &lt;br /&gt;&lt;/b&gt;The maximum number of printers that can be redirected is controlled by the registry key “MaxPrintersPerSession REG_DWORD” which is under the node “HKLM\\Software\\Policies\\Microsoft\\Windows NT\\Terminal Services”.        &lt;br /&gt;The default value for this is 20 printers per session.&lt;/li&gt;      &lt;li&gt;&lt;b&gt;If Easy Print is unable to print on a domain controller.         &lt;br /&gt;&lt;/b&gt;Refer to the Knowledge Base Article 968605 at &lt;a href="http://support.microsoft.com/kb/968605/EN-US"&gt;http://support.microsoft.com/kb/968605/EN-US&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;b&gt;If the client printer is redirected as Easy Print and the user is unable to stop a print job on the redirected printer.         &lt;br /&gt;&lt;/b&gt;Take ownership of the printer and allow the “Print” &amp;amp; “Manage printers” permissions. But note that when logged off from the RD Session, the remote printer settings are not retained.        &lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9900455" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rds/archive/tags/Print/default.aspx">Print</category><category domain="http://blogs.msdn.com/rds/archive/tags/WS08+R2/default.aspx">WS08 R2</category><category domain="http://blogs.msdn.com/rds/archive/tags/Author_3A00_+Altan+Hacigumus/default.aspx">Author: Altan Hacigumus</category></item></channel></rss>