<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Vista Compatibility Team Blog</title><subtitle type="html" /><id>http://blogs.msdn.com/vistacompatteam/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/vistacompatteam/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2007-02-07T22:39:04Z</updated><entry><title>Moved</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2008/06/18/moved.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2008/06/18/moved.aspx</id><published>2008-06-19T01:50:00Z</published><updated>2008-06-19T01:50:00Z</updated><content type="html">&lt;P&gt;As you might have noticed from the silence, we have moved on. Here are blogs for &lt;A class="" href="http://blogs.msdn.com/vineets" mce_href="http://blogs.msdn.com/vineets"&gt;Vineet&lt;/A&gt;, &lt;A class="" href="http://blogs.msdn.com/patricka" mce_href="http://blogs.msdn.com/patricka"&gt;Patrick&lt;/A&gt;, &lt;A class="" href="http://blogs.msdn.com/yvesdolc" mce_href="http://blogs.msdn.com/yvesdolc"&gt;Yves&lt;/A&gt; and &lt;A class="" href="http://blogs.msdn.com/maartenb" mce_href="http://blogs.msdn.com/maartenb"&gt;Maarten&lt;/A&gt;. We're working on &lt;A class="" href="http://msdn.microsoft.com/en-us/windowsvista/cc315067.aspx" mce_href="http://msdn.microsoft.com/en-us/windowsvista/cc315067.aspx"&gt;OEM Ready&lt;/A&gt; lately and have our hands full. &lt;/P&gt;
&lt;P&gt;For the original Vista AppCompat issues, you can keep going to &lt;A class="" href="http://blogs.msdn.com/cjacks" mce_href="http://blogs.msdn.com/cjacks"&gt;Chris&lt;/A&gt;' blog.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8618985" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Folding shirts</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/06/07/folding-shirts.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/06/07/folding-shirts.aspx</id><published>2007-06-07T23:57:16Z</published><updated>2007-06-07T23:57:16Z</updated><content type="html">&lt;p&gt;One of the nice things of being off-site with colleagues is that you learn interesting life enhancing tricks. &lt;a href="http://blogs.msdn.com/vishalsi/"&gt;Vishal&lt;/a&gt; taught me the &lt;a href="http://www.youtube.com/watch?v=gK1nGpvaHno"&gt;Ninja t-shirt&lt;/a&gt; technique. I will never fold a t-shirt the same way again. 
&lt;/p&gt;&lt;p&gt;Maarten&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3148324" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Let us Test and Debug Your Application </title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/06/05/let-us-test-and-debug-your-application.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/06/05/let-us-test-and-debug-your-application.aspx</id><published>2007-06-05T17:24:39Z</published><updated>2007-06-05T17:24:39Z</updated><content type="html">&lt;p&gt;If you happen to be at Teched (or you know someone who is) we have a room setup to test your application for Vista compatibility issues. You can bring your application and we can troubleshoot it for problems. We have the debug experts from &lt;a href="http://blogs.msdn.com/cjacks/"&gt;SWAT team&lt;/a&gt; and from &lt;a href="http://blogs.msdn.com/vishalsi/"&gt;Application Experience team&lt;/a&gt;. 
&lt;/p&gt;&lt;p&gt;We're in room S329. 
&lt;/p&gt;&lt;p&gt;Maarten
&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3098055" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Integrity Level and the ROT</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/06/04/integrity-level-and-the-rot.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/06/04/integrity-level-and-the-rot.aspx</id><published>2007-06-04T18:00:45Z</published><updated>2007-06-04T18:00:45Z</updated><content type="html">&lt;p&gt;Integrity Levels result in surprising behavior. The other day I was looking at an accessibility application. Since accessibility applications need to be able to access applications that are potentially running with a MIC level of high, there is a setting in the manifest specifically for this purpose called uiAccess=true. If your application has this setting it will get a filtered token and a high MIC level, where normally it would get a filtered token and a medium MIC level. 
&lt;/p&gt;&lt;p&gt;Enumerating the ROT from an admin application (high MIC unfiltered token) will give me this:
&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;E:\Code\Roguer\Roguer.sln
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;!DExplore.AppObj.8.0:5820
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;!{BA018599-1DB3-44F9-83B4-461454C84BF8} ProgID: VisualStudio.DTE.8.0
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;!{1B2EEDD6-C203-4D04-BD59-78906E3E8AAB} ProgID: VisualStudio.Solution.8.0
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;!{639F725F-1B2D-4831-A9FD-874847682010} ProgID: DExplore.AppObj.8.0
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;!VisualStudio.DTE.8.0:2644&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;Running it from a standard user token (filtered token, medium MIC) will give me
&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;!{000209FF-0000-0000-C000-000000000046} ProgID: Word.Application.12
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;Document6
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;Document4
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;!{0006F03A-0000-0000-C000-000000000046} ProgID: Outlook.Application.12
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;!{FB50E079-F904-4833-B7C0-309366351F3A}
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;C:\Program Files\Microsoft Office\Templates\1033\Blog.dotx
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;Document3
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family:Courier New"&gt;!{000209FE-0000-0000-C000-000000000046} ProgID: Word.Basic.9
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The list is completely different. And running it from a uiAccess=true application will give me:
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Correct. Nothing. ROT is partitioned by user token and then again by MIC level. No application has registered itself with a filtered token with high IL. 
&lt;/p&gt;&lt;p&gt;Consequence of this is that accessibility applications need to use an intermediate process with filtered-medium-MIC token to get access to Word or other applications that are registered in the ROT. 
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Maarten
&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3082263" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Signed Binaries in Non-trusted Locations</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/06/04/signed-binaries-in-non-trusted-locations.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/06/04/signed-binaries-in-non-trusted-locations.aspx</id><published>2007-06-04T17:31:00Z</published><updated>2007-06-04T17:31:00Z</updated><content type="html">&lt;P&gt;When you inadvertently copy the complete cmd.exe to your quick launch bar instead of creating a shortcut, you get some interesting behavior on launching it elevated. Instead of good old trusted elevation prompt, we get the untrusted version.&lt;/P&gt;
&lt;P&gt;Interesting. Surely the binary hasn't changed when copying it over? Let's check with sigcheck. Here is the original from system32: &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;C:\Windows\system32&amp;gt;sigcheck cmd.exe &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Sigcheck v1.4 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Copyright (C) 2004-2007 Mark Russinovich &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Sysinternals - www.sysinternals.com &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;C:\Windows\system32\cmd.exe: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Verified: Signed &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Signing date: 4:14 AM 11/2/2006 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Publisher: Microsoft Corporation &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Description: Windows Command Processor &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Product: Microsoft« Windows« Operating System &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Version: 6.0.6000.16386 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;File version: 6.0.6000.16386 (vista_rtm.061101-2205) &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;And the copied version: &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;C:\Windows\system32&amp;gt;sigcheck "C:\Users\maartenb\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\cmd.exe" &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Sigcheck v1.4 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Copyright (C) 2004-2007 Mark Russinovich &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Sysinternals - &lt;A href="http://www.sysinternals.com/"&gt;www.sysinternals.com&lt;/A&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;c:\users\maartenb\appdata\roaming\microsoft\internet explorer\quick launch\cmd.exe: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Verified: Signed &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Signing date: 4:14 AM 11/2/2006 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Publisher: Microsoft Corporation &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Description: Windows Command Processor &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Product: Microsoft« Windows« Operating System &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;Version: 6.0.6000.16386 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Courier New"&gt;File version: 6.0.6000.16386 (vista_rtm.061101-2205) &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Sure enough. Same version, same file, both signed by Microsoft. So something else must be going on. &lt;/P&gt;
&lt;P&gt;It turns out that Vista only shows the trusted consent dialog if the application is launched from a safe location, in this case System32. Due to the changed probing path (a command line application would first look for dlls in the application's directory), it would be trivial to load a rogue dll instead of a trusted version. The dialog doesn't mention this explicitly but the warning is certainly justified. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3081997" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Is my Process Virtualized or Redirected?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/05/01/is-my-process-virtualized-or-redirected.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/05/01/is-my-process-virtualized-or-redirected.aspx</id><published>2007-05-01T02:49:22Z</published><updated>2007-05-01T02:49:22Z</updated><content type="html">&lt;p&gt;In some scenarios it might be necessary to know whether a process is actually being redirected or not. A case in point is for example a library that is loaded and needs to know whether the host process and the library have an identical view of the virtualized world. You can use &lt;a href="http://msdn2.microsoft.com/en-us/library/aa446671.aspx"&gt;GetTokenInformation&lt;/a&gt; with TokenVirtualizationEnabled to find that out. 
&lt;/p&gt;&lt;p&gt;The same API with TokenElevation instead of TokenVirtualizationEnabled will give you whether you run with an elevated token or not. Note that this does not guarantee you are running as administrator. You might very well be Backup Operator or standard user with a couple of manually added privileges. 
&lt;/p&gt;&lt;p&gt;Maarten&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2346291" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Debugging LSASS</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/04/25/debugging-lsass.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/04/25/debugging-lsass.aspx</id><published>2007-04-25T22:15:28Z</published><updated>2007-04-25T22:15:28Z</updated><content type="html">&lt;p&gt;For some reason I had to debug LSASS (Local Security Authority Process) recently. Considering that LSASS is rather involved in the functioning of the system with respect to authorization checks, it is cumbersome to debug. The system deadlocks immediately. Try for example attaching to lsass.exe from WinDbg and click the start button when the debugger is paused. Yep. Nothing. 
&lt;/p&gt;&lt;p&gt;Consulting with one of our security developer support gurus lead to a quick workaround. Do it remotely. 
&lt;/p&gt;&lt;p&gt;1) The server (debuggee where LSASS needs to be debugged) is started with the following command: (No need to restart anything)
&lt;/p&gt;&lt;p&gt;dbgsrv -t tcp:port=1025 
&lt;/p&gt;&lt;p&gt;2) On the debugger, start WinDbg as a client with this command:
&lt;/p&gt;&lt;p&gt;Windbg -premote tcp:server=&amp;lt;servername&amp;gt;,port=1025 -p &amp;lt;lsass pid&amp;gt;
&lt;/p&gt;&lt;p&gt;Thanks Prab. 
&lt;/p&gt;&lt;p&gt;Maarten&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2275279" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Certification Freebie</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/04/23/certification-freebie.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/04/23/certification-freebie.aspx</id><published>2007-04-23T20:49:33Z</published><updated>2007-04-23T20:49:33Z</updated><content type="html">&lt;p&gt;I had mentioned in a previous &lt;a title="Vista Certification Testing Tools" href="http://blogs.msdn.com/vistacompatteam/archive/2007/04/06/vista-certification-testing-tools.aspx"&gt;post&lt;/a&gt;&amp;nbsp;about handy certification tools.&amp;nbsp; If that sparked your interest in getting your app certified, Microsoft is extending the offer for a &lt;a title="Free certified testing" href="http://microsoft.mrmpslc.com/InnovateOnWindowsVista/getstartedcert.aspx?LangType=1033#bottom"&gt;refund&lt;/a&gt;&amp;nbsp;for the cost of verification testing until the end of June.&amp;nbsp; You only get a refund if you pass - so, make sure your app meets the requirements of the test cases. ;-)&lt;/p&gt; &lt;p&gt;Pat&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2248419" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>GetCurrentProcess fails on Net 1.1 on Vista</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/04/18/getcurrentprocess-fails-on-net-1-1-on-vista.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/04/18/getcurrentprocess-fails-on-net-1-1-on-vista.aspx</id><published>2007-04-18T04:34:30Z</published><updated>2007-04-18T04:34:30Z</updated><content type="html">&lt;p&gt;This little snippet compiled with .Net 1.1: 
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;using System; &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;using System.Diagnostics; &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;class Program &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;{ &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    static void Main(string[] args) &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    { &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        try &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        { &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;            Process c = Process.GetCurrentProcess(); &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;            Process[] p = Process.GetProcessesByName(c.ProcessName); &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        } &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        catch (Exception e) &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        { &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;            Console.WriteLine(e.Message); &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        } &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    } &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;} &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;will fail on Vista as standard user and hence filtered admin with this error: 
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;{"Couldn't get process information from remote machine."} &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;Compiling it under 2.0 will get you passed it. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Maarten&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2167911" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>C2065: 'TOKEN_LINKED_TOKEN' : undeclared identifier</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/04/18/c2065-token-linked-token-undeclared-identifier.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/04/18/c2065-token-linked-token-undeclared-identifier.aspx</id><published>2007-04-18T04:15:10Z</published><updated>2007-04-18T04:15:10Z</updated><content type="html">&lt;p&gt;If you get    
&lt;/p&gt;&lt;p&gt;error C2065: 'TOKEN_LINKED_TOKEN' : undeclared identifier    
&lt;/p&gt;&lt;p&gt;when you try to compile a VC++ project that needs to get the linked token through GetTokenInformation, you need to get the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C2B1E300-F358-4523-B479-F53D234CDCCF&amp;amp;displaylang=en"&gt;Microsoft Windows SDK for Windows Vista&lt;/a&gt;. This is true for all the new Vista APIs of course. The SDK that shipped with Visual Studio is old and was built prior to Vista's existence. 
&lt;/p&gt;&lt;p&gt;You need to add the include, bin and lib directories of the platform SDK (default is C:\Program Files\Microsoft SDKs\Windows\v6.0) to Tools\Option\VC++ directories.
&lt;/p&gt;&lt;p&gt;Maarten
&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2167691" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>SetThreadPriority from Run key</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/04/12/setthreadpriority-from-run-key.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/04/12/setthreadpriority-from-run-key.aspx</id><published>2007-04-12T21:21:57Z</published><updated>2007-04-12T21:21:57Z</updated><content type="html">&lt;p&gt;If you add an application to the Run key in the registry (HKLM\Software\Microsoft\Windows\CurrentVersion\Run), you'll notice that its threads are kept at Normal priority. You can call SetThreadPriority all day long, but it won't make a difference: the priority of the thread is kept at Normal (to be precise, it is for about a minute or so after which the call to SetThreadPriority(THREAD_PRIORITY_HIGHEST ) will actually succeed in bumping up its priority level). 
&lt;/p&gt;&lt;p&gt;The upside is that Vista will be responsive quicker to start programs that are initiated by the user. Programs that added themselves to the Run key had a tendency to deem themselves more important than the competition and they would stumble over each other to initialize first. Since an application would be an automatic loser in the elbow race if it kept its priority at Normal, it appeared to start sluggish. By assisting all startup-at-logon applications to play fair, at least the end-user can have a responsive machine quicker.
&lt;/p&gt;&lt;p&gt;This also applies to applications added to the Startup folder. 
&lt;/p&gt;&lt;p&gt;Maarten&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2102453" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Vista Certification Testing Tools</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/04/06/vista-certification-testing-tools.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/04/06/vista-certification-testing-tools.aspx</id><published>2007-04-06T20:54:26Z</published><updated>2007-04-06T20:54:26Z</updated><content type="html">&lt;p&gt;In the lab we get a lot of questions about the Vista Certification logo program.&amp;nbsp; There are two different logos you can get for your product:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Works With Windows Vista&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This one is easy to get and &lt;u&gt;everyone&lt;/u&gt; is recommended to go for this logo.&amp;nbsp;&amp;nbsp;Your app needs to pass the 30 minute compatibility check defined in the &lt;a title="Application Compatiblity Cookbook" href="http://msdn2.microsoft.com/en-us/library/aa480152.aspx#appcomp_topic2"&gt;Application Compatiblity Cookbook&lt;/a&gt;.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Certified For Windows Vista&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This one requires you to make sure your app passes all the test cases defined for the program and then get your app tested at a testing authority for verification.&amp;nbsp; Even if you are not planning on getting the full certification, we recommend you check out the test cases.&lt;/p&gt; &lt;p&gt;For both programs, you can get all the details at &lt;a href="http://www.innovateonvista.com"&gt;http://www.innovateonvista.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Getting back to the point of this post...&amp;nbsp; The test cases mention testing tools that are needed.&amp;nbsp; There is a download that bundles up most of the tools and can be downloaded in a single&amp;nbsp;&lt;a title="Logo Testing Tools" href="http://download.microsoft.com/download/d/2/5/d2522ce4-a441-459d-8302-be8f3321823c/LogoToolsv1.0.msi"&gt;Logo Testing Tools&lt;/a&gt; package.&amp;nbsp; There are some handy tools in the package that let you test your app with Restart Manager and inject AV's to test Windows Error Reporting (WER).&lt;/p&gt; &lt;p&gt;Pat&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2041145" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Very informative UAC blog post from Mark Russinovich</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/02/15/very-informative-uac-blog-post-from-mark-russinovich.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/02/15/very-informative-uac-blog-post-from-mark-russinovich.aspx</id><published>2007-02-16T00:14:00Z</published><updated>2007-02-16T00:14:00Z</updated><content type="html">&lt;P&gt;In his blog post "PsExec, User Account Control and Security Boundaries" Mark Russinovich&amp;nbsp;shares some insight&amp;nbsp;on the capabilities of UAC in Vista...&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Arial size=2&gt;..."&lt;/FONT&gt;It should be clear then, that neither UAC elevations nor Protected Mode IE define new Windows security boundaries. Microsoft has been communicating this but I want to make sure that the point is clearly heard."...&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/markrussinovich/archive/2007/02/12/638372.aspx"&gt;http://blogs.technet.com/markrussinovich/archive/2007/02/12/638372.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1685822" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Internet Explorer caches settings</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/02/07/internet-explorer-caches-settings.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/02/07/internet-explorer-caches-settings.aspx</id><published>2007-02-08T02:07:21Z</published><updated>2007-02-08T02:07:21Z</updated><content type="html">&lt;p&gt;In the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/IETechCol/dnwebgen/ProtectedMode.asp"&gt;LoRIE doc for developers&lt;/a&gt;, it is mentioned that you can register your application as a broker with Internet Explorer by adding entries to:
&lt;/p&gt;&lt;p&gt;    HKLM\SOFTWARE\Microsoft\Internet Explorer\Low Rights\ElevationPolicy
&lt;/p&gt;&lt;p&gt;Unfortunately IE doesn't pick those up until IEUser.exe is restarted. You can use &lt;a href="http://msdn2.microsoft.com/en-gb/library/aa373654.aspx"&gt;RestartManager&lt;/a&gt; APIs to cycle both IE and IEUser. Below is a code sample that shows how to accomplish this. Note that for demonstration purposes hardcoded paths are used and error handling is not as robust as it should be. 
&lt;/p&gt;&lt;p&gt;This will obviously work for other settings that are cached as well. 
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    DWORD dwVal = ERROR_SUCCESS;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    DWORD dwSessionHandle = (DWORD)-1;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    WCHAR wszSessionKey[CCH_RM_SESSION_KEY+1];
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    UINT nProcInfo = 100;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    UINT nProcInfoNeeded;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    DWORD lpdwRebootReason = 0;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    //for demo purposes, hardcoded paths are used. 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    DWORD nFiles = 2;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    LPWSTR rgsFiles[] = { L"c:\\program files\\internet explorer\\iexplore.exe",
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;                          L"c:\\program files\\internet explorer\\ieuser.exe" };
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    RM_PROCESS_INFO *rgProcs = new RM_PROCESS_INFO[nProcInfo];
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (NULL == rgProcs)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    {
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        dwVal = ERROR_NOT_ENOUGH_MEMORY;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    }
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Starting Session
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmStartSession(&amp;amp;dwSessionHandle, 0, wszSessionKey);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Register items
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmRegisterResources(dwSessionHandle, nFiles, (LPCWSTR*) rgsFiles,
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;                                0, NULL, 0, NULL);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Getting affected apps
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmGetList(dwSessionHandle, &amp;amp;nProcInfoNeeded, &amp;amp;nProcInfo,
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;                      rgProcs, &amp;amp;lpdwRebootReason);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Apply filter to shutdown iexplore processes only
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmAddFilter(dwSessionHandle, (LPCWSTR) rgsFiles[1],
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;                        NULL, NULL, RmNoShutdown);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Shutdown iexplore processes
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmShutdown(dwSessionHandle, 0, NULL);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Remove previous filter &amp;amp; apply filter to shutdown ieuser only
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmRemoveFilter(dwSessionHandle, (LPCWSTR) rgsFiles[1], NULL, NULL);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmAddFilter(dwSessionHandle, (LPCWSTR) rgsFiles[0],
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;                        NULL, NULL, RmNoShutdown);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Shutdown ieuser process
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmShutdown(dwSessionHandle, 0, NULL);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Remove filter applied to ieuser process
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmRemoveFilter(dwSessionHandle, (LPCWSTR) rgsFiles[0], NULL, NULL);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Apply filter to restart ieuser process only
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmAddFilter(dwSessionHandle, (LPCWSTR) rgsFiles[0],
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;                        NULL, NULL, RmNoRestart);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Restart ieuser
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmRestart(dwSessionHandle, NULL, NULL);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Remove previous filter &amp;amp; add filter to restart iexplore only
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmRemoveFilter(dwSessionHandle, (LPCWSTR) rgsFiles[0], NULL, NULL);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmAddFilter(dwSessionHandle, (LPCWSTR) rgsFiles[1],
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;                        NULL, NULL, RmNoRestart);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Restart iexplore
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    dwVal = RmRestart(dwSessionHandle, NULL, NULL);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (ERROR_SUCCESS != dwVal)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        goto RM_END;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;RM_END:
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (NULL != rgProcs)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        delete [] rgProcs;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    // Clean up session
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    if (-1 != dwSessionHandle)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        RmEndSession(dwSessionHandle);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;    return dwVal;
&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Maarten&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1622453" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author></entry><entry><title>Creating System DSNs on Vista</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/vistacompatteam/archive/2007/02/07/creating-system-dsns-on-vista.aspx" /><id>http://blogs.msdn.com/vistacompatteam/archive/2007/02/07/creating-system-dsns-on-vista.aspx</id><published>2007-02-08T01:39:04Z</published><updated>2007-02-08T01:39:04Z</updated><content type="html">&lt;p&gt;As stated in the &lt;a href="http://msdn2.microsoft.com/fr-fr/library/aa965884.aspx"&gt;MSDN article&lt;/a&gt; that all Keys under HKLM\Software are virtualized, there is still the HKLM\Software\ODBC\ODBC.INI key (For creating System DSNs) that will &lt;span style="text-decoration:underline"&gt;NOT&lt;/span&gt; be virtualized.
&lt;/p&gt;&lt;p&gt;The rationale behind this was that – Creating a System DSN would essentially be a task of an Administrator and so when you write to this location as a Standard User you will get an exception as the Registry entry is marked for no virtualization
&lt;/p&gt;&lt;p&gt;To view these settings, in the Command prompt type in 
&lt;/p&gt;&lt;p&gt;REG FLAGS HKLM\Software\ODBC\ODBC.INI
&lt;/p&gt;&lt;p&gt;And this will output -&amp;gt;
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;
			&lt;span style="color:red"&gt;REG_KEY_DONT_VIRTUALIZE: SET
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        REG_KEY_DONT_SILENT_FAIL: SET
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New"&gt;        REG_KEY_RECURSE_FLAG: SET
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Vineet&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1622328" width="1" height="1"&gt;</content><author><name>VistaCompatTeam</name><uri>http://blogs.msdn.com/members/VistaCompatTeam.aspx</uri></author><category term="Vista application compatibility XP port" scheme="http://blogs.msdn.com/vistacompatteam/archive/tags/Vista+application+compatibility+XP+port/default.aspx" /></entry></feed>