<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/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>All Your Base Are Belong To Us : Windows7</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx</link><description>Tags: Windows7</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Restart Windows and Restart All Registered Applications: shutdown -g</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2011/08/14/restart-windows-and-restart-all-registered-applications-shutdown-g.aspx</link><pubDate>Sun, 14 Aug 2011 20:19:06 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:884236</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=884236</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2011/08/14/restart-windows-and-restart-all-registered-applications-shutdown-g.aspx#comments</comments><description>&lt;p&gt;The Windows Restart Manager (introduced in Windows Vista) supports gracefully shutting down and restarting applications that registered for restart with the &lt;a href="http://msdn.microsoft.com/en-us/library/aa373347(v=vs.85).aspx"&gt;RegisterApplicationRestart&lt;/a&gt; API.&lt;/p&gt;  &lt;p&gt;This functionality is used by Windows Update – thanks to the Restart Manager, when I come yawning to my desktop PC in the morning, even following a system restart, I have my Outlook, browser windows, OneNote, Visual Studio, and Messenger all lined up as they were when I went to bed.&lt;/p&gt;  &lt;p&gt;Suppose you want to initiate one of these “automagically restart everything after restart” restarts. As of a few weeks ago, I had it in my head that you have to write a small app that uses the Restart Manager APIs (e.g. &lt;a href="http://msdn.microsoft.com/en-us/library/aa373649(v=vs.85).aspx"&gt;RmStartSession&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/aa373667(v=vs.85).aspx"&gt;RmShutdown&lt;/a&gt;) to do this.&lt;/p&gt;  &lt;p&gt;And then it hit me that the &lt;strong&gt;shutdown&lt;/strong&gt; command must have support for doing this. And indeed, it has:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;shutdown /g&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=884236" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category></item><item><title>Debugging Windows Service Startup with Service Isolation</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2011/05/10/debugging-windows-service-startup-with-service-isolation.aspx</link><pubDate>Tue, 10 May 2011 21:12:44 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:834311</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=834311</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2011/05/10/debugging-windows-service-startup-with-service-isolation.aspx#comments</comments><description>&lt;p&gt;A year and a half ago I touched on the subject of &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/10/28/attach-a-debugger-when-a-process-starts.aspx"&gt;debugging process startup&lt;/a&gt;, such as the startup of Windows Services, using the GFlags utility (the ImageFileExecutionOptions registry key).&lt;/p&gt;  &lt;p&gt;The general idea is to rely on the Windows loader to launch a debugger instead of the debugged process, and trace your way through the process startup code. Unfortunately, this relies on the debugged process to run in the same session as you—otherwise, you won’t be able to actually see the debugger.&lt;/p&gt;  &lt;p&gt;Starting from Windows Vista, Windows &lt;a href="http://msdn.microsoft.com/en-us/library/bb756986.aspx"&gt;services are isolated&lt;/a&gt; into a separate session to which you do not have access when you are logged onto the system. The debugger is launched within this session as well, which produces the undesired result of having the service stuck waiting for the debugger, and the debugger stuck waiting for your input which you cannot provide. (To learn more about Session 0 Isolation, check out the trusty &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1c333f06-fadb-4d93-9c80-402621c600e7&amp;amp;displaylang=en"&gt;Windows 7 Training Kit&lt;/a&gt; which covers several application compatibility topics with detailed code examples.)&lt;/p&gt;  &lt;p&gt;What can you do to debug service startup on Windows Vista or newer OS versions? All you need is to fire a remote debugging server that debugs the service, and connect to its debugging session from a debugging client. Assuming that your Debugging Tools for Windows installation resides in &lt;em&gt;C:\Debuggers&lt;/em&gt;, you can configure the following as the &lt;em&gt;Debugger &lt;/em&gt;string in GFlags:&lt;/p&gt;  &lt;p&gt;&lt;font face="CONSOLAS"&gt;C:\Debuggers\ntsd.exe -server tcp:port=10000 -noio&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;When you start the service, you will notice an &lt;em&gt;ntsd.exe&lt;/em&gt; instance launch in session 0; you’ll need to connect to the debugging session quickly by launching WinDbg (or NTSD), choosing File | Connect to Remote Session, and providing &lt;em&gt;tcp:port=10000&lt;/em&gt; as the transport. (Note that when debugging service startup, you might want to &lt;a href="http://kbalertz.com/Feedback.aspx?kbNumber=922918"&gt;increase the service startup timeout&lt;/a&gt; to prevent the SCM from giving up on your service. Unfortunately, this is a global setting; another option is to &lt;a href="http://msdn.microsoft.com/en-us/library/ms685996(v=vs.85).aspx"&gt;request additional time&lt;/a&gt; from code.)&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=834311" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Server2008/default.aspx">Server2008</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Server2008R2/default.aspx">Server2008R2</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/WindowsServices/default.aspx">WindowsServices</category></item><item><title>What Did My Manifest Do: A Referral Was Returned from the Server</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2010/09/02/what-did-my-manifest-do-a-referral-was-returned-from-the-server.aspx</link><pubDate>Thu, 02 Sep 2010 20:43:45 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:698020</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=698020</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2010/09/02/what-did-my-manifest-do-a-referral-was-returned-from-the-server.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/bb756929.aspx"&gt;UAC section of an application’s manifest&lt;/a&gt; contains two simple settings under the &amp;lt;requestedExecutionLevel&amp;gt; element of the &amp;lt;requestedPrivileges&amp;gt; node:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;level&lt;/em&gt; – asInvoker, requireAdministrator, or highestAvailable. This setting controls whether the application will require elevation before it runs.&lt;/li&gt;    &lt;li&gt;&lt;em&gt;uiAccess&lt;/em&gt; – true or false. This setting determines whether the application will exempt from &lt;a href="http://msdn.microsoft.com/en-us/library/bb625963.aspx"&gt;UIPI rules&lt;/a&gt; introduced as part of the Windows Integrity Mechanism.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you really need the &lt;em&gt;uiAccess&lt;/em&gt; element (and you should be really convinced that you understand why you need it before proceeding), then your application &lt;strong&gt;must&lt;/strong&gt; be signed, and by default, &lt;strong&gt;must&lt;/strong&gt; reside in one of the secure locations, namely \Program Files, \Windows\system32, or \Program Files (x86).&lt;/p&gt;  &lt;p&gt;This latter setting can be changed through group policy (see the screenshot below), but there’s no way to circumvent the certificate verification.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_7875B526.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_59FB4E70.png" width="666" height="336" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If your application doesn’t comply with these requirements but the manifest still contains the &lt;em&gt;uiAccess=true&lt;/em&gt; setting, your process will fail to launch with the cryptic “A referral was returned from the server” error message:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_13DA6B90.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_63D01A0E.png" width="406" height="179" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This isn’t the friendliest way of saying that there’s something wrong with your UAC manifest setting, but that’s why I’m writing this post.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=698020" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Security/default.aspx">Security</category></item><item><title>Windows 7 How-To Videos: Libraries and Federated Search</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2010/04/14/windows-7-how-to-videos-libraries-and-federated-search.aspx</link><pubDate>Wed, 14 Apr 2010 16:35:44 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:581175</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=581175</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2010/04/14/windows-7-how-to-videos-libraries-and-federated-search.aspx#comments</comments><description>&lt;p&gt;More Windows 7 videos that I recorded have been posted on Channel 9. This installment deals with Windows 7 shell libraries and Federated Search, a subject that I haven’t covered in depth on my blog. The videos feature an &lt;a href="http://channel9.msdn.com/posts/yochay/Introduction-to-Windows-7-Libraries/"&gt;introduction to shell libraries&lt;/a&gt; and demonstrate how to &lt;a href="http://channel9.msdn.com/posts/yochay/Integrating-with-Shell-Libraries-Part-1/"&gt;integrate your application&lt;/a&gt; with Windows 7 libraries from managed and native code, how to &lt;a href="http://channel9.msdn.com/posts/yochay/Integrating-with-Shell-Libraries-Part-2/"&gt;register for library change notifications&lt;/a&gt; (if you care about changes to library contents), and how to use &lt;a href="http://channel9.msdn.com/posts/yochay/Federated-Search/"&gt;Federated Search&lt;/a&gt; to integrate your search provider into Windows Explorer.&lt;/p&gt;  &lt;p&gt;[I don’t remember if I told you this in my &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2010/03/28/windows-7-how-to-videos-windows-7-taskbar.aspx"&gt;last post&lt;/a&gt;, but all videos have an accompanying code download which is the precise version of the code that I used when recording these videos.]&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Introduction-to-Windows-7-Libraries/"&gt;Introduction to Windows 7 Libraries&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/5/6/0/2/4/5/Win7Libraries1Introduction_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/5/6/0/2/4/5/Win7Libraries1Introduction_512_ch9.png, postid=542065" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Integrating-with-Shell-Libraries-Part-1/"&gt;Integrating with Shell Libraries, Part 1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/6/6/0/2/4/5/Win7Libraries2IntegratingWithLibrariesPart1_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/6/6/0/2/4/5/Win7Libraries2IntegratingWithLibrariesPart1_512_ch9.png, postid=542066" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Integrating-with-Shell-Libraries-Part-2/"&gt;Integrating with Shell Libraries, Part 2&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/7/6/0/2/4/5/Win7LibrariesSHellLibraryPart2_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/7/6/0/2/4/5/Win7LibrariesSHellLibraryPart2_512_ch9.png, postid=542067" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Federated-Search/"&gt;Federated Search&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/9/6/0/2/4/5/Win7Libraries2FederatedSearch_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/9/6/0/2/4/5/Win7Libraries2FederatedSearch_512_ch9.png, postid=542069" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;&lt;/p&gt;  &lt;p&gt;Stay tuned for more! :-)&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=581175" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Screencasts/default.aspx">Screencasts</category></item><item><title>Windows 7 How-To Videos: Windows 7 Taskbar</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2010/03/28/windows-7-how-to-videos-windows-7-taskbar.aspx</link><pubDate>Sun, 28 Mar 2010 19:23:26 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:564526</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=564526</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2010/03/28/windows-7-how-to-videos-windows-7-taskbar.aspx#comments</comments><description>&lt;p&gt;Rather than make an &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2010/03/28/windows-7-how-to-videos-introduction-to-the-windows-7-taskbar.aspx"&gt;HTML index of the videos&lt;/a&gt;, I figured it would be more convenient for my visitors to watch the videos directly from here, thanks to the Channel 9 embedding capabilities (and Silverlight).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar--Working-with-Application-ID/"&gt;Introduction and Application ID&lt;/a&gt;&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/7/5/3/0/3/5/TaskbarNative01Screencast_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/7/5/3/0/3/5/TaskbarNative01Screencast_512_ch9.png, postid=530357" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar--Using-the-Taskbar-Button-Overlay-Icons-and-Progress-Bars/"&gt;Overlay Icons and Progress Bars&lt;/a&gt;&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/8/5/3/0/3/5/TaskbarNative02Screencast_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/8/5/3/0/3/5/TaskbarNative02Screencast_512_ch9.png, postid=530358" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar-Jump-Lists-Part-1/"&gt;Jump Lists Part 1&lt;/a&gt;&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/9/5/3/0/3/5/TaskbarNative03Screencast_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/9/5/3/0/3/5/TaskbarNative03Screencast_512_ch9.png, postid=530359" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar--Jump-Lists-Part-2/"&gt;Jump Lists Part 2&lt;/a&gt;&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/0/6/3/0/3/5/TaskbarNative04Screencast_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/0/6/3/0/3/5/TaskbarNative04Screencast_512_ch9.png, postid=530360" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar--Custom-Previews-and-Thumbnail-Clips/"&gt;Custom Previews and Thumbnail Clips&lt;/a&gt;&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/1/6/3/0/3/5/TaskbarNative05Screencast_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/1/6/3/0/3/5/TaskbarNative05Screencast_512_ch9.png, postid=530361" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar--Tabbed-Thumbnails/"&gt;Tabbed Thumbnails&lt;/a&gt;&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/2/6/3/0/3/5/TaskbarNative06Screencast_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/2/6/3/0/3/5/TaskbarNative06Screencast_512_ch9.png, postid=530362" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;When more videos are posted, I will create new posts that will have them embedded.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=564526" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Screencasts/default.aspx">Screencasts</category></item><item><title>Windows 7 How-To Videos: Introduction to the Windows 7 Taskbar</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2010/03/28/windows-7-how-to-videos-introduction-to-the-windows-7-taskbar.aspx</link><pubDate>Sun, 28 Mar 2010 19:17:19 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:564512</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=564512</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2010/03/28/windows-7-how-to-videos-introduction-to-the-windows-7-taskbar.aspx#comments</comments><description>&lt;p&gt;As part of our work on the Windows 7 training materials, I recorded 23 short how-to videos explaining how to use the new Windows 7 features from managed code (often using the &lt;a&gt;Windows API Code Pack&lt;/a&gt;) and from native code. Our Sela team, including &lt;a href="http://blogs.microsoft.co.il/blogs/alon"&gt;Alon&lt;/a&gt;, Dima, &lt;a href="http://blogs.microsoft.co.il/blogs/arik"&gt;Arik&lt;/a&gt;, and many others, collaborated on the slide decks, demo code, and other aspects of these recordings.&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/7/5/3/0/3/5/TaskbarNative01Screencast_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/7/5/3/0/3/5/TaskbarNative01Screencast_512_ch9.png, postid=530357" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration:none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none;" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;The first installment of these videos is already &lt;a href="http://channel9.msdn.com/windows/programming/"&gt;live on Channel 9&lt;/a&gt;—you can download or watch online six videos about the Windows 7 taskbar. As you might remember, the Windows 7 taskbar is one of my favorite new APIs in Windows 7, and I’ve covered it extensively in a series of posts, in an &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd942846.aspx"&gt;MSDN Magazine article&lt;/a&gt;, and in our book, &lt;a href="http://www.amazon.com/Introducing-Windows-Developers-Yochay-Kiriaty/dp/0735626820"&gt;Introducing Windows 7 for Developers&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Amongst the upcoming videos you’ll find an in-depth look at background services and trigger-start services; Libraries and Federated Search; an introduction to Ribbon development; and a series of videos on instrumentation (ETW, WMI, the Troubleshooting Platform, and other topics).&lt;/p&gt;  &lt;p&gt;Here’s an index of the videos you can watch right now on Channel 9:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar--Working-with-Application-ID/"&gt;Introduction and Working with Application ID&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar--Using-the-Taskbar-Button-Overlay-Icons-and-Progress-Bars/"&gt;Overlay Icons and Progress Bars&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar-Jump-Lists-Part-1/"&gt;Jump Lists Part 1&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar--Jump-Lists-Part-2/"&gt;Jump Lists Part 2&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar--Custom-Previews-and-Thumbnail-Clips/"&gt;Custom Previews and Thumbnail Clips&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/yochay/Programming-the-Windows-7-Taskbar--Tabbed-Thumbnails/"&gt;Tabbed Thumbnails&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And here’s an index of my posts about the Windows 7 taskbar:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/01/25/welcome-to-the-windows-7-taskbar.aspx"&gt;Welcome to the Windows 7 Taskbar&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/02/12/windows-7-taskbar-apis.aspx"&gt;Introduction to the APIs&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/02/15/windows-7-taskbar-application-id.aspx"&gt;Application ID&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/02/16/windows-7-taskbar-overlay-icons-and-progress-bars.aspx"&gt;Overlay Icons and Progress Bars&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/02/20/windows-7-taskbar-jump-lists.aspx"&gt;Jump Lists&lt;/a&gt;       &lt;ul&gt;       &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/02/23/windows-7-taskbar-user-tasks.aspx"&gt;User Tasks&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/02/24/windows-7-taskbar-custom-destinations.aspx"&gt;Custom Destinations&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/02/26/windows-7-taskbar-thumbnail-toolbars.aspx"&gt;Thumbnail Toolbars&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/03/06/windows-7-taskbar-thumbnail-clip-and-custom-previews.aspx"&gt;Thumbnail Clip and Custom Previews&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/03/20/windows-7-taskbar-window-switchers-and-previews-in-depth.aspx"&gt;Window Switchers and Previews in Depth&lt;/a&gt;       &lt;ul&gt;       &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/08/12/windows-7-taskbar-tabbed-thumbnails-and-previews-in-native-code.aspx"&gt;Tabbed Thumbnails and Previews in Native Code&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/09/07/c-wrapper-for-windows-7-taskbar-tabbed-thumbnails.aspx"&gt;C++ Wrapper for Tabbed Thumbnails&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/06/16/windows-7-taskbar-some-beta-to-rc-changes.aspx"&gt;Beta to RC Changes&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=564512" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Screencasts/default.aspx">Screencasts</category></item><item><title>PDC 2009 Day 3: Developing Applications for Scale-Up Servers Running Windows Server 2008 R2</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/19/pdc-2009-day-3-developing-applications-for-scale-up-servers-running-windows-server-2008-r2.aspx</link><pubDate>Fri, 20 Nov 2009 02:01:50 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:447972</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=447972</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/19/pdc-2009-day-3-developing-applications-for-scale-up-servers-running-windows-server-2008-r2.aspx#comments</comments><description>&lt;p&gt;Pedro Teixeira is going to talk about processes and threads in systems with more than 64 logical processors as well as user-mode scheduling.&lt;/p&gt;  &lt;p&gt;Surprisingly for some people, NUMA is not an esoteric hardware architecture. Even high-end gaming rigs today are NUMA; Pedro is going to use a loaned machine by HP that has 256 processors with 1TB of physical memory.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" border="0" src="http://1.bp.blogspot.com/_9vgJ1nwu_xA/SWjchJiaUoI/AAAAAAAAAjY/0X3a2hVAfEM/s400/256lcore.jpg" width="454" height="370" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Processor Groups&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Adding support for more than 64 logical processors required a breaking app compat change, because CPU masks were represented in Windows by a bitmask. Therefore, CPUs are now addressed by &lt;a href="http://msdn.microsoft.com/en-us/library/dd405503(VS.85).aspx"&gt;64-processor groups&lt;/a&gt; and there’s a need for new APIs that interact with these groups. Currently there’s a maximum of four groups, but this is an artificial limitation. (Processor groups are only available on 64-bit platforms.)&lt;/p&gt;  &lt;p&gt;Groups are distributed by proximity – all logical processors in a core (hyper-threading), all cores in a socket, closer sockets on the board, NUMA nodes, and closer NUMA nodes. This guarantees that within one CPU group the computational resources are as close as possible.&lt;/p&gt;  &lt;p&gt;Windows actually &lt;em&gt;tests &lt;/em&gt;the distances between NUMA nodes in spite of what the hardware reports, to determine the true proximity metric for processor groups.&lt;/p&gt;  &lt;p&gt;Each thread can belong only to one CPU group. Threads can be assigned to groups using &lt;em&gt;CreateRemoteThreadEx &lt;/em&gt;with a special thread initialization attribute, or using &lt;em&gt;SetThreadGroupAffinity&lt;/em&gt;.&amp;#160; Processes are assigned to groups in round-robin, and the threads inherit the group from the parent thread and from their process.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NUMA and Proximity Information&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are also &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/07/25/net-support-for-more-than-64-processors.aspx"&gt;new APIs&lt;/a&gt; that can be used to extract the system topology information with relationships between cores, NUMA nodes, and so forth. As part of this topology, information about memory technology and device location are also exposed – e.g. physical devices and network storage connected to a NUMA node directly. (So it’s not just about memory anymore, and it’s not surprising considering DMA must be performed from these devices. NUEA – non-uniform everything access :-))&lt;/p&gt;  &lt;p&gt;Future hardware allows for load-balancing of NUMA nodes within the same box – e.g. by having two NICs with the same IP address, connected to separate NUMA nodes, that can use sophisticated rules for load-balancing of requests to the nodes. More new APIs allow extracting the NUMA node information from a socket or a file handle, and more.&lt;/p&gt;  &lt;p&gt;[None of the demos worked during the presentation because the network connection to the monster HP machine was very flaky. Hopefully we’ll be able to get the demos after the talk.]&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;User-Mode Scheduling&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;UMS enables developers to write their own implementation of scheduling in user-mode, without going into the kernel, including synchronization primitives (which ConcRT implements). If one thread happens to use a kernel synchronization primitive, the user-mode scheduler still gets a chance to reschedule another task on that thread.&lt;/p&gt;  &lt;p&gt;UMS is nothing like &lt;a href="http://msdn.microsoft.com/en-us/library/ms682402(VS.85).aspx"&gt;fibers&lt;/a&gt; – fibers allow for switching between contexts, but threads are much more than that (e.g. impersonation information), and UMS allows you to switch threads and not just contexts.&lt;/p&gt;  &lt;p&gt;UMS is about &lt;em&gt;splitting threads &lt;/em&gt;into a user part and a kernel part so that they can be switched separately (lazily switched). In user-mode, it’s possible to switch back and forth the user part of the thread (registers, stack and meta-information) without going into the kernel, running on the “wrong” kernel thread because the kernel information is not required as long as the thread runs in user-mode. When going into the kernel, UMS makes sure that the thread parts match (a thread switch).&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;margin:0px 10px 0px 0px;display:inline;border-top:0px;border-right:0px;" border="0" align="left" src="http://channel9.msdn.com/Link/b6c7f7bf-b793-4cfe-b19d-25e45e997877/?default=content" width="182" height="137" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;In UMS there is a &lt;em&gt;scheduler thread&lt;/em&gt; to represent each core, and you would usually create one scheduler thread per core – these decide which thread to run next. When creating a user scheduler, you provide a callback function that is called when necessary (a “message loop”). The scheduler decides what to do next by executing a worker thread – from a kernel perspective, these are full threads, not fibers. The worker threads are pushed by the kernel into a queue called the UMS completion list. (You can have as many UMS completion lists as you’d like – each UMS scheduler can create a completion list or share them, and so forth.)&lt;/p&gt;  &lt;p&gt;The first thing the scheduler should do is pop worker threads from the UMS completion list and put them in its own ready list, perform scheduling and executes the worker thread.&lt;/p&gt;  &lt;p&gt;A UMS thread can yield the processor, passing control to the scheduler. Yielding is a means for implementing arbitrary synchronization mechanisms in user-mode (e.g. an event wait in a library could mean storing away some contextual wait information and then yielding – the scheduler will be responsible for not scheduling the thread until the wait condition occurs).&lt;/p&gt;  &lt;p&gt;When a worker thread performs a kernel call and blocks, the scheduler thread is again called with a notification that the thread was blocked. It can select another UMS thread and run it. (It’s the same yield as in the previous paragraph, but a kernel yield and not a user yield.) When the worker thread unblocks, it’s put in the UMS completion list and the scheduler is now responsible to look at the UMS completion list when it’s next invoked and move the threads from there to its private ready list.&lt;/p&gt;  &lt;p&gt;If there’s no work in the ready list: The function for popping from the UMS completion list can block (with a timeout parameter), and you can also obtain an event that will be signaled when there’s something in the UMS completion list. This enables the scheduler to wait for work to be scheduled. However: Never return from the scheduler function!!! (When you return from the scheduler function, you’re back to the normal thread that you converted to the scheduler thread.)&lt;/p&gt;  &lt;p&gt;There’s no support for preemption at the moment, so it’s impossible to implement a quantum-style scheduler. It’s possible to implement something like this using a watchdog thread that would call &lt;em&gt;SuspendThread &lt;/em&gt;– that blocks and puts the thread in the UMS completion list.&lt;/p&gt;  &lt;p&gt;[All in all, UMS is a very interesting mechanism. Alon and I agreed to write a sample together that shows off the basic features of UMS. Hopefully we’ll be able to publish it soon.]&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=447972" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/ParallelFX/default.aspx">ParallelFX</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Server2008R2/default.aspx">Server2008R2</category></item><item><title>PDC 2009 Day 2: Developing with the Windows API Code Pack for Microsoft .NET Framework</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/19/pdc-2009-day-2-developing-with-the-windows-api-code-pack-for-microsoft-net-framework.aspx</link><pubDate>Thu, 19 Nov 2009 08:11:50 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:447699</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=447699</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/19/pdc-2009-day-2-developing-with-the-windows-api-code-pack-for-microsoft-net-framework.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/yochay/"&gt;Yochay&lt;/a&gt;, a good friend and co-author of &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/16/introducing-windows-7-for-developers.aspx"&gt;“Introducing Windows 7 for Developers”&lt;/a&gt; and of the &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd942846.aspx"&gt;“Windows 7 Taskbar APIs” MSDN Magazine article&lt;/a&gt;, is delivering a presentation on the &lt;a href="http://code.msdn.microsoft.com/WindowsAPICodePack"&gt;Windows API Code Pack&lt;/a&gt;. (Which is a library of managed APIs to interact with Vista and Windows 7 features that are otherwise accessible only from native code through COM and Win32 APIs.)&lt;/p&gt;  &lt;p&gt;This library replaces many of the sample managed integration libraries that our team at &lt;a href="http://www.selagroup.com/"&gt;Sela&lt;/a&gt; developed for the Windows 7 Metro Training, such as the &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/02/12/windows-7-taskbar-apis.aspx"&gt;Taskbar integration library&lt;/a&gt;, the Sensor and Location integration library, and many others. It’s great to see these technologies converging into an almost-supported library, and especially great to see some of them emerge in .NET 4.0 (Location, taskbar, multitouch and other features).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_19E06AA1.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_5D67F5F6.png" width="533" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Yochay announced the latest version of the Windows API Code Pack – &lt;a href="http://windowsteamblog.com/blogs/developers/archive/2009/11/18/new-windows-api-code-pack-version.aspx"&gt;version 1.0.1&lt;/a&gt;, which mainly offers bug fixes and performance improvements, as well as many new demos.&lt;/p&gt;  &lt;p&gt;Next, he demonstrated an application called Fishbowl which is the WPF version of the Facebook Silverlight application featured in &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/18/pdc-2009-day-2-keynote-scott-guthrie.aspx"&gt;Scott Guthrie’s keynote&lt;/a&gt; earlier today. It’s a full client application, so it can take advantage of the new Windows 7 features. It has a jump list with the latest notifications when the app is open or some launch tasks when the app is closed, and a thumbnail toolbar. Another example of an application taking advantage of Windows 7 is the Amazon Kindle for PC and it has a smart jump list with recent books and some tasks, as well as proper multitouch support.&lt;/p&gt;  &lt;p&gt;Then, Yochay shows the &lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode45KickingButtOnWindows7AndWindowsXP.aspx"&gt;XP to Windows 7 reference application called “PhotoView”&lt;/a&gt; which we at Sela developed. It’s an application that demos all the features of Vista and Windows 7 and still supports Windows XP with a smart plugin architecture. Yochay showed sensor integration in the app, which responds to ambient light changes by changing the color intensity of the picture displayed.&lt;/p&gt;  &lt;p&gt;Throughout the session, Yochay proceeds to show us lots of code from the Windows API Code Pack itself as well as various demos that ship with it or that were built during the past few months.&lt;/p&gt;  &lt;p&gt;If you’re not writing Windows 7 applications today, you should start thinking about giving yourself a competitive advantage. If you’re not using the &lt;a href="http://code.msdn.microsoft.com/WindowsAPICodePack"&gt;Windows API Code Pack&lt;/a&gt;, go ahead and download it today, and use the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=1C333F06-FADB-4D93-9C80-402621C600E7"&gt;Windows 7 Training Kit&lt;/a&gt; to bring yourself up to par with all its features.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=447699" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category></item><item><title>Introducing Windows 7 for Developers: Foreword by Mark Russinovich</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/18/introducing-windows-7-for-developers-foreword-by-mark-russinovich.aspx</link><pubDate>Wed, 18 Nov 2009 10:50:11 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:447294</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=447294</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/18/introducing-windows-7-for-developers-foreword-by-mark-russinovich.aspx#comments</comments><description>&lt;p&gt;Before &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/18/pdc-2009-day-1-windows-7-and-windows-server-2008-r2-kernel-changes.aspx"&gt;Mark’s session today&lt;/a&gt; at the PDC, I exhibited typical Israeli chutzpah while he was helping himself for some coffee, and introduced myself as one of the co-authors of &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/16/introducing-windows-7-for-developers.aspx"&gt;Introducing Windows 7 for Developers&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Mark did us the honor of writing the book’s foreword, and he even found it useful for the &lt;a href="http://technet.microsoft.com/en-us/sysinternals/ee656415.aspx"&gt;Disk2vhd Sysinternals utility&lt;/a&gt; which creates a virtual machine hard disk from your existing physical disk – the latest release of the utility shows the operation’s progress using the &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/02/16/windows-7-taskbar-overlay-icons-and-progress-bars.aspx"&gt;Windows 7 taskbar’s capability to show a progress bar&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In Mark’s own words:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;For a programming book to be worth reading in this day of instant access to online documentation and code samples, it must provide complete and coherent introductions and overviews to new concepts as well as clearly explained and straightforward code samples that are easy to reuse. Yochay, Sasha, Laurence, and Alon have delivered both in this book that’s sure to become your Windows 7 programming companion whether you program to .NET or Win32 API. I’ve started adding Windows 7 functionality to the Sysinternals tools and the description and example of how to exploit the taskbar icon’s progress display enabled me to enhance the Sysinternals Disk2Vhd tool literally in a matter of minutes. I know I’ll be turning to this as I continue to update the tools, and I’m confident you will too, as you strive to give your applications that extra edge.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Thanks Mark!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=447294" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Win7Book/default.aspx">Win7Book</category></item><item><title>PDC 2009 Day 1: Windows 7 and Windows Server 2008 R2 Kernel Changes</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/18/pdc-2009-day-1-windows-7-and-windows-server-2008-r2-kernel-changes.aspx</link><pubDate>Wed, 18 Nov 2009 05:03:56 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:447089</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=447089</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/18/pdc-2009-day-1-windows-7-and-windows-server-2008-r2-kernel-changes.aspx#comments</comments><description>&lt;p&gt;It’s not the first time that I hear &lt;a href="http://blogs.technet.com/markrussinovich/"&gt;Mark Russinovich&lt;/a&gt;’s session on the Windows 7 and Windows Server 2008 R2 kernel changes.&lt;/p&gt;  &lt;p&gt;Eran Stiller wrote a &lt;a href="http://beta.blogs.microsoft.co.il/blogs/stiller/archive/2009/11/17/windows-7-kernel-changes.aspx"&gt;good post summarizing the main kernel changes&lt;/a&gt; (based on the materials from the Windows 7 Bootcamp at the PDC pre-conference day), so I’m not going to repeat the same here.&lt;/p&gt;  &lt;p&gt;Additionally, you can watch Mark &lt;a href="http://channel9.msdn.com/shows/Going+Deep/Mark-Russinovich-Inside-Windows-7/"&gt;talk about Windows 7 internal changes on Channel 9&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_5B987630.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_11011289.png" width="387" height="298" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Among the biggest kernel changes are optimizations that have to do with scaling Windows to hundreds of processors, such as eliminating the dispatcher (scheduler) lock, the PFN database lock and other exciting changes to mechanisms described in great detail in the &lt;a href="http://www.microsoft.com/mspress/books/12069.aspx"&gt;Windows Internals&lt;/a&gt; book.&lt;/p&gt;  &lt;p&gt;If you’re interested in a complementary point of view on user-mode changes and new features relevant to Windows 7 developers, go ahead and read &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/16/introducing-windows-7-for-developers.aspx"&gt;Introducing Windows 7 for Developers&lt;/a&gt; :-)&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=447089" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Server2008R2/default.aspx">Server2008R2</category></item><item><title>Introducing Windows 7 for Developers</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/16/introducing-windows-7-for-developers.aspx</link><pubDate>Tue, 17 Nov 2009 01:16:47 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:446270</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=446270</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/11/16/introducing-windows-7-for-developers.aspx#comments</comments><description>&lt;p&gt;Our book, “&lt;a href="http://www.amazon.com/Introducing-Windows%C2%AE-Developers-Yochay-Kiriaty/dp/0735626820"&gt;Introducing Windows 7 for Developers&lt;/a&gt;”, is now in stock on Amazon!&lt;/p&gt;  &lt;p&gt;Several months ago, &lt;a href="http://blogs.microsoft.co.il/blogs/alon"&gt;Alon Fliess&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/yochay/"&gt;Yochay Kiriaty&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/webnext/"&gt;Laurence Moroney&lt;/a&gt; and I decided to write a Windows 7 book for developers. With the abundance of new features in Windows 7 and the great interest from the developer community, we just had to write a book about Windows 7 from a developer perspective :-)&lt;/p&gt;  &lt;p&gt;&lt;img src="http://ecx.images-amazon.com/images/I/51NYPPotbdL._SS500_.jpg" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;I’m at the &lt;a href="http://www.microsoftpdc.com"&gt;PDC&lt;/a&gt; right now, and I already had an opportunity to sign a couple of Yochay’s copies—it feels amazing to finally see the result of the several months’ effort it took to write it. Although there are four co-authors to the book, it wouldn’t have been possible without the amazing support of our colleagues and managers, with special thanks to David Bassa and Dima Zurbalev; and it wouldn’t have been possible without our amazing technical reviewer, &lt;a href="http://cnasarre.spaces.live.com/default.aspx?wa=wsignin1.0&amp;amp;sa=970447655"&gt;Christophe Nasarre&lt;/a&gt;, and the Microsoft Press editorial team.&lt;/p&gt;  &lt;p&gt;Among the features covered by the book you’ll find multitouch, the new Windows 7 taskbar, libraries, the Ribbon UI framework, Sensor and Location, and many others. We tried to make the book as practical as possible with lots of inline code and stand-alone code samples that demonstrate the features from managed and native code. Our managed samples primarily use the &lt;a href="http://code.msdn.microsoft.com/WindowsAPICodePack"&gt;Windows API Code Pack&lt;/a&gt;, but as you probably know by now, some features like multitouch, taskbar support and Sensor and Location are going to be part of .NET 4.0 and WPF 4.0.&lt;/p&gt;  &lt;p&gt;If you get a copy of the book and have any comments or thoughts, please feel to &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/contact.aspx"&gt;contact me directly&lt;/a&gt; and let me know what you think. And if you’re at the PDC, feel free to drop by and say hello!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=446270" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Win7Book/default.aspx">Win7Book</category></item><item><title>C++ Wrapper for Windows 7 Taskbar Tabbed Thumbnails</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/09/07/c-wrapper-for-windows-7-taskbar-tabbed-thumbnails.aspx</link><pubDate>Tue, 08 Sep 2009 03:24:18 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:399235</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=399235</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/09/07/c-wrapper-for-windows-7-taskbar-tabbed-thumbnails.aspx#comments</comments><description>&lt;p&gt;A few weeks ago &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/08/12/windows-7-taskbar-tabbed-thumbnails-and-previews-in-native-code.aspx"&gt;we took a detailed look at the intrinsic details of providing Windows 7 taskbar tab thumbnails and live previews in a Win32 application&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;As part of that post I mentioned a C++ wrapper called &lt;em&gt;TabWindow&lt;/em&gt; which takes care of most of the nasty details and leaves only the work of creating the tab controls and rendering them to the application developer.&lt;/p&gt;  &lt;p&gt;Here’s the public API of the &lt;em&gt;TabWindow&lt;/em&gt; class and its corresponding &lt;em&gt;TabWindowEventsSink&lt;/em&gt; callback interface (slightly edited to fit):&lt;/p&gt;   &lt;div style="font-family:consolas;background:white;color:black;font-size:11pt;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;class&lt;/span&gt; TabWindow&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;:&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; TabWindow(HWND wnd, HWND parent, LPCWSTR name, SIZE_T index);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; ~TabWindow();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SetThumbnail(HBITMAP hbm, &lt;span style="color:blue;"&gt;bool&lt;/span&gt; invalidate = &lt;span style="color:blue;"&gt;true&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SetPreview(HBITMAP hbm, &lt;span style="color:blue;"&gt;bool&lt;/span&gt; invalidate = &lt;span style="color:blue;"&gt;true&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SetOffset(POINT offset);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;void&lt;/span&gt; InvalidatePreviews();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SetEventsSink(TabWindowEventsSink* sink);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; HWND Hwnd() &lt;span style="color:blue;"&gt;const&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; _proxy; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; HWND HwndTarget() &lt;span style="color:blue;"&gt;const&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; _target; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; LPCWSTR Name() &lt;span style="color:blue;"&gt;const&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; _name; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; SIZE_T Index() &lt;span style="color:blue;"&gt;const&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; _index; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SetIndex(SIZE_T index) { _index = index; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;static&lt;/span&gt; ATOM RegisterClass();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; EnableCustomPreviews(HWND hwnd);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; DisableCustomPreviews(HWND hwnd);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SetTaskbarListPtr(ITaskbarList3* pTaskbar);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;};&lt;/p&gt; &lt;/div&gt;   &lt;div style="font-family:consolas;background:white;color:black;font-size:11pt;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;class&lt;/span&gt; TabWindowEventsSink&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;:&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;virtual&lt;/span&gt; HBITMAP OnSendPreview(HWND hwnd) = 0;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;virtual&lt;/span&gt; HBITMAP OnSendThumbnail(HWND hwnd, &lt;span style="color:blue;"&gt;int&lt;/span&gt; w, &lt;span style="color:blue;"&gt;int&lt;/span&gt; h) = 0;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;virtual&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; OnActivateTab(TabWindow* pTab) = 0;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;virtual&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; OnDestroyTab(TabWindow* pTab) = 0;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;};&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;The use of this class is fairly straightforward. The UI controller of your application is responsible for the creation of tab windows that correspond to individual tab controls (or possibly a completely different UI paradigm).&lt;/p&gt;  &lt;p&gt;On initialization, the UI controller should pass the &lt;em&gt;ITaskbarList3&lt;/em&gt; pointer to the static &lt;em&gt;SetTaskbarListPtr&lt;/em&gt; method and call the static &lt;em&gt;RegisterClass&lt;/em&gt; method. When a new tab window is created, an associated &lt;em&gt;TabWindow&lt;/em&gt; instance should be created and associated with an index (for book-keeping purposes). Next, your UI controller should derive from the &lt;em&gt;TabWindowEventsSink&lt;/em&gt; abstract class and implement its pure virtual methods—the first two provide the window thumbnail and live preview, and the former two react to the user activating or closing the tab from the taskbar.&lt;/p&gt;  &lt;p&gt;A picture is worth a thousand words and a complete sample is probably worth even more, so I simplified the HOL solution from the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1c333f06-fadb-4d93-9c80-402621c600e7&amp;amp;displaylang=en"&gt;Windows 7 Training Kit&lt;/a&gt; to demonstrate the &lt;em&gt;TabWindow&lt;/em&gt; class for thumbnail and preview management. The resulting application looks like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_34BC77DF.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_193775DC.png" width="532" height="361" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;…and has the following taskbar preview:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_7E1EA6CD.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_3A86F5AB.png" width="533" height="182" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;All the obvious commands work—you can activate a tab from the taskbar and it will activate the appropriate tab in the application, you can close a tab from the taskbar, and so on.&lt;/p&gt;  &lt;p&gt;The sample solution can be downloaded from &lt;a href="http://cid-c7124ef4202f9ed5.skydrive.live.com/self.aspx/Public/Win7TaskbarTabbedThumbnails/Win7TaskbarTabbedThumbnails.zip"&gt;here&lt;/a&gt;. Have fun!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=399235" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category></item><item><title>Creating a Custom Windows 7 Troubleshooting Pack</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/09/05/creating-a-custom-windows-7-troubleshooting-pack.aspx</link><pubDate>Sat, 05 Sep 2009 22:52:17 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:397317</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=397317</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/09/05/creating-a-custom-windows-7-troubleshooting-pack.aspx#comments</comments><description>&lt;p&gt;Windows 7 offers a built-in troubleshooting platform that consolidates the typical user’s support and troubleshooting needs into a single consistent user interface with dozens of specific troubleshooters for common problems.&lt;/p&gt;  &lt;p&gt;If you haven’t seen the Troubleshooting Platform in action yet, go ahead and type “troubleshooting” into your Windows 7 start menu and open the Troubleshooting control panel applet.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_5184A9A3.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_73AC8F5C.png" width="493" height="421" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can try some of the troubleshooters now. I’ll wait here. One of the easiest ones to repro and use is the “Check for performance issues” troubleshooter. Go ahead and change your power plan to the “Power Saver” plan and run the troubleshooter (while on AC power). The troubleshooter will attempt to detect performance problems for a few seconds, and then it will tell you that you’re using a power plan that can decrease your system’s optimal performance, and even offer to automatically fix the problem by moving you back to the “Balanced” power plan.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_3014DE3A.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_189A2A09.png" width="493" height="377" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The first thing I thought about when I saw this platform in action was: How can I write a troubleshooter myself? How can I use the same consistent user interface to offer users of my software a self-support mechanism? (…And if you currently have any support costs at all for your own software, you must be asking yourself the same questions.)&lt;/p&gt;  &lt;p&gt;Fortunately, writing a troubleshooting pack is fairly easy. There’s a neat tool that ships with the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&amp;amp;displaylang=en"&gt;Windows 7 SDK&lt;/a&gt; called the Troubleshooting Pack Designer. You’ll find it in your SDK root under the Bin\TSPDesigner folder.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_4F27D54D.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_21C63F7D.png" width="495" height="278" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;What I’m going to do in this short blog post is show you how to create a simple troubleshooting pack that will troubleshoot a very simple problem—if there is no folder named Temp in the C:\ root drive, it will create that folder automatically. You can imagine how this can be useful for legacy applications that disregard UAC and create folders all over the place.&lt;/p&gt;  &lt;p&gt;To begin, I’ll click the new project icon and choose a location for the troubleshooting pack that I’m creating.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_181DD147.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_04243EB1.png" width="500" height="167" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next, there are all kinds of details to fill in, including the project name, description and privacy URL for the troubleshooter users. Next, we need to add a root cause, which is a general title for the thing that the troubleshooting pack can detect. Again we need to fill in some details.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_33FEE072.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_60E41D80.png" width="505" height="288" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now it’s time to define the troubleshooter. Again there are some questions to answer first—the troubleshooter might or might not require elevation and might or might not require user interaction. My troubleshooter doesn’t require any of these.&lt;/p&gt;  &lt;p&gt;Now we’re going to create a resolver—that’s the part of the troubleshooting pack that actually solves the problem. Again we need to give it a name and a description, and answer a few questions—does the resolver have any adverse side effects, does it have to run elevated, does it need any user interaction.&lt;/p&gt;  &lt;p&gt;Finally, we have to define a verifier script—that’s the part that makes sure the problem is gone. In this case, we can reuse the troubleshooter script, so that’s what I’m telling the designer to do.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_05290203.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_6FEAD68D.png" width="500" height="285" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now that I’ve defined all the parts of the troubleshooting pack, I need to write the actual code that detects, resolves and verifies the problem. That is done by using the “Edit Root Cause Scripts” link on the left. This opens the PowerShell IDE that ships in Windows 7. The language of choice for the Windows Troubleshooting Platform is PowerShell 2.0, which means that you can easily integrate your existing troubleshooting scripts using the standard .NET facilities or interop mechanisms.&lt;/p&gt;  &lt;p&gt;In the troubleshooter script, I’m going to do a very simple check for the existence of the C:\Temp directory (the same script can be reused by the verifier part of the pack because it doesn’t have any side effects). Here’s the code:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;$RootCauseID = &amp;quot;NoTempDirectory&amp;quot;     &lt;br /&gt;$RootCauseDetected = -not [System.IO.Directory]::Exists(&amp;quot;C:\\Temp&amp;quot;)      &lt;br /&gt;update-diagrootcause -id $RootCauseId -detected $RootCauseDetected&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Now let’s move on to the resolver script. Here we’re going to create the C:\Temp directory, nothing more. Here’s the code:&lt;/p&gt;  &lt;p&gt;&lt;font face="CONSOLAS"&gt;[System.IO.Directory]::CreateDirectory(&amp;quot;C:\\Temp&amp;quot;)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;That’s all there’s to it—we now have a troubleshooting pack that is ready for action! One minor thing remaining is to actually sign the troubleshooting pack and then distribute it to your clients, but you can test-run the thing from the designer by clicking the green “Play” button, and voila:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_267881D2.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_363816D6.png" width="505" height="385" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you look at the output\cab folder under the troubleshooting pack’s root directory (which I chose when creating the project), you’ll find a stand-alone .cab file ready for use.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/sasha/image_6F024AD6.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/sasha/image_thumb_354F8B1F.png" width="505" height="202" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Double-clicking that file brings us to the troubleshooting pack wizard, first step.&lt;/p&gt;  &lt;p&gt;This post was just a brief overview of how easy it is to create a troubleshooting pack. It didn’t feature any sophisticated user interaction (and there are quite a few built-in interactions in the Troubleshooting Platform), so we basically only scratched the surface of this subject.&lt;/p&gt;  &lt;p&gt;If there will be interest (and time) I will write more about troubleshooting packs, but in the meantime I suggest that you take a look at the Troubleshooting Pack Designer and learn how to write troubleshooting packs for your own software.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=397317" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category></item><item><title>Windows 7 Taskbar: Tabbed Thumbnails and Previews in Native Code</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/08/12/windows-7-taskbar-tabbed-thumbnails-and-previews-in-native-code.aspx</link><pubDate>Thu, 13 Aug 2009 02:43:45 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:378248</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=378248</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/08/12/windows-7-taskbar-tabbed-thumbnails-and-previews-in-native-code.aspx#comments</comments><description>&lt;p&gt;A few months ago, &lt;a href="http://blogs.microsoft.co.il/blogs/sasha/archive/2009/03/20/windows-7-taskbar-window-switchers-and-previews-in-depth.aspx"&gt;we’ve taken a look&lt;/a&gt; at how you can extend your MDI or TDI application with an individual thumbnail and live preview for each tab (or document) that will be displayed in the Windows 7 taskbar. We’ve seen the temporary managed wrapper that makes this possible, and in the final 1.0 release of the &lt;a href="http://code.msdn.microsoft.com/WindowsAPICodePack"&gt;Windows API Code Pack&lt;/a&gt; there is a more polished managed API that does the same thing.&lt;/p&gt;  &lt;p&gt;However, in this post I’d like to focus on the underlying details which you will have to deal with if you’re writing your GUI application in C++. There’s a &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1c333f06-fadb-4d93-9c80-402621c600e7&amp;amp;displaylang=en"&gt;hands-on lab&lt;/a&gt; that I wrote for the latest release of the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1c333f06-fadb-4d93-9c80-402621c600e7&amp;amp;displaylang=en"&gt;Windows 7 Training Kit&lt;/a&gt; that shows how to take a Win32 dialog with a tab control and multiple tab pages, and turn each tab page into a thumbnail with a preview.&lt;/p&gt;  &lt;p&gt;You can go ahead and do the hands-on lab—there’s a fairly comprehensive document that tells you everything you need to along the way—or you can read this (more brief) description.&lt;/p&gt;  &lt;p&gt;What you need to do to support “tabbed thumbnails” is the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;If your application process has a high &lt;a href="http://msdn.microsoft.com/en-us/library/bb625957.aspx"&gt;integrity level&lt;/a&gt; (e.g. if it’s usually launched as administrator), make sure that the DWM messages can pass through, or else they will be filtered by &lt;a href="http://en.wikipedia.org/wiki/User_Interface_Privilege_Isolation"&gt;UIPI&lt;/a&gt;. Specifically, call the &lt;em&gt;ChangeWindowMessageFilter&lt;/em&gt; API and enable the WM_DWMSENDICONICTHUMBNAIL and the WM_DWMSENDICONICLIVEPREVIEWBITMAP window messages to pass through.&lt;/li&gt;    &lt;li&gt;Figure out a way to grab a live bitmap rendering of each individual tab—this bitmap must be 32-bit ARGB. This sounds easy, and it indeed might be easy if you have your own custom rendering code. This isn’t easy, however, if you’re just using standard Win32 controls—if the control is not currently visible, you might have to go through hoops to grab a preview of it (e.g. in a TDI application, you could grab a preview of a tab just before switching to another tab).&lt;/li&gt;    &lt;li&gt;For each tab window (which is usually a child window), create a top-level proxy invisible window that will deal with the window messaging required to make the thumbnail work. As far as the taskbar and the DWM are concerned, these top-level proxy windows are the ones showing the tab thumbnails, not your application’s “real” tab windows, so all the API calls below have to be performed with the proxy window handles as the parameters. (The reason for this is a limitation of the DWM, which can’t interact with non-top-level windows.)&lt;/li&gt;    &lt;li&gt;As you create your proxy windows:&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;Call the &lt;em&gt;DwmSetWindowAttribute&lt;/em&gt; method to set the DWMWA_FORCE_ICONIC_REPRESENTATION and the DWMWA_HAS_ICONIC_THUMBNAIL window attributes. This instructs the DWM to poll your proxy windows for the taskbar thumbnail and live preview.&lt;/li&gt;      &lt;li&gt;Register them to appear in the taskbar by calling the &lt;em&gt;ITaskbarList4::RegisterTab&lt;/em&gt; method, and set their relative order with regard to the other tabs by calling the &lt;em&gt;ITaskbarList4::SetTabOrder&lt;/em&gt; method. (&lt;a href="http://msdn.microsoft.com/en-us/library/dd562040%28VS.85%29.aspx"&gt;ITaskbarList4&lt;/a&gt; is a minor extension of &lt;a href="http://msdn.microsoft.com/en-us/library/dd391692(VS.85).aspx"&gt;ITaskbarList3&lt;/a&gt;.)&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;When a tab becomes active, call the &lt;em&gt;ITaskbarList4::SetTabActive&lt;/em&gt; method so that this tab’s thumbnail appears as active.&lt;/li&gt;    &lt;li&gt;When the proxy window’s procedure receives the WM_DWMSENDICONICTHUMBNAIL message, call the &lt;em&gt;DwmSetIconicThumbnail&lt;/em&gt; method and pass to it the window’s thumbnail bitmap. Note that the dimensions of the thumbnail are specified as the high-word and low-word of the &lt;em&gt;lParam&lt;/em&gt; message parameter, and you must adhere to these dimensions.&lt;/li&gt;    &lt;li&gt;When the proxy window’s procedure receives the WM_DWMSENDICONICLIVEPREVIEWBITMAP message, call the &lt;em&gt;DwmSetIconicLivePreviewBitmap&lt;/em&gt; method and pass to it the window’s live preview bitmap. If the window does not overlap the entire application frame, you can use an additional offset parameter to specify the offset of the provided bitmap from the top-left corner of the application’s window. The rest of the window will be captured by DWM automatically for you. (This means that Internet Explorer, for example, doesn’t have to grab a bitmap of the entire window, only of the tab itself. The menus and toolbars could be taken care of by DWM.)&lt;/li&gt;    &lt;li&gt;When the proxy window’s procedure receives the WM_ACTIVATE message, switch to the corresponding tab window in your application UI.&lt;/li&gt;    &lt;li&gt;When the proxy window’s procedure receives the WM_SYSCOMMAND message, check &lt;em&gt;wParam&lt;/em&gt; for the SC_CLOSE code. Any other codes should be forwarded to the application’s main window; SC_CLOSE should be handled by the proxy window’s window procedure (e.g. you can call &lt;em&gt;DefWindowProc&lt;/em&gt; that will send you a WM_CLOSE message).&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;As you can see, there’s a lot of manual labor in having to implement all of this logic every time you want tabbed thumbnails. Even though it’s obviously your responsibility to obtain the thumbnail bitmap and live preview bitmap, and to calculate their offset from the application frame, at least some of the proxy windowing work can be streamlined. For this purpose, the hands-on lab I’ve mentioned earlier provides a &lt;em&gt;TabWindow&lt;/em&gt; class, that I will cover in a subsequent post.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=378248" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Win32/default.aspx">Win32</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category></item><item><title>Windows 7 RTM Training Kit Updates</title><link>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/08/09/windows-7-rtm-training-kit-updates.aspx</link><pubDate>Sun, 09 Aug 2009 21:24:55 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:376766</guid><dc:creator>Sasha Goldshtein</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/sasha/rsscomments.aspx?PostID=376766</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/sasha/archive/2009/08/09/windows-7-rtm-training-kit-updates.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://windowsteamblog.com/blogs/windows7/archive/2009/08/06/windows-7-rtm-available-today-for-msdn-amp-technet-subscribers.aspx"&gt;Windows 7 RTM&lt;/a&gt; is out for a few days now for MSDN and TechNet subscribers, and together with the release of the final bits, Microsoft DPE released the final bits of the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=1c333f06-fadb-4d93-9c80-402621c600e7"&gt;Windows 7 Training Kit&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Our team at &lt;a href="http://www.sela.co.il"&gt;Sela&lt;/a&gt; worked days and nights to meet the RTM deadline. Specifically, &lt;a href="http://blogs.microsoft.co.il/blogs/alon"&gt;Alon&lt;/a&gt; wrote new multi touch and Libraries hands-on labs, Dima (with &lt;a&gt;Ariel&lt;/a&gt;’s help) wrote new labs for the Sensors and Location platform, and I wrote a pair of new labs for taskbar features, one using the final 1.0 release of the &lt;a href="http://code.msdn.microsoft.com/WindowsAPICodePack"&gt;Windows API Code Pack&lt;/a&gt; and WPF and another using pure Win32 C and C++ code.&lt;/p&gt;  &lt;p&gt;Other materials that made it to the training kit have to do with application compatibility on Windows 7. You might have already heard that are hardly any breaking changes from Vista to Windows 7, but if you never made the move to Vista you might find some compatibility problems when testing your app on Windows 7.&lt;/p&gt;  &lt;p&gt;To help you with those, the training kit now includes presentations and labs on High DPI, Installer Detection, Session 0 Isolation, UAC Redirection, UIPI and Version Checking—which are among the most common issues developers and testers encounter on Vista and Windows 7, and most of them have been written by our team at Sela.&lt;/p&gt;  &lt;p&gt;If you haven’t done so yet, go ahead and install Windows 7 and its &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=71DEB800-C591-4F97-A900-BEA146E4FAE1&amp;amp;displaylang=en"&gt;SDK&lt;/a&gt;, &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=1c333f06-fadb-4d93-9c80-402621c600e7"&gt;download the training kit&lt;/a&gt; and start going through the multitude of features and the hands-on labs that accompany them!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=376766" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Teaching/default.aspx">Teaching</category><category domain="http://blogs.microsoft.co.il/blogs/sasha/archive/tags/Windows7/default.aspx">Windows7</category></item></channel></rss>