<?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>Chris Jackson's Semantic Consonance : Windows Vista</title><link>http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx</link><description>Tags: Windows Vista</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Using the uiAccess attribute of requestedExecutionLevel to Improve Applications Providing Remote Control of the Desktop</title><link>http://blogs.msdn.com/cjacks/archive/2009/10/15/using-the-uiaccess-attribute-of-requestedexecutionlevel-to-improve-applications-providing-remote-control-of-the-desktop.aspx</link><pubDate>Fri, 16 Oct 2009 01:47:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9907916</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9907916.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9907916</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9907916</wfw:comment><description>&lt;p&gt;I’ve run into this exact same problem 3 times now in one week, so I figure that probably doesn’t bode well and I should attempt to do something about it.&lt;/p&gt;  &lt;p&gt;With 3 different pieces of software (one of them ours), the remote control functionality is imperfectly implemented. Let’s see if this sounds familiar to anyone. You are the helpdesk. You attempt to connect to a user’s desktop. You have to elevate an application. When you do, you (the helpdesk who actually has the password) doesn’t see the UAC dialog – instead, the end user (who does not have the password) does. Even if you decide to give the user the password (it happens), you then can’t control or even see the elevated application.&lt;/p&gt;  &lt;p&gt;Kind of makes it hard to be a helpdesk when that happens.&lt;/p&gt;  &lt;p&gt;Here are the 3 solutions that I have seen to this problem:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Do nothing. That’s what our solution did. It just failed every time elevation was involved.&lt;/li&gt;    &lt;li&gt;Install a service. That’s what company X did. It requires the user to know an admin password, and that’s a problem for my customers&lt;/li&gt;    &lt;li&gt;Run the application elevated. That’s what company Y did. It requires the user to know an admin password (a problem with my customers), and also won’t allow you to interact with any windows running at System integrity level (so an incomplete solution)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here’s what I wish all 3 had done:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Manifest with uiAccess = true&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now, most people don’t really understand what this is for, and the UAC manifest is typically just a copy/paste affair. But it pays for the remote desktop developer to pay attention to it. For any regular piece of software, you generally want to stay away from it – it’s dangerous, and sidesteps a significant security feature (UIPI). But if you are remoting the desktop, it’s precisely what you want – you need to be able to see everything!&lt;/p&gt;  &lt;p&gt;It’s dangerous enough, in fact, that we won’t allow you to set it without digitally signing your application. By default, you also have to have it installed in a secure location (such as Program Files). You can set a group policy to not require a secure location, but there is no option to not require a signature.&lt;/p&gt;  &lt;p&gt;However, once set up, it’s really powerful. You’ll be able to remote every possible kind of window – any integrity level at all. No more blank, unresponsive screens. Everything comes across, regardless of integrity level.&lt;/p&gt;  &lt;p&gt;You’ll also be able to leverage the group policy that lets you prompt NOT on the secure desktop if you are a UIAccess application – that way you don’t have to lose the defense in depth of using the secure desktop for normal elevation, but you also avoid writing code to remote the secure desktop when your remote desktop application is running.&lt;/p&gt;  &lt;p&gt;All in all, you are just full of win.&lt;/p&gt;  &lt;p&gt;Now, it’s my job to fix up apps that are written suboptimally, so you may be wondering how I did getting these working?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Our application, rather conveniently, used an external manifest. All I had to do was open up the manifest in Notepad, and type four characters (t-r-u-e) in the uiAccess attribute. Done. Now it works great. (Of course, everyone who downloads it will download a new broken one, so they’ll have to text edit it too – clearly we want to work with the team that makes this to fix it on their end, but you aren’t stuck – you can fix it without depending on anyone else.)&lt;/li&gt;    &lt;li&gt;Company x, the one that used a service (claiming of course that it was UACs fault that they had to do this)? I can’t fix it. They used an internal manifest, which has precedence over any external one I might lay down there. I could extract that manifest with mt.exe, edit it, and then re-inject it, but then I invalidate the digital signature. Remember that this is a non-optional requirement for a uiAccess app! So, there is nothing I can do. I’m trying to contact the vendor.&lt;/li&gt;    &lt;li&gt;Company y, the one that elevates to admin – this one I didn’t have time to examine – they do a “just in time” install and uninstall, so I couldn’t explore the manifest, but since it’s so transitive it’d be hard for me to do much anyway that would last.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Anyone writing desktop remoting applications, please consider using this. And feel free to contact me if you have questions. I would be delighted to help you.&lt;/p&gt;  &lt;p&gt;For the record, here is the corrected manifest for the one I was able to fix:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;lt;?xml version='1.0' encoding='UTF-8' standalone='yes'?&amp;gt;     &lt;br /&gt;&amp;lt;assembly xmlns='urn:schemas-microsoft-com:asm.v1'      &lt;br /&gt;&amp;#160;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;manifestVersion='1.0'&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;assemblyIdentity      &lt;br /&gt;&amp;#160;&amp;#160; version=&amp;quot;1.0.0.0&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160; processorArchitecture=&amp;quot;X86&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160; name=&amp;quot;Microsoft.FixedUpApp.SupportConsole&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160; type=&amp;quot;win32&amp;quot;      &lt;br /&gt;&amp;#160; /&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;description&amp;gt;Fixed Up App&amp;lt;/description&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;dependency&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;dependentAssembly&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;assemblyIdentity type='win32'      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; name='Microsoft.Windows.Common-Controls'      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; version='6.0.0.0'      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font size="2" face="Consolas"&gt;processorArchitecture='x86'     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; publicKeyToken='6595b64144ccf1df'      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; language='*'      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/dependentAssembly&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/dependency&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;trustInfo xmlns=&amp;quot;urn:schemas-microsoft-com:asm.v3&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;security&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;requestedPrivileges&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;requestedExecutionLevel level=&amp;quot;asInvoker&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; uiAccess=&amp;quot;&lt;strong&gt;&lt;font color="#ff0000"&gt;true&lt;/font&gt;&lt;/strong&gt;&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/requestedPrivileges&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/security&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/trustInfo&amp;gt;       &lt;br /&gt;&amp;lt;/assembly&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9907916" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/UAC/default.aspx">UAC</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Stock Viewer Shim Demo Application - Now Available in Japanese!</title><link>http://blogs.msdn.com/cjacks/archive/2009/06/23/stock-viewer-shim-demo-application-now-available-in-japanese.aspx</link><pubDate>Wed, 24 Jun 2009 06:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9800742</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9800742.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9800742</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9800742</wfw:comment><description>I have had the &lt;A title="Stock Viewer Shim Demo" href="http://blogs.msdn.com/cjacks/archive/2008/01/03/stock-viewer-shim-demo-application.aspx" target=_blank mce_href="http://blogs.msdn.com/cjacks/archive/2008/01/03/stock-viewer-shim-demo-application.aspx"&gt;Stock Viewer Shim Demo&lt;/A&gt; application available for over a year now, and I'm delighted at how much impact it has had. I see people using this all the time! But previously it was available only in English. Well, no more - it has now been (mostly) localized to Japanese! Enjoy.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9800742" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cjacks/attachment/9800742.ashx" length="2754632" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Shims/default.aspx">Shims</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Standard User Analyzer Refuses to Run with Application Verifier 4.0 (and Application Verifier 3.x is Gone!)</title><link>http://blogs.msdn.com/cjacks/archive/2009/02/04/standard-user-analyzer-refuses-to-run-with-application-verifier-4-0-and-application-verifier-3-x-is-gone.aspx</link><pubDate>Wed, 04 Feb 2009 21:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9396248</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9396248.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9396248</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9396248</wfw:comment><description>&lt;p&gt;&lt;strong&gt;Updated March 16, 2009: &lt;/strong&gt;Somebody updated these links with the 4.0 version (which kind of defeats the purpose of having these links so I’m not sure what they were thinking) but they’re back to the 3.x version now.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;Hey, there’s a new version of Application Verifier in town, and guess what? Standard User Analyzer doesn’t like it. ACT 5.0.3 (the latest publicly available version) is hard coded to look for versions 3.2 through 3.5, so the brand new version 4.0 kind of leaves this tool in a lurch.&lt;/p&gt;  &lt;p&gt;It’s also a mystery to me why the #1 web hit on live.com for Application Verifier leads to &lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=bd02c19c-1250-433c-8c1b-2619bd93b3a2&amp;amp;DisplayLang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bd02c19c-1250-433c-8c1b-2619bd93b3a2&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=bd02c19c-1250-433c-8c1b-2619bd93b3a2&amp;amp;DisplayLang=en&lt;/a&gt;, which is a, “We are sorry, the page you requested cannot be found” page, which helpfully has search results from the same search engine, which helpfully has a #1 web hit of the same unhelpful page. Seriously? Did we just not pay attention to the fact that we should have &lt;strong&gt;kept&lt;/strong&gt; this page and forwarded, since people don’t want to have to guess the GUID for the new version? A search for Application Verifier 4.0 brings up the desired download as the #2 hit, so all is not lost (just most).&lt;/p&gt;  &lt;p&gt;But the fact that you can eventually find this incredibly useful and important tool if you try hard enough still doesn’t help fans of Standard User Analyzer (which are many). So, until we release ACT 5.5 (which support Application Verifier 4.0), we posted the 3.x versions again in a super-secret hidden location so you can still download them from us instead of from a random source. Unfortunately, we didn’t include fwlinks in the product so we could just update these links and you wouldn’t have to read this here, an omission we have already fixed.&lt;/p&gt;  &lt;p&gt;So, here’s where you can get the 3.x versions of application verifier:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdl.microsoft.com/download/symbols/debuggers/Private/ApplicationVerifier.ia64.msi"&gt;http://msdl.microsoft.com/download/symbols/debuggers/Private/ApplicationVerifier.ia64.msi&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdl.microsoft.com/download/symbols/debuggers/Private/ApplicationVerifier.amd64.msi"&gt;http://msdl.microsoft.com/download/symbols/debuggers/Private/ApplicationVerifier.amd64.msi&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdl.microsoft.com/download/symbols/debuggers/Private/ApplicationVerifier.x86.msi"&gt;http://msdl.microsoft.com/download/symbols/debuggers/Private/ApplicationVerifier.x86.msi&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note that you really shouldn’t use Application Verifier 3.x on Windows 7 – you’ll want to use Application Verifier 4.x on it, which means you’ll end up waiting for ACT 5.5 to use SUA on Windows 7.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9396248" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/ACT+5.0/default.aspx">ACT 5.0</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/UAC/default.aspx">UAC</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Verifier/default.aspx">Application Verifier</category></item><item><title>RunAs Radio: Chris Jackson Makes our Applications Compatible</title><link>http://blogs.msdn.com/cjacks/archive/2009/01/21/runas-radio-chris-jackson-makes-our-applications-compatible.aspx</link><pubDate>Thu, 22 Jan 2009 06:28:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9362097</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9362097.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9362097</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9362097</wfw:comment><description>&lt;p&gt;I met the guys from &lt;a href="http://www.runasradio.com/" target="_blank"&gt;RunAs Radio&lt;/a&gt; back in Barcelona, and a couple weeks ago I had a chance to sit down and chat with them. &lt;a href="http://www.runasradio.com/default.aspx?showNum=93" target="_blank"&gt;Check it out&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9362097" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Helpdesk Elevation on Windows Vista and Windows 7</title><link>http://blogs.msdn.com/cjacks/archive/2009/01/08/helpdesk-elevation-on-windows-vista-and-windows-7.aspx</link><pubDate>Thu, 08 Jan 2009 21:42:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9299483</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9299483.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9299483</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9299483</wfw:comment><description>&lt;p&gt;Since I was talking about configuring UAC on Windows Vista and Windows 7 a bit yesterday, I thought it made sense to bring up another policy whose actual use may not be obvious based on the name.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;User Account Control: Allow UIAccess applications to prompt for elevation without using the secure desktop&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We talked about the secure desktop – but what is this UIAccess all about? Well, you can get details here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms742884.aspx" href="http://msdn.microsoft.com/en-us/library/ms742884.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms742884.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;But rather than going deep, let’s look at the manifest for msra.exe (Microsoft Remote Assistance):&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;sigcheck -m c:\windows\System32\msra.exe &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;sigcheck v1.54 - sigcheck     &lt;br /&gt;Copyright (C) 2004-2008 Mark Russinovich      &lt;br /&gt;Sysinternals - www.sysinternals.com &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;quot;c:\windows\system32\msra.exe&amp;quot;:     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Verified:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Unsigned      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; File date:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 11:47 PM 12/12/2008      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Publisher:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft Corporation      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Description:&amp;#160;&amp;#160;&amp;#160; Windows Remote Assistance      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Product:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft« Windows« Operating System      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Version:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 6.1.7000.0      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; File version:&amp;#160;&amp;#160; 6.1.7000.0 (winmain_win7beta.081212-1400)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Manifest:      &lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;      &lt;br /&gt;&amp;lt;!-- Copyright (c) Microsoft Corporation --&amp;gt;      &lt;br /&gt;&amp;lt;assembly xmlns=&amp;quot;urn:schemas-microsoft-com:asm.v1&amp;quot; xmlns:asmv3=&amp;quot;urn:schemas-micr      &lt;br /&gt;osoft-com:asm.v3&amp;quot; manifestVersion=&amp;quot;1.0&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;assemblyIdentity      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; version=&amp;quot;5.1.0.0&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; processorArchitecture=&amp;quot;amd64&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; name=&amp;quot;Microsoft.Windows.RemoteAssistance&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type=&amp;quot;win32&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;description&amp;gt;Remote Assistance&amp;lt;/description&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;dependency&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;dependentAssembly&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;assemblyIdentity        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type=&amp;quot;win32&amp;quot;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; name=&amp;quot;Microsoft.Windows.Common-Controls&amp;quot;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; version=&amp;quot;6.0.0.0&amp;quot;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; processorArchitecture=&amp;quot;amd64&amp;quot;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; publicKeyToken=&amp;quot;6595b64144ccf1df&amp;quot;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; language=&amp;quot;*&amp;quot;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/dependentAssembly&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/dependency&amp;gt;        &lt;br /&gt;&amp;lt;trustInfo xmlns=&amp;quot;urn:schemas-microsoft-com:asm.v3&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;security&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;requestedPrivileges&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;requestedExecutionLevel        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; level=&amp;quot;asInvoker&amp;quot;        &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;&lt;font color="#ff0000" size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; uiAccess=&amp;quot;true&amp;quot;           &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/requestedPrivileges&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/security&amp;gt;        &lt;br /&gt;&amp;lt;/trustInfo&amp;gt;        &lt;br /&gt;&amp;lt;asmv3:application&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;asmv3:windowsSettings xmlns=&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/SMI/2005/WindowsSe"&gt;&lt;font size="1" face="Courier New"&gt;http://schemas.microsoft.com/SMI/2005/WindowsSe&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;ttings&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;dpiAware&amp;gt;true&amp;lt;/dpiAware&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;autoElevate&amp;gt;true&amp;lt;/autoElevate&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/asmv3:windowsSettings&amp;gt;      &lt;br /&gt;&amp;lt;/asmv3:application&amp;gt;      &lt;br /&gt;&amp;lt;/assembly&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I think of this policy as the “give helpdesk the ability to elevate” policy.&lt;/p&gt;  &lt;p&gt;(Obviously this only works if you don’t configure the policy to auto-deny elevation requests by standard users.)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9299483" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/UAC/default.aspx">UAC</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>The Windows 7 UAC Slider, and What You Can Do on Windows Vista Today</title><link>http://blogs.msdn.com/cjacks/archive/2009/01/07/the-windows-7-uac-slider-and-what-you-can-do-on-windows-vista-today.aspx</link><pubDate>Wed, 07 Jan 2009 22:51:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9289713</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9289713.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9289713</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9289713</wfw:comment><description>&lt;p&gt;As I am focusing more and more on Windows 7, I find that blogging now begins with web searching, to make sure that what I’m talking about is already publicly disclosed and, as such, I’m not putting my job at risk. :-)&lt;/p&gt;  &lt;p&gt;I want to go into a bit of detail on UAC configuration, what’s changing in Windows 7, and what’s available today. Because, in my experience, there are a lot of people who don’t fully understand how to configure UAC as it exists in Windows Vista – probably because we haven’t spent enough time talking about it.&lt;/p&gt;  &lt;p&gt;PC Magazine (oh, how I’m going to miss the dead tree edition of that magazine) was kind enough to already show you what I want to talk about in it’s article here: &lt;a title="http://www.pcmag.com/article2/0,2817,2335122,00.asp" href="http://www.pcmag.com/article2/0,2817,2335122,00.asp"&gt;http://www.pcmag.com/article2/0,2817,2335122,00.asp&lt;/a&gt;. So, let’s have a second look at the new UI for UAC in Windows 7, as it exists today (this is not a commitment that it will never change, that it’s a good idea, or that you won’t experience premature hair loss from viewing the picture – all the regular disclaimers for pre-release software apply):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/cjacks/WindowsLiveWriter/9987ba5d5be6_A4B7/UAC%20Settings.jpg"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="UAC Settings" border="0" alt="UAC Settings" src="http://blogs.msdn.com/blogfiles/cjacks/WindowsLiveWriter/9987ba5d5be6_A4B7/UAC%20Settings_thumb.jpg" width="448" height="291" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now, my friend &lt;a href="http://crispincowan.com/" target="_blank"&gt;Crispin&lt;/a&gt; would prefer a different UI metaphor than a slider – he’d like to see a pair of pants – the further down you pull the slider, the further down your pants are while you’re computing. I actually think that’s a really good analogy. Let’s look at each of these settings, talk about what you can (and can’t) do on Windows Vista today, and then add some commentary on the consequences of making that choice.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Always Notify Me&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is UAC configured the way you get it on Windows Vista today. This one should be very familiar.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Notify me only when programs try to make changes to my computer&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This one is genuinely new for Windows 7, and essentially will auto-approve elevation when performing some actions to modify system state. I won’t get into the mechanics of exactly what we’re doing, because it’s neither final nor am I currently authoritative on all of the details behind the logic here. My goal here is to explain what you could do today, anyway.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Notify me only when programs try to make changes to my computer (do not dim my desktop)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Well, half of this (as discussed above) is new stuff, but the other half (the half in parentheses) is available for you on Windows Vista: not dimming the desktop. That’s something you can configure today. In group policy, under Windows Settings \ Security Settings \ Local Policies \ Security Options, you’ll find an entry called &lt;em&gt;User Account Control: Switch to the secure desktop when prompting for elevation&lt;/em&gt;. Change that policy to disabled, and you have that half of the configuration.&lt;/p&gt;  &lt;p&gt;Why do we default to switching to the secure desktop? Defense in depth. Message queues don’t have security descriptors. Of course, User Interface Privilege Isolation should help keep less trusted messages from getting to the approval dialog (consent.exe runs with System IL), but it’s even better to get to a separate desktop since the boundary of a window message is the desktop.&lt;/p&gt;  &lt;p&gt;You see, today Windows doesn’t have what some call “Authentic User Gestures” – the ability to differentiate between a real user clicking a mouse button which gets translated into a window message to click the button, and an application sending a window message to pretend that somebody clicked it. To the receiving application, they both look exactly the same. So we build up mechanisms like this. &lt;a href="http://blogs.technet.com/markrussinovich/archive/2007/02/12/638372.aspx" target="_blank"&gt;While elevation is not technically a security boundary&lt;/a&gt;, it should at least do a reasonably good job of looking after you.&lt;/p&gt;  &lt;p&gt;When do I see people configuring this policy? Well, there were some drivers early on that had a really hard time with the transition to the secure desktop (I haven’t seen this in a while). And otherwise, I see people configure this temporarily to make it easier to grab a screenshot of the dialog box. (Of course, if you want to make it look more realistic, you should change the theme to the basic theme first, since &lt;a href="http://blogs.msdn.com/cjacks/archive/2006/11/09/a-desktop-of-your-own.aspx" target="_blank"&gt;the secure desktop doesn’t have glass&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Never notify me&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is the off switch that you have in Windows Vista. This is bad for all the same reasons that it’s bad in Windows Vista.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;So, what’s really new is the “windows settings” categorization. But wait, there’s more! This slider still doesn’t expose two settings which are very interesting to know about!&lt;/p&gt;  &lt;p&gt;In the “Behavior of the elevation prompt for …” settings you have:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;(For local administrators) Elevate without prompting&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is the setting for people who never, ever want to see a prompt, but don’t want to lose out on the value of UAC. You keep things like Internet Explorer in Protected Mode, AXIS for your standard users, UAC file and registry virtualization, and all kinds of other useful stuff – and, oh yeah, the fact that the overwhelming majority of software testing is done in the default configuration (enabled). If you’re hell-bent on disabling UAC, could I talk you into giving this setting a try?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;(For standard users) Automatically deny elevation requests&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is the setting for people who disable UAC for their standard users because they don’t want them seeing a credential prompt, since their users won’t have credentials and, in the enterprise, that just means it’s going to cost more to run the helpdesk. You don’t have to disable UAC and lose all of its benefits, you just need to tweak this policy.&lt;/p&gt;  &lt;p&gt;Personally, I’d like to see an additional notch in the slider that uses these settings – leaving UAC on but getting rid of all notifications. Perhaps even hiding to “off” switch a bit, because in my travels, this is the setting that gives the best overall experience for people who hate prompts passionately. But alas, it’s not my decision to make.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;By the way, here is the e7 post on UAC: &lt;a title="http://blogs.msdn.com/e7/archive/2008/10/08/user-account-control.aspx" href="http://blogs.msdn.com/e7/archive/2008/10/08/user-account-control.aspx"&gt;http://blogs.msdn.com/e7/archive/2008/10/08/user-account-control.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9289713" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/UAC/default.aspx">UAC</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>What does the MoveIniToRegistry Shim Do?</title><link>http://blogs.msdn.com/cjacks/archive/2008/12/05/what-does-the-moveinitoregistry-shim-do.aspx</link><pubDate>Fri, 05 Dec 2008 23:11:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9180584</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9180584.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9180584</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9180584</wfw:comment><description>&lt;p&gt;I’m still catching up with requests to talk about stuff – here’s one that came in back in June (and just came again today from somebody else):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“MoveIniToRegistry clearly requires parameters, but there's no documentation defining what these are.&amp;#160; (Presumably this fix will apply an IniFileMapping?)”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I haven’t doc’d this shim yet, so here’s the quick and dirty docs on it.&lt;/p&gt;  &lt;p&gt;First of all, it doesn’t apply an IniFileMapping. That’d be kind of cool, but that’s something you’d want to do to an installer ideally, since you only need to do it once.&lt;/p&gt;  &lt;p&gt;Instead, it intercepts calls to CreateFileA, OpenFile, WriteFile, and CloseHandle. You feed the shim with the name of the files you’re going for, and it ensures that writes happen to both the original file AND to the registry location.&lt;/p&gt;  &lt;p&gt;That’s pretty important. The return value from the API is *not* changed by applying this shim. Rather, you still write to the original location, but you also write to a registry location.&lt;/p&gt;  &lt;p&gt;For an example, let’s look at &lt;strong&gt;Barbie Sticker Designer&lt;/strong&gt;. Now, this is a program I consider business critical, and I spend the majority of my working days using it. I find it to be a lot less stressful to use than Outlook. How is this shim configured? If we look at it using Compatibility Administrator, you can see the command line used:&lt;/p&gt;  &lt;p&gt;%windir%\System.ini * SCRNSAVE.EXE HKEY_CURRENT_USER “Control Panel\Desktop” SCRNSAVE.EXE REG_SZ&lt;/p&gt;  &lt;p&gt;The generic argument list is:&lt;/p&gt;  &lt;p&gt;IniFile [IniSection] IniKeyName RegBaseKey RegKeyPath RegValue RegValueType&lt;/p&gt;  &lt;p&gt;Hopefully that makes the purpose of this shim more clear. It’s still going to write to system.ini (and that writing will drive the return value of the API you are calling), but it’s also going to write the screensaver information to the registry, which is where the system actually looks these days. So, it’s not fixing a permissions issue, it’s fixing an implementation detail (we moved where screensaver configuration is). If we’ve moved something else from an INI to a registry key and don’t already have a fix for it, then you could use this to fix it up as well.&lt;/p&gt;  &lt;p&gt;If you were hoping for an easy way to apply an IniFileMapping, well, sorry about that. That’s the problem with these shims – they sometimes have these incredibly tempting sounding names, yet in the end what they actually solve isn’t always what you expected them to solve. I’m trying to get things documented in the order of what’s most useful to you, but keep calling things out to me because I may not always know, and we’ll find out!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9180584" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Shims/default.aspx">Shims</category></item><item><title>How to Set Directory Permissions at Install Time using an MSI Created Using Windows Installer XML (WIX)</title><link>http://blogs.msdn.com/cjacks/archive/2008/12/04/how-to-set-directory-permissions-at-install-time-using-an-msi-created-using-windows-installer-xml-wix.aspx</link><pubDate>Thu, 04 Dec 2008 23:03:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9176360</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9176360.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9176360</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9176360</wfw:comment><description>&lt;p&gt;Here is a topic I have been saying “I’ll get to it” for a while now…&lt;/p&gt;  &lt;p&gt;We’ve talked a lot about UAC here, and I have really stressed the point that standard users shouldn’t be able to affect other users or the machine itself, and if you want to violate that rule then you need to do so explicitly.&lt;/p&gt;  &lt;p&gt;The one area that I’ve received some questions on is what to do about shared user data. You should be using c:\programdata (not hard coded, of course!) to put your shared user data into, and then explicitly setting the ACL. You’ll need elevated permissions to set that ACL, so you should be doing so at install time.&lt;/p&gt;  &lt;p&gt;Now, here’s the part that makes people nuts (and rightly so!) – we then never bother to tell you how you can set that at install time! At best, we’ll give you some hints. Want to know something interesting? You’d probably be surprised at how many people don’t know how to do this themselves, but nonetheless will happily tell you that it’s what you ought to be doing.&lt;/p&gt;  &lt;p&gt;I think that’s kind of rude, so I figured I’d actually spend some time poking around so that when I tell you to do it, I could then answer the follow-up question of, “OK then, how?”.&lt;/p&gt;  &lt;p&gt;Of course, installers could be anything, and I don’t know all of the tools (not by a long shot). I’ve never been a packager. I had to pick something, though, so I picked what I thought was best – an MSI. If you’re writing arbitrary code (or a custom action) you can just use the Windows APIs directly to set up the security descriptor. But you actually get OK (note I didn’t say “great”, or even “good”) support from the Windows Installer framework.&lt;/p&gt;  &lt;p&gt;But how should I build the MSI? I prefer WIX. One comment talks about using the Visual Studio Setup and Deployment Project. I recommend you do not pass go and do not collect $200 until you install WIX instead. It’s not quite as simple, but it actually exposes the power of the platform instead of simplifying it by not letting you actually use the whole thing.&lt;/p&gt;  &lt;p&gt;So, here’s the XML I wrote for WIX to create a folder (which I have to do explicitly since I made an empty one) and set the ACL to allow the Everyone group full control of this folder:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;     &lt;br /&gt;&amp;lt;Wix xmlns=&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/wix/2006/wi&amp;quot;"&gt;&lt;font face="Courier New" size="1"&gt;http://schemas.microsoft.com/wix/2006/wi&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" size="1"&gt;&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;Product Id=&amp;quot;1cf0f45f-3a04-4878-becc-6f6b4331bfb6&amp;quot; Name=&amp;quot;InstallerDirectoryPermissions&amp;quot; Language=&amp;quot;1033&amp;quot; Version=&amp;quot;1.0.0.0&amp;quot; Manufacturer=&amp;quot;InstallerDirectoryPermissions&amp;quot; UpgradeCode=&amp;quot;f9a6c7b0-6ed9-4b46-9db1-653eeb568236&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Package InstallerVersion=&amp;quot;200&amp;quot; Compressed=&amp;quot;yes&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Directory Id=&amp;quot;TARGETDIR&amp;quot; Name=&amp;quot;SourceDir&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Directory Id=&amp;quot;CommonAppDataFolder&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Directory Id=&amp;quot;MySharedFolderId&amp;quot; Name=&amp;quot;MySharedFolder&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Component Id=&amp;quot;SharedFolderComponent&amp;quot; Guid=&amp;quot;84A264EF-2BC5-41e3-8124-2CA10C2805DB&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;CreateFolder Directory=&amp;quot;MySharedFolderId&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Permission User=&amp;quot;Everyone&amp;quot; GenericAll=&amp;quot;yes&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/CreateFolder&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Component&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Directory&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Directory&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Directory&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Feature Id=&amp;quot;FolderPermissions&amp;quot; Title=&amp;quot;InstallerDirectoryPermissions&amp;quot; Level=&amp;quot;1&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ComponentRef Id=&amp;quot;SharedFolderComponent&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Feature&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/Product&amp;gt;      &lt;br /&gt;&amp;lt;/Wix&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;If you compile this to create an MSI, and then edit it with Orca, you’ll see the entries in the Directory, CreateFolder, and LockPermissions tables that make all of this magic happen.&lt;/p&gt;  &lt;p&gt;Now, remember how I said that the support was just OK? Well, have a look at what we put into the Permissions entry (which ends up in the LockPermissions table) – it’s just plain English. Well, you’re the one responsible for localizing this. From the docs:&lt;/p&gt;  &lt;p&gt;“User - The column that identifies the localized name of the user for which permissions are to be set.”&lt;/p&gt;  &lt;p&gt;Why did I choose the Everyone group? Because it’s special cased: “The common user names ‘Everyone’ and ‘Administrators’ may be entered in English and are mapped to well-known SIDs.” (Please note: I don’t speak any other languages, so I don’t have any localized versions of Windows installed – feel free to correct me if you do and I have misinterpreted this!)&lt;/p&gt;  &lt;p&gt;But if you just wanted to target users, or domain users, or some other group, and you support multiple languages, you’ll want to do that work inside of a custom action (“A custom action is required to enter the localized name of any other user or group.”). Unless, of course, you already have that value in a property, such as the LogonUser property.&lt;/p&gt;  &lt;p&gt;Hopefully this helps you sort out how to do it, instead of us just telling you to “go look it up.” Because you probably have enough to do already.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9176360" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category></item><item><title>Shimming Applications on Windows Vista 64-Bit</title><link>http://blogs.msdn.com/cjacks/archive/2008/12/01/shimming-applications-on-windows-vista-64-bit.aspx</link><pubDate>Mon, 01 Dec 2008 19:47:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9160843</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9160843.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9160843</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9160843</wfw:comment><description>&lt;p&gt;The same question came up two times in 26 minutes (on the same discussion list, no less), so I figured I’d answer it once here as that seems a reasonable indicator that others may have the same question.&lt;/p&gt;  &lt;p&gt;What is the deal with shimming on Windows Vista 64-bit?&lt;/p&gt;  &lt;p&gt;Well, it turns out it’s a bit of a mixed story, so let’s go through it.&lt;/p&gt;  &lt;p&gt;First, Compatibility Administrator itself runs just fine on x64. It’s a 32-bit app, so it’s running on WOW64, but that’s OK. You can run the tool to create custom shim databases to run on either x86 or x64.&lt;/p&gt;  &lt;p&gt;Now, let’s talk about the shim engine. It’s installed on x64, and it supports shimming both 32-bit and 64-bit binaries. So far, so good.&lt;/p&gt;  &lt;p&gt;But once we start talking about the custom shim databases you can create today using Compatibility Administrator, the story is not complete today.&lt;/p&gt;  &lt;p&gt;You see, the custom shim databases you create (whether you create them on x86 or x64) will only shim 32-bit applications. So, while the platform supports shimming 64-bit applications, the tools don’t give you the ability to do so.&lt;/p&gt;  &lt;p&gt;So, if you have a native 64-bit application that isn’t working on Windows Vista, then you are unable to use shims today in order to mitigate the problems you discover.&lt;/p&gt;  &lt;p&gt;I haven’t come across any problems with native code doing this, but I have come across problems with managed code. There just isn’t much native code that is compiled for 64-bit (and what is available tends to be fairly recent). Managed code, however, defaults to compiling for “any CPU” – which means that the JIT compiler will compile native 64-bit code for managed code when it’s running on 64-bit. So, you can fix it on x86, but not on x64, even though the same app runs on both.&lt;/p&gt;  &lt;p&gt;Well, that’s not very cool. That just might discourage you from moving to x64 if you have a broken managed code application, eh?&lt;/p&gt;  &lt;p&gt;Well, there are two solutions for that. Obviously you could recompile the application and change the compiler flags to target 32-bit only (but if you’re doing that, you may as well fix the bugs!). If you can’t recompile, however, you’re not stuck. &lt;a href="http://msdn.microsoft.com/en-us/library/ms164699%28VS.80%29.aspx" target="_blank"&gt;Just use corflags.exe to set the 32BIT flag&lt;/a&gt;, and you’ll be on your way.&lt;/p&gt;  &lt;p&gt;By the way, if you really want to get under the covers, you can. The underlying cause is that the XML we generate doesn’t have the (optional) OS_PLATFORM attribute. Try it yourself – if you look in Process Monitor, you’ll see that compatadmin creates an XML file in appdata\local\temp. Of course, it deletes this file when it’s done, so you’ll want to catch it before we’re done with it – a quick glance at the stack tells you that you’ve got msxml3.dll in the stack when you’re creating this, so if you bm on msxml3!* and start stepping until the call to CloseFile, you can go into the temp directory and pull out the XML to see for yourself.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9160843" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/ACT+5.0/default.aspx">ACT 5.0</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Shims/default.aspx">Shims</category></item><item><title>Why don’t elevated applications receive environment variables set by non-elevated calling process?</title><link>http://blogs.msdn.com/cjacks/archive/2008/10/29/why-don-t-elevated-applications-receive-environment-variables-set-by-non-elevated-calling-process.aspx</link><pubDate>Wed, 29 Oct 2008 19:00:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9022478</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9022478.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9022478</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9022478</wfw:comment><description>&lt;p&gt;I had a conversation with a customer (via email) the other day, and I wanted to to into a bit of detail here explaining what is going on.&lt;/p&gt;  &lt;p&gt;Essentially, the customer was attempting to pass information to another application while launching it using environment variables, and it wasn’t working. Of course, it used to work, and it was confusing that it didn’t. Particularly since this failure seems to contradict the following statement directly from the SDK: “By default, a child process inherits a copy of the environment block of the parent process.”&lt;/p&gt;  &lt;p&gt;The launching process was not elevated, but the target process was.&lt;/p&gt;  &lt;p&gt;I recommended using command lines instead, but wanted to illustrate what is happening here. To see it for yourself, you can create the following two programs:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;elevation_launcher.cpp&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;#include &amp;lt;windows.h&amp;gt;     &lt;br /&gt;#include &amp;lt;shellapi.h&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; UNREFERENCED_PARAMETER(hInstance);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UNREFERENCED_PARAMETER(hPrevInstance);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UNREFERENCED_PARAMETER(lpCmdLine);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UNREFERENCED_PARAMETER(nShowCmd); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; // Configure the process to launch     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) };      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sei.lpFile = TEXT(&amp;quot;Elevation Target.exe&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sei.nShow = SW_SHOWNORMAL; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; // Attempt to pass data using environment variables     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SetEnvironmentVariable(TEXT(&amp;quot;FromParent&amp;quot;), TEXT(&amp;quot;Passed using environment variable&amp;quot;)); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; // Attempt to pass data using the command line     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TCHAR szCommandLine[] = TEXT(&amp;quot;\&amp;quot;Passed using command line\&amp;quot;&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sei.lpParameters = szCommandLine; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; // Launch the child app     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (!ShellExecuteEx(&amp;amp;sei)) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DWORD dwStatus = GetLastError();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // ... handle the error      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } else {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // ... handle the success      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return 0;      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;elevation_target.cpp&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;#include &amp;lt;windows.h&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; UNREFERENCED_PARAMETER(hInstance);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UNREFERENCED_PARAMETER(hPrevInstance);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UNREFERENCED_PARAMETER(lpCmdLine);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UNREFERENCED_PARAMETER(nShowCmd); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; // Retrieve and display the parameter passed using environment variables     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTSTR pszValue = NULL;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DWORD dwResult = GetEnvironmentVariable(TEXT(&amp;quot;FromParent&amp;quot;), pszValue, 0);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (dwResult != 0) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DWORD size = dwResult * sizeof(TCHAR);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pszValue = (PTSTR)malloc(size);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetEnvironmentVariable(TEXT(&amp;quot;FromParent&amp;quot;), pszValue, size);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MessageBox(NULL, pszValue, TEXT(&amp;quot;Environment Variable&amp;quot;), MB_OK | MB_ICONINFORMATION);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; free(pszValue);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } else {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MessageBox(NULL, TEXT(&amp;quot;The environment variable was not found&amp;quot;), TEXT(&amp;quot;Environment Variable&amp;quot;), MB_OK | MB_ICONERROR);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; // Retrieve and display the parameter passed using the command line     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int nNumArgs;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PWSTR *ppArgv = CommandLineToArgvW(GetCommandLine(), &amp;amp;nNumArgs);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (nNumArgs &amp;gt; 1) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MessageBox(NULL, ppArgv[1], TEXT(&amp;quot;Command Line&amp;quot;), MB_OK | MB_ICONINFORMATION);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } else {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MessageBox(NULL, TEXT(&amp;quot;The command line was not found&amp;quot;), TEXT(&amp;quot;Command Line&amp;quot;), MB_OK | MB_ICONERROR);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HeapFree(GetProcessHeap(), 0, ppArgv); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; return 0; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Now, if you manifest both files with an asInvoker reference, both pieces of data are sent to the child process – the environment variable, and the command line. However, if you manifest elevation_target as requireAdministrator, leaving elevation_launcher as asInvoker, you still get the command line, but you lose the environment variable.&lt;/p&gt;  &lt;p&gt;Huh?&lt;/p&gt;  &lt;p&gt;To understand what is going on, you have to understand that, when you elevate, the application, you aren’t actually the parent. Rather, the shell calls into the Application Information Service. This service calls consent.exe, which is what prompts for elevation. Assuming the request is approved, the service then uses the linked elevated token and calls CreateProcessAsUser using the linked token.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/cjacks/WindowsLiveWriter/5cb02db1dac7_93FB/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="275" alt="image" src="http://blogs.msdn.com/blogfiles/cjacks/WindowsLiveWriter/5cb02db1dac7_93FB/image_thumb.png" width="365" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So, the Application Information Service is the parent of the elevated process, not the process that called ShellExecute(Ex). And the elevated process inherits that environment block.&lt;/p&gt;  &lt;p&gt;Of course, it confuses things somewhat that we then reparent the process so it looks like the launching process is the actual parent if you look at the process tree using a tool such as Process Explorer.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9022478" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/UAC/default.aspx">UAC</category></item><item><title>Windows Application Compatibility Engagement</title><link>http://blogs.msdn.com/cjacks/archive/2008/10/21/windows-application-compatibility-engagement.aspx</link><pubDate>Wed, 22 Oct 2008 00:50:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9010414</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/9010414.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=9010414</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=9010414</wfw:comment><description>&lt;p&gt;I’m apparently going for a record, trying to see if I can spend the entire month of October jet-lagged. So far, so good (just got back from Singapore)…&lt;/p&gt;  &lt;p&gt;Anyway, I like free stuff &lt;strike&gt;as much as&lt;/strike&gt; far more than the next guy. So, I figured I’d pass this one along – an initiative sponsored by my friend Fumie:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows Application Compatibility Engagement (ACE)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Concerned about application compatibility but don’t know what it takes?&amp;#160; &lt;/p&gt;  &lt;p&gt;Do your critical applications seem incompatible with Vista?&lt;/p&gt;  &lt;p&gt;Sign up for ACE!&lt;/p&gt;  &lt;p&gt;The Application Compatibility Engagement (ACE) program is a 2-3 day fully funded (&lt;strong&gt;FREE&lt;/strong&gt;) on-site consultative engagement for customers who have 100+ PCs, who are considering Vista Deployment, and/or have issues with application compatibility.&amp;#160; One of Microsoft’s ACE partners will go to your site and conduct a full assessment and develop concrete steps toward remediating any incompatible applications.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Click&amp;#160; to the &lt;a href="http://www.microsoft.com/midsizebusiness/products/windowsvista/application-compatibility-engagement.aspx"&gt;Microsoft Application Compatibility Engagement Site&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Go immediately to Step 2 and fill out the form, &lt;strong&gt;&lt;em&gt;OR&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="mailto:usappcom@microsoft.com?subject=ACE%20inquiry"&gt;Email us&lt;/a&gt; with the following basic deployment information:&amp;#160; &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;company name&lt;/li&gt;      &lt;li&gt;contact name&lt;/li&gt;      &lt;li&gt;contact phone/email&lt;/li&gt;      &lt;li&gt;seats being deployed&lt;/li&gt;      &lt;li&gt;number of 3rd party apps&lt;/li&gt;      &lt;li&gt;number of in house apps&lt;/li&gt;      &lt;li&gt;the &lt;a href="http://download.microsoft.com/download/5/a/a/5aa544b0-e938-48d3-a2ab-6a7540e6387d/Getting%20Started%20with%20AppCompat%20FINAL.pdf"&gt;ACE Partner&lt;/a&gt; (see step 2) you’d like to work with (or we can pick one for you)&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;A Microsoft representative will contact you to discuss your needs.&lt;/li&gt;    &lt;li&gt;We’ll organize a conference call to discuss your environment, objectives, and assessment logistics, with the ACE partner, and set an assessment date.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Once you participate in ACE you would have an opportunity to participate in a Case Study and have it placed on microsoft.com.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9010414" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category></item><item><title>The Windows SDK Breaks the New TR1 Extensions in Visual Studio 2008 SP1 (Until you Repair It, That Is)</title><link>http://blogs.msdn.com/cjacks/archive/2008/10/01/the-windows-sdk-breaks-the-new-tr1-extensions-in-visual-studio-2008-sp1-until-you-repair-it-that-is.aspx</link><pubDate>Thu, 02 Oct 2008 01:21:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8972307</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/8972307.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=8972307</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=8972307</wfw:comment><description>&lt;p&gt;One of the main uses for my blog is to share those little annoyances that I spend hours or days solving and spare you the “fun” of going through this yourself. So, even though this isn’t really about application compatibility, which has kind of become the main theme here, it will still hopefully help save somebody some time (thanks to search engines).&lt;/p&gt;  &lt;p&gt;I recently picked up a new laptop (Lenovo T61p, FWIW) and got everything set up according to my typical usage scenarios. I was then going about building some code, and discovered that in the transition, several of my builds had broken.&lt;/p&gt;  &lt;p&gt;Weird, I thought. &lt;a href="http://blogs.msdn.com/vcblog/archive/2008/08/11/visual-studio-2008-service-pack-1-rtm-now-available.aspx" target="_blank"&gt;We recently moved some MFC updates and the addition of TR1 extensions to C++ from a separate feature pack into Visual Studio 2008 SP1&lt;/a&gt;. I was getting all of the MFC extension bits. I was missing some of the TR1 extension bits. I indexed all of the header files, and they just plain weren’t there. The shared_ptr class, for example, lived in zero header files on my hard drive.&lt;/p&gt;  &lt;p&gt;What happened?&lt;/p&gt;  &lt;p&gt;The fix, of course, is to just re-install Visual Studio 2008 SP1. But what broke it?&lt;/p&gt;  &lt;p&gt;It turns out that the Windows SDK lays down files not only in C:\Program Files\Microsoft SDKs\Windows\v6.1\Include, but takes the liberty of laying down (older) files in C:\Program Files\Microsoft Visual Studio 9.0\VC\include. Yep – it up and clobbered the SP1 header files and broke my builds.&lt;/p&gt;  &lt;p&gt;So, if you install the Windows Vista SP1 / Windows Server 2008 SDK, you may want to re-install VS2008 SP1 afterwards…&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8972307" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Miscellaneous/default.aspx">Miscellaneous</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category></item><item><title>CorrectFilePaths Has to Point to a Directory Which Exists</title><link>http://blogs.msdn.com/cjacks/archive/2008/09/30/correctfilepaths-has-to-point-to-a-directory-which-exists.aspx</link><pubDate>Wed, 01 Oct 2008 01:43:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8970829</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/8970829.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=8970829</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=8970829</wfw:comment><description>&lt;p&gt;A question came up via comments. (I was going to say that it came up recently, but another glance reveals that it came up in, oh, June. I don’t think I can fairly call that recent…)&lt;/p&gt;  &lt;p&gt;“…the fix seems only to work if the directory structure exists…”&lt;/p&gt;  &lt;p&gt;This is true, and worth noting. If you point the fix to a directory which doesn’t exist, the shim won’t create the directory, it will just fail, in much the same way the application would fail if it were trying to create an application in a directory which didn’t exist (which, to Windows, appears to be exactly what happened). So, if you’re planning to shim an application and want to create a directory to store things, you should consider creating this directory at install time.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8970829" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/ACT+5.0/default.aspx">ACT 5.0</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Shims/default.aspx">Shims</category></item><item><title>CompatAdmin How Do I Shim Thee? Let Me Count The Ways...</title><link>http://blogs.msdn.com/cjacks/archive/2008/09/10/compatadmin-how-do-i-shim-thee-let-me-count-the-ways.aspx</link><pubDate>Wed, 10 Sep 2008 21:13:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8941485</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/8941485.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=8941485</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=8941485</wfw:comment><description>&lt;p&gt;When you come across issues debugging applications, there are typically several ways to solve them. Today, I'm going to pick on our own stuff and throw a few different shims at it. Interestingly enough, what I'm going to be shimming up will be the tool I use to create shims: Compatibility Administrator. That's right - I'm going to shim up my shim tool.&lt;/p&gt;  &lt;p&gt;What's the bug?&lt;/p&gt;  &lt;p&gt;---------------------------   &lt;br /&gt;Compatibility Administrator    &lt;br /&gt;---------------------------    &lt;br /&gt;You do not have administrative rights. Some features might be disabled.    &lt;br /&gt;---------------------------    &lt;br /&gt;OK&amp;#160;&amp;#160; &lt;br /&gt;---------------------------&lt;/p&gt;  &lt;p&gt;Yeah - I don't enjoy warnings like that, and I certainly don't need them every time.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solution #1&lt;/strong&gt;: shim up CompatAdmin.exe with RunAsAdmin. That makes the MessageBox go away because it actually is an admin.&lt;/p&gt;  &lt;p&gt;What else could we do? Well, we could figure out which functionality need admin rights. Sitting there using the product non-elevated, I counted two broken features. First, I can't right click and disable a shim. Second, I can't install a shim database.&lt;/p&gt;  &lt;p&gt;I don't really need to disable things often, and it seemed to me that installing is something that could be factored out. In fact, a quick glance at Process Monitor tells me that installing a shim database &lt;strong&gt;already is&lt;/strong&gt; factored out! CompatAdmin.exe just calls sdbinst.exe. Is it calling it using CreateProcess (which would require ElevateCreateProcess) or ShellExecute(Ex)? ShellExecute. Nice. So, in theory the think I need to do actually should work just fine, except the software is stopping me from doing it!&lt;/p&gt;  &lt;p&gt;---------------------------   &lt;br /&gt;Compatibility Administrator    &lt;br /&gt;---------------------------    &lt;br /&gt;You need administrative rights to perform this operation.    &lt;br /&gt;---------------------------    &lt;br /&gt;OK&amp;#160;&amp;#160; &lt;br /&gt;---------------------------&lt;/p&gt;  &lt;p&gt;A big fat LUA Bug in our own stuff. It stops me from doing something that works because it doesn't believe it does. Nice work. Let's lie to it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solution #2:&lt;/strong&gt; shim up CompatAdmin.exe with ForceAdminAccess. The dialogs go away, and I can still do what I actually want to do - right click install works just fine, and prompts me when I do that. I then end up running less code elevated, and being more secure. I can read existing databases without elevations. What a huge win! (Well, except not being able to turn shims off, which may be interesting from time to time, but for the vast majority of what I do, this is a great solution.)&lt;/p&gt;  &lt;p&gt;Are we done yet, or is there another way to skin this problem?&lt;/p&gt;  &lt;p&gt;Well, these are messageboxes. We can suppress them one last way.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solution #3:&lt;/strong&gt; shim up CompatAdmin.exe with IgnoreMessageBox (parameter You do not have administrative rights. Some features might be disabled.,Compatibility Administrator). We'll get that to stop annoying me! It still shows the MessageBox when I try to install a database (which is not helpful) but if I suppress that one also, then it just does nothing and says nothing, which is arguably not a very good outcome. But at least it's a touch less chatty. I'll chalk this up as the worst solution.&lt;/p&gt;  &lt;p&gt;Personally, I've been using ForceAdminAccess lately. But I thought this was a fun app to show the options available, particularly since you need to shim CompatAdmin somehow to make it useful. (Yeah, I know - that's kind of ridiculous and we should fix it. The bug has been open for over a year - I just poked the team again.)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8941485" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/ACT+5.0/default.aspx">ACT 5.0</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Application+Compatibility/default.aspx">Application Compatibility</category><category domain="http://blogs.msdn.com/cjacks/archive/tags/Shims/default.aspx">Shims</category></item><item><title>10 Minute Demos of Windows Vista Deployment Topics</title><link>http://blogs.msdn.com/cjacks/archive/2008/09/09/10-minute-demos-of-windows-vista-deployment-topics.aspx</link><pubDate>Wed, 10 Sep 2008 05:11:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8938472</guid><dc:creator>Chris Jackson</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cjacks/comments/8938472.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cjacks/commentrss.aspx?PostID=8938472</wfw:commentRss><wfw:comment>http://blogs.msdn.com/cjacks/rsscomments.aspx?PostID=8938472</wfw:comment><description>&lt;p&gt;I haven't seen these pop up yet - if you're looking for a quick demo of several of the tools available to assist in a Windows Vista deployment, you may enjoy the following 10 minute demos:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.microsoft.com/download/D/6/9/D6943262-EF5A-4733-8247-9BF7A6FEF299/Application_Compatibility_Demo.wmv"&gt;http://download.microsoft.com/download/D/6/9/D6943262-EF5A-4733-8247-9BF7A6FEF299/Application_Compatibility_Demo.wmv&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.microsoft.com/download/D/6/9/D6943262-EF5A-4733-8247-9BF7A6FEF299/Assessing_Hardware_Readiness.wmv"&gt;http://download.microsoft.com/download/D/6/9/D6943262-EF5A-4733-8247-9BF7A6FEF299/Assessing_Hardware_Readiness.wmv&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.microsoft.com/download/D/6/9/D6943262-EF5A-4733-8247-9BF7A6FEF299/MDT_Install_and_Image_Creation.wmv"&gt;http://download.microsoft.com/download/D/6/9/D6943262-EF5A-4733-8247-9BF7A6FEF299/MDT_Install_and_Image_Creation.wmv&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.microsoft.com/download/D/6/9/D6943262-EF5A-4733-8247-9BF7A6FEF299/Migrating_User%20State.wmv"&gt;http://download.microsoft.com/download/D/6/9/D6943262-EF5A-4733-8247-9BF7A6FEF299/Migrating_User State.wmv&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.microsoft.com/download/D/6/9/D6943262-EF5A-4733-8247-9BF7A6FEF299/System_Center%20_Essentials.wmv"&gt;http://download.microsoft.com/download/D/6/9/D6943262-EF5A-4733-8247-9BF7A6FEF299/System_Center _Essentials.wmv&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8938472" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cjacks/archive/tags/Windows+Vista/default.aspx">Windows Vista</category></item></channel></rss>