<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Bryan Griffin's Blog</title><subtitle type="html">From the Depths of Redmond</subtitle><id>http://blogs.msdn.com/bryangr/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/bryangr/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2008-02-12T06:41:00Z</updated><entry><title>Did you know that you p/Invoke from PowerShell?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2009/02/19/did-you-know-that-you-p-invoke-from-powershell.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2009/02/19/did-you-know-that-you-p-invoke-from-powershell.aspx</id><published>2009-02-19T21:48:00Z</published><updated>2009-02-19T21:48:00Z</updated><content type="html">Check out &lt;A class="" href="http://www.leeholmes.com/blog/PowerShellPInvokeWalkthrough.aspx" target=_blank mce_href="http://www.leeholmes.com/blog/PowerShellPInvokeWalkthrough.aspx"&gt;this&lt;/A&gt; walkthough by Lee Holmes, fellow Softie and author of &lt;A class="" href="http://www.amazon.com/gp/product/0596528493?ie=UTF8&amp;amp;tag=preciscomput-20&amp;amp;link_code=as3&amp;amp;camp=211189&amp;amp;creative=373489&amp;amp;creativeASIN=0596528493" target=_blank mce_href="http://www.amazon.com/gp/product/0596528493?ie=UTF8&amp;amp;tag=preciscomput-20&amp;amp;link_code=as3&amp;amp;camp=211189&amp;amp;creative=373489&amp;amp;creativeASIN=0596528493"&gt;Windows PowerShell Cookbook: for Windows, Exchange 2007, and MOM V3&lt;/A&gt;.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9434728" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Software Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Software+Engineering/default.aspx" /></entry><entry><title>Listing firewall exceptions with PowerShell - yes we can</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2009/02/18/listing-firewall-exceptions-with-powershell-yes-we-can.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2009/02/18/listing-firewall-exceptions-with-powershell-yes-we-can.aspx</id><published>2009-02-19T06:02:00Z</published><updated>2009-02-19T06:02:00Z</updated><content type="html">&lt;P&gt;On an internal PowerShell scripting DL the question was posed as to how one would get a list of applications with firewall exceptions.&amp;nbsp; Here was the answer that I sent:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;function getfwexceptions&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;{&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $fwmgr = (&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt; -com hnetcfg.fwmgr).localpolicy.currentprofile&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $fwmgr.authorizedapplications&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;This function instantiates an instance of the HNetCfg.FwMgr COM object and gives you back something like this:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;Name&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Internet Explorer&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;ProcessImageFileName : C:\program files\internet explorer\iexplore.exe&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;IpVersion&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; : 2&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;Scope&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; : 0&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;RemoteAddresses&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; : *&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;Enabled&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; : True&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Of course, with PowerShell you're passing around objects and can filter this output to your liking.&lt;/P&gt;
&lt;P&gt;Happy scripting!&lt;!--EndFragment--&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9433169" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Quick 'n Dirty" scheme="http://blogs.msdn.com/bryangr/archive/tags/Quick+_2700_n+Dirty/default.aspx" /><category term="Systems Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Systems+Engineering/default.aspx" /></entry><entry><title>Netgear passphrase recovery</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2009/02/17/netgear-passphrase-recovery.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2009/02/17/netgear-passphrase-recovery.aspx</id><published>2009-02-18T10:14:00Z</published><updated>2009-02-18T10:14:00Z</updated><content type="html">&lt;P&gt;The internal wireless on one of my laptops (an HP Pavillion dv9005us which appear to have a &lt;A class="" href="http://www.windowvistarepair.com/VistaBlog/vista-features/hp-dv9000-wireless-not-working-56/" target=_blank mce_href="http://www.windowvistarepair.com/VistaBlog/vista-features/hp-dv9000-wireless-not-working-56/"&gt;recall&lt;/A&gt;) decided to stop working sometime back.&amp;nbsp; I had already sent this thing back to have the system board replaced once before because the LAN connection lost its MAC address.&amp;nbsp; For the longest time I used a cabled connection but decided to buy a wireless card for it last weekend.&amp;nbsp; I got home and was configuring it when I realized that I had forgotten the passphrase for my wireless network.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What was I to do?!&amp;nbsp; &lt;/STRONG&gt;Reset the router? I don't think so; I'm way too lazy for that.&amp;nbsp; This was a Netgear router which has this button which lets you save the current configuration file.&amp;nbsp; Is the password in there?&amp;nbsp; You bet; it's there somewhere but I was guessing that it was encrypted somehow.&amp;nbsp; &lt;STRONG&gt;Not! &lt;/STRONG&gt;&amp;nbsp;I opened the file with Notepad, looked around and ended up finding it in clear text.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9430301" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="et cetera" scheme="http://blogs.msdn.com/bryangr/archive/tags/et+cetera/default.aspx" /></entry><entry><title>Protect Ya Neck:  Securing web applications with threat modeling</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/12/17/protect-ya-neck-securing-web-applications-with-threat-modeling.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/12/17/protect-ya-neck-securing-web-applications-with-threat-modeling.aspx</id><published>2008-12-17T20:22:00Z</published><updated>2008-12-17T20:22:00Z</updated><content type="html">&lt;P&gt;Currently I work on building large scale web services that face the the public as part of what Microsoft calls software plus services (&lt;A class="" href="http://www.microsoft.com/softwareplusservices/" target=_blank mce_href="http://www.microsoft.com/softwareplusservices/"&gt;Software+Services&lt;/A&gt;).&amp;nbsp; In this area of Internet&amp;nbsp;facing applications&amp;nbsp;all aspects of security are important, including intelligent attack mitigation at the software level.&amp;nbsp; The identification of possible threats and vulnerabilities are found through an iterative process called &lt;A class="" href="http://en.wikipedia.org/wiki/Threat_model" target=_blank mce_href="http://en.wikipedia.org/wiki/Threat_model"&gt;threat modeling&lt;/A&gt; during the design phase of the development lifecycle.&amp;nbsp; Here are some links that can help you build more secure web applications through the process of threat modeling.&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms978516.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms978516.aspx"&gt;Threat Modeling Web Applications - MSDN Patterns &amp;amp; Practices&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://msdn.microsoft.com/en-us/security/aa570411.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/security/aa570411.aspx"&gt;Threat Modeling at the MSDN Security Development Center&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://blogs.msdn.com/threatmodeling/" target=_blank mce_href="http://blogs.msdn.com/threatmodeling/"&gt;Microsoft Application Threat Modeling Blog&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://blogs.msdn.com/ace_team/" target=_blank mce_href="http://blogs.msdn.com/ace_team/"&gt;Microsoft Application Consulting &amp;amp;&amp;nbsp;Engineering&amp;nbsp;Team Blog&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://blogs.msdn.com/sdl/archive/tags/threat+modeling/default.aspx" target=_blank mce_href="http://blogs.msdn.com/sdl/archive/tags/threat+modeling/default.aspx"&gt;Threat Modeling Articles at The Security Development Lifcycle Blog (MSDN)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://www.microsoft.com/mspress/books/6892.aspx" target=_blank mce_href="http://www.microsoft.com/mspress/books/6892.aspx"&gt;Threat Modeling from Microsoft Press&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://www.microsoft.com/mspress/books/5957.aspx" target=_blank mce_href="http://www.microsoft.com/mspress/books/5957.aspx"&gt;Writing Secure Code, Second Edition from Microsoft Press&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9231267" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Software Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Software+Engineering/default.aspx" /></entry><entry><title>Sysinternals tools from the web? You betcha</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/12/15/sysinternals-tools-from-the-web-you-betcha.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/12/15/sysinternals-tools-from-the-web-you-betcha.aspx</id><published>2008-12-16T04:13:00Z</published><updated>2008-12-16T04:13:00Z</updated><content type="html">&lt;P&gt;Did you know that you can access and even run Sysinternals tools right from the Internet?&lt;/P&gt;
&lt;P&gt;&lt;A href="http://live.sysinternals.com/" mce_href="http://live.sysinternals.com/"&gt;http://live.sysinternals.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I tend to use them like this...&lt;/P&gt;
&lt;P&gt;C:\utils&amp;gt;pushd &lt;A href="file://live.sysinternals.com/" mce_href="file://live.sysinternals.com/"&gt;\\live.sysinternals.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Z:\&amp;gt;strings /accepteula c:\utils\stringtest.txt&lt;/P&gt;
&lt;P&gt;Strings v2.4&lt;BR&gt;Copyright (C) 1999-2007 Mark Russinovich&lt;BR&gt;Sysinternals - &lt;A href="http://www.sysinternals.com/" mce_href="http://www.sysinternals.com/"&gt;www.sysinternals.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Test String&lt;/P&gt;
&lt;P&gt;Z:\&amp;gt;popd&lt;/P&gt;
&lt;P&gt;C:\utils&amp;gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9223099" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Quick 'n Dirty" scheme="http://blogs.msdn.com/bryangr/archive/tags/Quick+_2700_n+Dirty/default.aspx" /><category term="Systems Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Systems+Engineering/default.aspx" /></entry><entry><title>An updated system is a happy system (Stop 0x0000000A or IRQL_NOT_LESS_OR_EQUAL)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/12/11/an-updated-system-is-a-happy-system-stop-0x0000000a-or-irql-not-less-or-equal.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/12/11/an-updated-system-is-a-happy-system-stop-0x0000000a-or-irql-not-less-or-equal.aspx</id><published>2008-12-12T06:44:00Z</published><updated>2008-12-12T06:44:00Z</updated><content type="html">&lt;P&gt;Earlier this week one of my co-workers asked me to look at a virtual machine he had which was crashing frequently; and by frequently I mean around 40 times since 11/25.&amp;nbsp; I already knew that the stop code was 0xA (IRQL_NOT_LESS_OR_EQUAL) and found out that it also had stopped with 0xD1 (DRIVER_IRQL_NOT_LESS_OR_EQUAL) a few times.&amp;nbsp; The first dump that I looked at was corrupt but this box had plenty more crashes in it, but until then I decided to reinstall the VM Additions package and see if that was an easy fix.&amp;nbsp; I checked back the next day and found that it had bugchecked 3 more times since.&amp;nbsp; I took a quick look at the latest dump (pool corruption), here is some of the output.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;kd&amp;gt; kv&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;ChildEBP RetAddr&amp;nbsp; Args to Child&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;87d97bac 81cd5b2a badb0d00 00000001 00000001 nt!_KiTrap0E+0x2ac (FPO: [0,0] TrapFrame @ 87d97bac) (CONV: cdecl)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;87d97c68 81ce0117 000009c0 00000001 000039c0 nt!ExpAllocateBigPool+0x201 (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;87d97cc8 81db9017 00000001 000039b8 44506343 nt!ExAllocatePoolWithTag+0x112 (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;87d97d10 81db8ea0 87d97d2c 84d9deb0 81cf563c nt!PfSnBuildDumpFromTrace+0x5a (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;87d97d38 81db9332 84d9deb0 87d97d7c 81c6b602 nt!PfSnEndTrace+0xa2 (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;87d97d44 81c6b602 84d9deb0 00000000 847ed7d8 nt!PfSnEndTraceWorkerThreadRoutine+0xe (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;87d97d7c 81dafc1d 84d9deb0 87d9c680 00000000 nt!ExpWorkerThread+0xfd (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;87d97dc0 81c9a19e 81c6b505 80000001 00000000 nt!PspSystemThreadStartup+0x9d (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;kd&amp;gt; .trap 87d97bac&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;ErrCode = 00000002&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;eax=00000003 ebx=000039c0 ecx=00000600 edx=00000001 esi=00000003 edi=9dd859c0&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;eip=81cd5b2a esp=87d97c20 ebp=87d97c68 iopl=0&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nv up di pl nz ac pe nc&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;cs=0008&amp;nbsp; ss=0010&amp;nbsp; ds=0023&amp;nbsp; es=0023&amp;nbsp; fs=0030&amp;nbsp; gs=0000&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; efl=00010016&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;nt!ExpAllocateBigPool+0x201:&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0008:81cd5b2a 895ffc&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dword ptr [edi-4],ebx ds:0023:9dd859bc=????????&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;kd&amp;gt; dd edi-4 l1&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;9dd859bc&amp;nbsp; ????????&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;kd&amp;gt; !pool 9dd859bc&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;Pool page 9dd859bc region is Paged pool&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;*9dd82000 : large page allocation, Tag is CcPD, size is 0x39c0 bytes&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Pooltag CcPD : Prefetcher trace dump, Binary : nt!ccpf&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;One of the things that was of interest is the pool tag as you can see in the output of &lt;STRONG&gt;!pool&lt;/STRONG&gt;.&amp;nbsp; Hmmm, Prefetcher.&amp;nbsp; Since pool corruption is hard to catch without help so I used &lt;A class="" href="http://www.microsoft.com/whdc/DevTools/tools/DrvVerifier.mspx" target=_blank mce_href="http://www.microsoft.com/whdc/DevTools/tools/DrvVerifier.mspx"&gt;Driver Verifier&lt;/A&gt; to analyze&amp;nbsp;some&amp;nbsp;suspicious drivers&amp;nbsp;including fileinfo.sys and fltmgr.sys.&amp;nbsp; When I rebooted the machine it only took about 2 minutes for it to bugcheck and here is stack trace from the dump with driver verification turned on.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;kd&amp;gt; kv&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;ChildEBP RetAddr&amp;nbsp; Args to Child&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617b58 81cd36d4 000000c4 000000c0 89e70e28 nt!KeBugCheckEx+0x1e (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617b70 81ec9e0d 92747008 85617b9c 81ec262b nt!VfBugCheckNoStackUsage+0x23 (FPO: [0,0,0]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617b7c 81ec262b 84aa5020 84ab0438 84aa5020 nt!VfBeforeCallDriver+0x88 (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617b9c 81c679d7 853cab29 89e70e28 84aa5020 nt!IovCallDriver+0x1fd (CONV: fastcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617bb0 853cab29 92758b04 927e4960 853c1e00 nt!IofCallDriver+0x1b (CONV: fastcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617be4 853ce827 84aa5020 84ab0438 92758b04 fltmgr!FltpQueryInformationFile+0xc3 (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617c18 853cf910 84aa5020 927e4960 85617c44 fltmgr!FltpGetFileName+0x63 (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617c28 853ccdb4 927e4960 00000000 927e4960 fltmgr!FltpGetOpenedFileName+0x18 (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617c44 853cf990 927e4960 00000000 927e4960 fltmgr!FltpCallOpenedFileNameHandler+0x8a (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617c60 853d0129 927e4960 00000000 92758b04 fltmgr!FltpGetNormalizedFileNameWorker+0x16 (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617c78 853cd51f 927e4960 00000000 927e4960 fltmgr!FltpGetNormalizedFileName+0x19 (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617c90 853b8f13 927e4960 84ab0438 00000000 fltmgr!FltpCreateFileNameInformation+0x81 (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617cc0 853cda61 84f84d54 00000001 00000000 fltmgr!FltpGetFileNameInformation+0x31b (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617cd4 80409378 84ab0438 84ab6890 927e4960 fltmgr!FltGetFileNameInformationUnsafe+0x59 (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617d14 853d3b70 83823c40 84ab6890 00000228 fileinfo!FIStreamQueryWorker+0x76 (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617d44 81c6b602 00000000 00000000 832c92d8 fltmgr!FltpProcessGenericWorkItem+0x32 (FPO: [Non-Fpo]) (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617d7c 81dafc1d 83823c40 8561c680 00000000 nt!ExpWorkerThread+0xfd (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;85617dc0 81c9a19e 81c6b505 00000001 00000000 nt!PspSystemThreadStartup+0x9d (CONV: stdcall)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Alright, now&amp;nbsp;we have a more interesting call stack and the debugger says that &lt;FONT size=2&gt;fileinfo!FIStreamQueryWorker is the culprit.&amp;nbsp; FileInfo.sys is associated with Superfetch/Prefetch which corroborates the evidence in the very first dump I looked at where you can see the pool allocated with the CcPD tag.&amp;nbsp; Let's check the dates on fltmgr and fileinfo to see if they're old.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;kd&amp;gt; lmvm fileinfo&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;start&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; module name&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;80402000 80412000&amp;nbsp;&amp;nbsp; fileinfo&amp;nbsp;&amp;nbsp; (private pdb symbols)&amp;nbsp; c:\symbols\fileinfo.pdb\B768A0AE91484C23A64BA91BEF9C57AD1\fileinfo.pdb&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loaded symbol image file: fileinfo.sys&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Image path: \SystemRoot\system32\drivers\fileinfo.sys&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Image name: fileinfo.sys&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Timestamp:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Thu Nov 02 01:36:47 2006 (4549AE1F)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CheckSum:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0001C10F&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageSize:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 00010000&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Translations:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0000.04b0 0000.04e4 0409.04b0 0409.04e4&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;kd&amp;gt; lmvm fltmgr&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;start&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; module name&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;853b1000 853e2000&amp;nbsp;&amp;nbsp; fltmgr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (private pdb symbols)&amp;nbsp; c:\symbols\fltMgr.pdb\FA42D1F108C1425599238F576CBDDE831\fltMgr.pdb&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loaded symbol image file: fltmgr.sys&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Image path: \SystemRoot\system32\drivers\fltmgr.sys&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Image name: fltmgr.sys&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Timestamp:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Thu Nov 02 01:30:58 2006 (4549ACC2)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CheckSum:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 00035410&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageSize:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 00031000&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Translations:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0000.04b0 0000.04e4 0409.04b0 0409.04e4&lt;/PRE&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=2&gt;After checking another x86 Vista box that was hanging around these file dates should be 1/20/2008 instead of 11/2/2006.&amp;nbsp; Doh, this machine didn't have SP1!&amp;nbsp; I should have checked all of this at first but I assumed that the machine was up-to-date.&amp;nbsp; Apparently there were some funny apps on it that we didn't want to break so&amp;nbsp;SP1 had not been installed.&amp;nbsp; I stopped and disabled the Superfetch service and the machine has been happy ever since.&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;SERVICE_NAME: sysmain&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; : 20&amp;nbsp; WIN32_SHARE_PROCESS&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; START_TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 4&amp;nbsp;&amp;nbsp; DISABLED&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR_CONTROL&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; : 0&amp;nbsp;&amp;nbsp; IGNORE&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; BINARY_PATH_NAME&amp;nbsp;&amp;nbsp; : C:\Windows\system32\svchost.exe -k LocalSystemNetworkRestricted&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LOAD_ORDER_GROUP&amp;nbsp;&amp;nbsp; :&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TAG&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; : 0&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DISPLAY_NAME&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; : Superfetch&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DEPENDENCIES&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; : rpcss&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; : fileinfo&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SERVICE_START_NAME : LocalSystem&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;If you notice under dependencies you will see the system driver fileinfo.sys.&lt;/P&gt;
&lt;P&gt;The key takeaway here is to make sure that you have all appropriate updates installed on your system or you could run into some strange behavior.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9200386" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Debugging" scheme="http://blogs.msdn.com/bryangr/archive/tags/Debugging/default.aspx" /></entry><entry><title>Farewell OneCare</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/11/19/farewell-onecare.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/11/19/farewell-onecare.aspx</id><published>2008-11-20T04:30:00Z</published><updated>2008-11-20T04:30:00Z</updated><content type="html">&lt;P&gt;Well, we've come to the end of the road with the OneCare product.&amp;nbsp; It was a great product packed with neat features that made PC use carefree.&amp;nbsp; Frankly, I'm sad to see it go but it's nice to see that Microsoft is going to offer a free solution.&amp;nbsp; At any rate, I'll be off working on a few new technologies which are still part of the identity and security space.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/presspass/press/2008/nov08/11-18NoCostSecurityPR.mspx"&gt;http://www.microsoft.com/presspass/press/2008/nov08/11-18NoCostSecurityPR.mspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9126919" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="et cetera" scheme="http://blogs.msdn.com/bryangr/archive/tags/et+cetera/default.aspx" /></entry><entry><title>Dang ol' runtime errors!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/11/04/dang-ol-runtime-errors.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/11/04/dang-ol-runtime-errors.aspx</id><published>2008-11-04T18:57:00Z</published><updated>2008-11-04T18:57:00Z</updated><content type="html">&lt;P&gt;A couple of&amp;nbsp;months ago a friend of mine asked me to take a look at an IT&amp;nbsp;job posting that they were going to go for.&amp;nbsp; Being the good buddy that I am I followed the instructions to find the description but was confronted with a runtime error on each page.&amp;nbsp; I had been working on something earlier that week and had script debugging turned on in IE.&amp;nbsp; I guess it wasn't a big deal but I was drawn like a moth to a flame since this was happening on every single page on the site (at least all the ones I checked).&amp;nbsp;&amp;nbsp;It didn't help that I was asked if I wanted to debug the script in each case, what do you think; of course I do.&lt;/P&gt;
&lt;P&gt;First get the stack trace and read from the bottom of the stack to the top.&amp;nbsp; When looking at the stack you see that there are four calls in jscript, the last being OnScriptError.&amp;nbsp; Looking at those previous three calls you see that each function is packing around the memory address &lt;FONT size=2&gt;069ac110.&lt;/P&gt;&lt;/FONT&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;0:016&amp;gt; kb&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;ChildEBP RetAddr&amp;nbsp; Args to Child&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1beefc 76980dde 7696b0b2 0005024a 00000001 ntdll!KiFastSystemCallRet&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bef00 7696b0b2 0005024a 00000001 00000000 USER32!NtUserWaitMessage+0xc&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bef34 7696bcda 000802dc 0005024a 00000001 USER32!DialogBox2+0x202&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bef5c 769bccdc 76960000 05d6b4b8 000105be USER32!InternalDialogBox+0xd0&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1beffc 769bd25e 00000014 05daf898 00000000 USER32!SoftModalMessageBox+0x69f&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf14c 769bd394 0c1bf158 00000028 000105be USER32!MessageBoxWorker+0x2c7&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf1a4 769bd610 000105be 0c1bf280 00000000 USER32!MessageBoxTimeoutW+0x7f&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf1c4 6d775985 000105be 0c1bf280 00000000 USER32!MessageBoxExW+0x1b&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf1e4 769bd6ac 000105be 0c1bf280 00000000 IEFRAME!Detour_MessageBoxExW+0x2c&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf200 6ba8ee6e 000105be 0c1bf280 00000000 USER32!MessageBoxW+0x45&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf884 6ba0900e 0bbbcd08 0c1bf8f4 061889b8 mshtml!CScriptHolder::DoYouWishToDebug+0x20e&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf8e8 6ee85320 05d13078 00000000 0c1bf954 mshtml!CScriptHolder::OnScriptError+0xa5&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf8f8 6ee97f32 0bbbcd08 ffffffff 05f7b5a4 jscript!COleScript::OnScriptError+0x31&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf954 6ee7fdd8 069ac110 0bbbcd08 86664004 jscript!COleScript::CreateScriptBody+0xe1&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf9cc 6ee7fc46 069ac110 05f7b5a4 00000000 jscript!COleScript::ParseScriptTextCore+0x211&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bf9f8 6b8aca57 061889bc 069ac110 05f7b5a4 jscript!COleScript::ParseScriptText+0x2b&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bfa58 6b8ac888 05c7e970 05c1fb18 00000000 mshtml!CScriptCollection::ParseScriptText+0x240&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bfb14 6b99ece3 00000000 00000000 0688a660 mshtml!CScriptElement::CommitCode+0x263&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bfb3c 6b99ed2f 00000000 05c1fb18 0688a9a0 mshtml!CMarkup::CommitQueuedScripts+0x53&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c1bfb54 6b8cade8 00000000 05c1fb18 00000000 mshtml!CMarkup::CommitQueuedScriptsInline+0x3c&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Dump whatever is at the suspect memory address and we find the error.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;0:016&amp;gt; dU 069ac110&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;069ac110&amp;nbsp; "Synapse Website Usher Error: Dom"&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;069ac150&amp;nbsp; "ain not found...."&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Since the runtime error was happening on each page I looked at the source of some of the pages and found that there were a few lines of HTML which inserted a JavaScript file used for analytics.&lt;/P&gt;
&lt;P&gt;More than likely the average user would not have seen the errors because most folks have script debugging turned off, but I sent an email to the webmaster because it's always good to know about potential bugs.&lt;/P&gt;
&lt;P&gt;By the way, this has apparently been fixed.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9040139" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Debugging" scheme="http://blogs.msdn.com/bryangr/archive/tags/Debugging/default.aspx" /></entry><entry><title>Snapfish and unresponsive browser - a quick analysis</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/11/01/snapfish-and-unresponsive-browser-a-quick-analysis.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/11/01/snapfish-and-unresponsive-browser-a-quick-analysis.aspx</id><published>2008-11-02T02:00:00Z</published><updated>2008-11-02T02:00:00Z</updated><content type="html">&lt;P&gt;Last week I was trying to get prints of some photos I had from a good friend's wedding.&amp;nbsp; I had success with Internet photo printing before at a different store so I decided to use the service offered by a nearby store for quick pickup.&amp;nbsp; I go to the website and begin to upload the pictures and while navigating around my browser (IE7) became unresponsive and gave me the faded white screen for a while (at least a minute).&amp;nbsp; NOOOO, you were working so well until just now!&amp;nbsp; What was causing this behavior?&lt;/P&gt;
&lt;P&gt;In cases where you have processor time spikes or hanging apps you can use the !runaway command to see what threads are taking the most time.&amp;nbsp; In the debugger output below you can see that thread 3 is taking a considerable chunk of the CPU time compared to the other threads.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;0:020&amp;gt; !runaway&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;User Mode Time&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; Thread&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Time&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp; 3:25c&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 0 days 0:00:21.044&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp; 0:158c&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:02.012&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp; 5:17fc&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:01.450&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp; 6:e60&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 0 days 0:00:01.216&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp; 4:10f0&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.046&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 14:1470&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.015&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 13:4b8&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 0 days 0:00:00.015&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp; 8:14c8&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.015&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp; 7:e74&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 0 days 0:00:00.015&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp; 1:1630&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.015&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 20:5bc&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 19:17f0&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 18:10c8&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 17:c04&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 16:12bc&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 15:1674&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 12:1248&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 11:5f0&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp; 10:ecc&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp; 9:16b8&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp; 2:14e4&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0 days 0:00:00.000&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;We switch to thread 3 and get a stack backtrace with extended frame count so that the whole stack is present (without this you will not get the last 2 frames).&amp;nbsp; Looking the call stack you can see that some component (1BA7) had made a HTTP request and is now waiting on a response.&amp;nbsp; Ok, now this makes sense because it seems that the HTTP response is taking a longer than desired.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;0:020&amp;gt; ~3s&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;eax=05f9a000 ebx=75f7c54c ecx=05f99fe8 edx=00001000 esi=0433c154 edi=00000000&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;eip=77579a94 esp=0433c10c ebp=0433c17c iopl=0&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nv up ei ng nz ac pe cy&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;cs=001b&amp;nbsp; ss=0023&amp;nbsp; ds=0023&amp;nbsp; es=0023&amp;nbsp; fs=003b&amp;nbsp; gs=0000&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; efl=00000297&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;ntdll!KiFastSystemCallRet:&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;77579a94 c3&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ret&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0:003&amp;gt; kn250&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;# ChildEBP RetAddr&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;00 0433c108 77579254 ntdll!KiFastSystemCallRet&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;01 0433c10c 75f7c244 ntdll!ZwWaitForSingleObject+0xc&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;02 0433c17c 75f7c1b2 kernel32!WaitForSingleObjectEx+0xbe&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;03 0433c190 76fc165d kernel32!WaitForSingleObject+0x12&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;04 0433c1d0 76f88b0e wininet!CServerInfo::GetConnection_Fsm+0x34f&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;05 0433c1e8 76f83f49 wininet!CFsm_GetConnection::RunSM+0x61&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;06 0433c200 76f86441 wininet!CFsm::Run+0x39&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;07 0433c218 76f8873b wininet!DoFsm+0x25&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;08 0433c250 76f885d3 wininet!HTTP_REQUEST_HANDLE_OBJECT::OpenConnection_Fsm+0x1bb&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;09 0433c25c 76f83f49 wininet!CFsm_OpenConnection::RunSM+0x33&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0a 0433c274 76f86441 wininet!CFsm::Run+0x39&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0b 0433c28c 76f88569 wininet!DoFsm+0x25&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0c 0433c29c 76f88500 wininet!HTTP_REQUEST_HANDLE_OBJECT::OpenConnection+0x2f&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0d 0433c2c0 76f8847d wininet!HTTP_REQUEST_HANDLE_OBJECT::MakeConnection_Fsm+0x81&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0e 0433c2cc 76f83f49 wininet!CFsm_MakeConnection::RunSM+0x37&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;0f 0433c2e4 76f86441 wininet!CFsm::Run+0x39&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;10 0433c2fc 76f89125 wininet!DoFsm+0x25&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;11 0433c33c 76f89082 wininet!HTTP_REQUEST_HANDLE_OBJECT::SendRequest_Fsm+0xc2&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;12 0433c348 76f83f49 wininet!CFsm_SendRequest::RunSM+0x37&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;13 0433c360 76f86441 wininet!CFsm::Run+0x39&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;14 0433c378 76f86940 wininet!DoFsm+0x25&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;15 0433c394 76f8401d wininet!HTTP_REQUEST_HANDLE_OBJECT::HttpSendRequest_Start+0x474&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;16 0433c3a8 76f83f49 wininet!CFsm_HttpSendRequest::RunSM+0xa0&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;17 0433c3c0 76f86441 wininet!CFsm::Run+0x39&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;18 0433c3d8 76faf7af wininet!DoFsm+0x25&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;19 0433c400 76f9d34e wininet!HttpWrapSendRequest+0x148&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;*** ERROR: Symbol file could not be found.&amp;nbsp; Defaulted to export symbols for 1BA7.tmp - &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;1a 0433c438 06e477c5 wininet!HttpSendRequestW+0x5e&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;WARNING: Stack unwind information not available. Following frames may be wrong.&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;1b 0433efa4 06e14502 1BA7!ffStart+0x23df5&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;1c 00000000 00000000 1BA7+0x4502&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;What is 1BA7?&amp;nbsp; It's the Snapfish control which is on the website that I was using to upload the pictures.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;0:003&amp;gt; lm vm 1BA7&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;start&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; module name&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;06e10000 06f18000&amp;nbsp;&amp;nbsp; 1BA7&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; (export symbols)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 1BA7.tmp&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loaded symbol image file: 1BA7.tmp&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Image path: C:\Users\bryangr\AppData\Local\Temp\Low\1BA7.tmp&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Image name: 1BA7.tmp&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Timestamp:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Thu Jul 03 11:56:02 2008 (486D20C2)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CheckSum:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0010DF3F&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageSize:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 00108000&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; File version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.5.0.5&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Product version:&amp;nbsp; 2.5.0.5&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; File flags:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 0 (Mask 17)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; File OS:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 4 Unknown Win32&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; File type:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 2.0 Dll&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; File date:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 00000000.00000000&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Translations:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0409.04b0&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CompanyName:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Snapfish Inc.&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProductName:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Snapfish File Upload ActiveX Control&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; InternalName:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Snapfish File Upload ActiveX Control - Application maintained by Aaron Chan&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OriginalFilename: QuickUploader.iaa&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProductVersion:&amp;nbsp;&amp;nbsp; 2, 5, 0, 5&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileVersion:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 2, 5, 0, 5&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileDescription:&amp;nbsp; Snapfish File Upload ActiveX Control&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LegalCopyright:&amp;nbsp;&amp;nbsp; Copyright (C) 2004-2005 Snapfish Inc.&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Comments:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Snapfish File Upload ActiveX Control&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;I g'd the debugee and after a minute or so it began to respond again so I continued to order my prints.&amp;nbsp; So what can be done to correct issues like this?&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Check for new versions of the control&lt;/LI&gt;
&lt;LI&gt;Make sure you have current system patches&lt;/LI&gt;
&lt;LI&gt;Uncheck "Automatically detect settings" under Tools-&amp;gt; Internet Options-&amp;gt;Connections-&amp;gt;LAN Settings&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9028685" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Debugging" scheme="http://blogs.msdn.com/bryangr/archive/tags/Debugging/default.aspx" /></entry><entry><title>Have you ever needed to log diagnostic information from instrumented builds?  Sure you have.</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/10/28/have-you-ever-needed-to-log-diagnostic-information-from-instrumented-builds-sure-you-have.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/10/28/have-you-ever-needed-to-log-diagnostic-information-from-instrumented-builds-sure-you-have.aspx</id><published>2008-10-28T19:44:00Z</published><updated>2008-10-28T19:44:00Z</updated><content type="html">&lt;P&gt;There have been cases where I wanted to instrument my app and have the ability to log&amp;nbsp;extensive diagnostic information to a file, starting a new file each day or after the file reached a certain size.&amp;nbsp; When this is necessary I end up finding myself using TextWriterTraceListener and bootlegging some sort of rollover mechanism.&amp;nbsp; Recently, it was brought to my attention that the Microsoft.VisualBasic.Logging namespace had a gem called &lt;A class="" href="http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.logging.filelogtracelistener.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.logging.filelogtracelistener.aspx"&gt;FileLogTraceListener&lt;/A&gt;&amp;nbsp;which I had never noticed before because I primarily develop in C#.&amp;nbsp; I find that this class is magically delicious and I hope that you do too.&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9020627" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Software Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Software+Engineering/default.aspx" /></entry><entry><title>Why all the hanging .exe's?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/10/25/why-all-the-hanging-exe-s.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/10/25/why-all-the-hanging-exe-s.aspx</id><published>2008-10-25T23:14:00Z</published><updated>2008-10-25T23:14:00Z</updated><content type="html">&lt;P&gt;I know that it's been quite a while since I have written a blog.&amp;nbsp; I have been plenty busy up here in the Pac-Northwest.&amp;nbsp; Since my last post I have moved into new condo and back to the Server &amp;amp; Tools group to work in my original group - OneCare.&amp;nbsp; Now that I've covered that, I give you one of the issues that I ran into a little while back.&lt;/P&gt;
&lt;P&gt;During some standard processes I had some automation going out and running this binary that had been working fine for a while.&amp;nbsp; A couple of days after the job kicked off I was on a server investigating something totally unrelated when I noticed that the exe that was being&amp;nbsp;called (from a network share)&amp;nbsp;was hanging.&amp;nbsp; After checking a couple of other servers I found that it was hanging on them as well so I needed to investigate.&amp;nbsp; I proceeded to investigate by attaching a debugger on the offending executable.&amp;nbsp; You can see that the process had been up for over 2 days - but why?&amp;nbsp; This had worked so well before.&lt;/P&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;Process Uptime: 2 days 6:09:16.000&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Once I look at the stack backtrace I can see something immediately that is not right.&amp;nbsp; The binary that I&amp;nbsp;call from the network share is explicitly called&amp;nbsp;without the GUI -&amp;nbsp;so why are there windowing APIs on the call stack?&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 8pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;0:000&amp;gt; kbn&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp; Id: 355ec.3488c Suspend: 1 Teb: 7ffdf000 Unfrozen&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;# ChildEBP RetAddr&amp;nbsp; Args to Child&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;00 0012f758 7739d05f 77392c53 00000000 00000000 ntdll!KiFastSystemCallRet&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;01 0012f790 7738f152 4411008c 00000000 00000001 user32!NtUserWaitMessage+0xc&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;02 0012f7b8 773a16c2 77380000 00200838 00000000 user32!InternalDialogBox+0xd0&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;03 0012fa78 773a0fa4 0012fbe0 ffffffff ffff0000 user32!SoftModalMessageBox+0x94b&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;04 0012fbc8 7739df11 0012fbe0 00000000 7739de84 user32!MessageBoxWorker+0x2ba&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/SPAN&gt;&amp;nbsp;05 0012fc34 735df73f 0012fc4c 00000000 00000000 user32!MessageBoxIndirectA+0xb8&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/SPAN&gt;&amp;nbsp;06 0012fc74 735df5bb 0012fcb8 00000000 00000000 msvbvm60!AppCtlProc+0x2b&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/SPAN&gt;&amp;nbsp;07 0012fc9c 735df8b6 735df6e4 0012fcb8 0012fcb8 msvbvm60!APP::GetPropA+0x115&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/SPAN&gt;&amp;nbsp;08 0012fccc 735d3c78 00000000 00bc0528 0012fcf4 msvbvm60!_HrGetFileName+0x6f&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/SPAN&gt;&amp;nbsp;09 0012fd30 735d3cc6 00bf1e94 00bb1fa4 00000030 msvbvm60!CreateEmbeddedObject+0x149&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/SPAN&gt;&amp;nbsp;0a 0012fd50 7363c331 00168aa4 00000000 00000030 msvbvm60!CreateEmbeddedObject+0x197&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/SPAN&gt;&amp;nbsp;0b 0012fd6c 7363c613 00168aa4 00000000 00000030 msvbvm60!EpiGetInvokeArgs+0x40f&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/SPAN&gt;&amp;nbsp;0c 0012fed4 73577a5a 0014ee38 0040286c 00bb1e94 msvbvm60!CoerceArg+0x19b&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/SPAN&gt;&amp;nbsp;0d 0012fef8 73573959 0040286c 00000000 0040286c msvbvm60!LIBID30_CDAO+0xa&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/SPAN&gt;&amp;nbsp;0e 0012ff18 735736d2 00400000 00400000 00000000 msvbvm60!_CEDIT_vtbl::`vftable'+0x131&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/SPAN&gt;&amp;nbsp;0f 0012ff38 735735d8 00000000 00400000 00000000 msvbvm60!_CDRIVE_vtbl::`vftable'+0x4a&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/SPAN&gt;&amp;nbsp;*** ERROR: Module load completed but symbols could not be loaded for [CONFIDENTIAL]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/SPAN&gt;&amp;nbsp;10 0012ffb8 00402736 0040286c 77e523e5 00000000 msvbvm60!_CDIR_vtbl::`vftable'+0x100&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/SPAN&gt;&amp;nbsp;WARNING: Stack unwind information not available. Following frames may be wrong.&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/SPAN&gt;&amp;nbsp;11 0012fff0 00000000 0040272c 00000000 78746341 [CONFIDENTIAL]+0x2736&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Next I dump the stack with the parameters and since I have all the symbols I can see that there is a structure that is of interest which I suspect will have the text of the window that is hanging there and cannot be seen by logging in.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;0:000&amp;gt; kP&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;&amp;lt;snip&amp;gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;0012fa78 773a0fa4 user32!SoftModalMessageBox(&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; struct _MSGBOXDATA * lpmb = 0x0012fbe0)+0x94b&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&amp;lt;/snip&amp;gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;I run dt (display types) on the struct to dump our the contents so that I can get the address of the string that cantains the message text. (requires private symbols)&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/SPAN&gt;&amp;nbsp;0:000&amp;gt; dt _MSGBOXDATA 0x0012fbe0&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/SPAN&gt;&amp;nbsp;user32!_MSGBOXDATA&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/SPAN&gt;&amp;nbsp;&amp;lt;snip&amp;gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +0x00c lpszText&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x002007e0&amp;nbsp; -&amp;gt; 0x52&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/SPAN&gt;&amp;nbsp;&amp;lt;/snip&amp;gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Now that I have the address of the string I can dump that out with the SIE extention's !showstringw (double-byte words) command.&lt;!--EndFragment--&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/SPAN&gt;&amp;nbsp;0:000&amp;gt; !showstringw 0x002007e0&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/SPAN&gt;&amp;nbsp;Run-time error '70':Permission denied&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;What do have we here!&amp;nbsp; A security problem?&amp;nbsp; But wait didn't we already execute the application?&amp;nbsp; We already have access to the filesystem so what's the problem?&amp;nbsp; I look deeper in the stack at the initial windowing function which was probably called from the dll that encountered the problem.&amp;nbsp; So I inspect the output from kP and see &lt;FONT size=2&gt;user32!MessageBoxIndirectA on the call stack which takes a struct.&amp;nbsp; Upon examining the struct I see that the call was bubbled up via&amp;nbsp;odbc32.dll.&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;0:000&amp;gt; dt tagMSGBOXPARAMSA 0x0012fc4c&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;odbc32!tagMSGBOXPARAMSA&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;...&lt;/P&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;
&lt;P&gt;It turns out that the root cause in this case was the result of datasource issues.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9016305" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Debugging" scheme="http://blogs.msdn.com/bryangr/archive/tags/Debugging/default.aspx" /></entry><entry><title>Quick 'n Dirty Patch Validation</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/04/17/quick-n-dirty-patch-validation.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/04/17/quick-n-dirty-patch-validation.aspx</id><published>2008-04-18T03:21:00Z</published><updated>2008-04-18T03:21:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Since patching is currently on the brain I thought that I'd also include this little VBScript that I wrote a while back to do a quick 'n dirty patch validation.&amp;nbsp; The script takes two arguments 1) a&amp;nbsp;file with the servers to target (one per line)&amp;nbsp;and 2) a file with the hotfix ID that is expected to be installed (accepts form KB12345 or 12345, one per line).&amp;nbsp; After the script is complete you will have a semicolon delimited file that you can import into Excel and filter.&amp;nbsp; Happy patching.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;EM&gt;Example usage:&amp;nbsp; C:\&amp;gt;cscript verifyqfe.vbs servers.txt hotfixes.txt&lt;/EM&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;Const&lt;/SPAN&gt; KEY_QUERY_VALUE = &amp;amp;H0001&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;Const&lt;/SPAN&gt; HKEY_LOCAL_MACHINE = &amp;amp;H80000002&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;VerifyQfeInstalled&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; VerifyQfeInstalled()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; aHostArray, aQfeArray&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; bQfeFound&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; iIndex, iInnerIndex&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; oWmi, oFs, oHostList, oLog, oQfeList, oQfeItem, colQfeItems, oRegistry&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; sDate, sTime, sDateTime, sLog, sHostList, sQfeList, sHosts, sQfeContent, sServer, sQfeId, sQfeInfo, sHelpLink, sInstallDate&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sDate = &lt;SPAN style="COLOR: blue"&gt;Date&lt;/SPAN&gt;()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sDate = Replace(sDate, &lt;SPAN style="COLOR: #a31515"&gt;"/"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #a31515"&gt;"_"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sTime = Time()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sTime = Replace(sTime, &lt;SPAN style="COLOR: #a31515"&gt;":"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #a31515"&gt;"_"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sTime = Replace(sTime, &lt;SPAN style="COLOR: #a31515"&gt;" "&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #a31515"&gt;"_"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sDateTime = sDate &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;"_"&lt;/SPAN&gt; &amp;amp; sTime&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sLog = &lt;SPAN style="COLOR: #a31515"&gt;"VerifyQfeInstalled_"&lt;/SPAN&gt; &amp;amp; sDateTime &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;".log"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oFs = CreateObject(&lt;SPAN style="COLOR: #a31515"&gt;"Scripting.FileSystemObject"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oLog = oFs.CreateTextFile(sLog)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.WriteLine("Created file [" &amp;amp; sLog &amp;amp; "] and opened it for WRITING")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.StdOut.WriteLine &lt;SPAN style="COLOR: #a31515"&gt;"Processing started."&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; Wscript.Arguments.Count &amp;lt; 2 &lt;SPAN style="COLOR: blue"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.StdOut.WriteLine &lt;SPAN style="COLOR: #a31515"&gt;"ERROR: You must supply a host list file and QFE list file!"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oLog.Close()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oFs.DeleteFile sLog, &lt;SPAN style="COLOR: blue"&gt;True&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oLog = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oFs = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.Quit()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sHostList = Trim(Wscript.Arguments(0))&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sQfeList = Trim(Wscript.Arguments(1))&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; (oFs.FileExists(sHostList)) &lt;SPAN style="COLOR: blue"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.Write("Opening [" &amp;amp; sHostList &amp;amp; "] for READING...")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oHostList = oFs.OpenTextFile(sHostList, 1, &lt;SPAN style="COLOR: blue"&gt;False&lt;/SPAN&gt;, 0)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sHosts = oHostList.ReadAll&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.Write("READ...")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oHostList.Close()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oHostList = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.WriteLine("CLOSED")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; aHostArray = Split(sHosts, vbNewLine)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.WriteLine("Read [" &amp;amp; UBound(aHostArray) + 1 &amp;amp; "] items.")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.WriteBlankLines(1)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; (oFs.FileExists(sQfeList)) &lt;SPAN style="COLOR: blue"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.Write("Opening [" &amp;amp; sQfeList &amp;amp; "] for READING...")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oQfeList = oFs.OpenTextFile(sQfeList, 1, &lt;SPAN style="COLOR: blue"&gt;False&lt;/SPAN&gt;, 0)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sQfeContent = oQfeList.ReadAll&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.Write("READ...")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oQfeList.Close()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oQfeList = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.WriteLine("CLOSED")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; aQfeArray = Split(sQfeContent, vbNewLine)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.WriteLine("Read [" &amp;amp; UBound(aQfeArray) + 1 &amp;amp; "] items.")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.WriteBlankLines(1)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.StdOut.WriteLine &lt;SPAN style="COLOR: #a31515"&gt;"ERROR: The file you specified for the QFE list does not exist!"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oLog.Close()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oFs.DeleteFile sLog, &lt;SPAN style="COLOR: blue"&gt;True&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oLog = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oFs = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.Quit()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.StdOut.WriteLine &lt;SPAN style="COLOR: #a31515"&gt;"ERROR: The file you specified for the host list does not exist!"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oLog.Close()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oFs.DeleteFile sLog, &lt;SPAN style="COLOR: blue"&gt;True&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oLog = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oFs = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.Quit()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;For&lt;/SPAN&gt; iIndex = 0 &lt;SPAN style="COLOR: blue"&gt;To&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;UBound&lt;/SPAN&gt;(aHostArray)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sServer = Trim(aHostArray(iIndex))&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.StdOut.WriteLine &lt;SPAN style="COLOR: #a31515"&gt;"Checking "&lt;/SPAN&gt; &amp;amp; sServer&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; (PingHost(sServer)) &lt;SPAN style="COLOR: blue"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oWmi = GetObject(&lt;SPAN style="COLOR: #a31515"&gt;"winmgmts:{impersonationLevel=impersonate}!\\"&lt;/SPAN&gt; &amp;amp; sServer &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;"\root\cimv2"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;For&lt;/SPAN&gt; iInnerIndex = 0 &lt;SPAN style="COLOR: blue"&gt;To&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;UBound&lt;/SPAN&gt;(aQfeArray)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; bQfeFound = &lt;SPAN style="COLOR: blue"&gt;False&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; (Left(Trim(aQfeArray(iInnerIndex)), 2) &amp;lt;&amp;gt; &lt;SPAN style="COLOR: #a31515"&gt;"KB"&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sQfeId = &lt;SPAN style="COLOR: #a31515"&gt;"KB"&lt;/SPAN&gt; &amp;amp; Trim(aQfeArray(iInnerIndex))&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sQfeId = Trim(aQfeArray(iInnerIndex))&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sHelpLink = GetHelpLink(sServer, sQfeId)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sInstallDate = GetSecondaryDate(sServer, sQfeId)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; (sInstallDate &amp;lt;&amp;gt; &lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sInstallDate = MakeFriendlyDate(sInstallDate)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; colQfeItems = oWmi.ExecQuery(&lt;SPAN style="COLOR: #a31515"&gt;"SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID='"&lt;/SPAN&gt; &amp;amp;sQfeId &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;"'"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; (colQfeItems.Count &amp;lt;&amp;gt; 0) &lt;SPAN style="COLOR: blue"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;For&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Each&lt;/SPAN&gt; oQfeItem &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; colQfeItems&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; bQfeFound = &lt;SPAN style="COLOR: blue"&gt;True&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sQfeInfo = UCase(oQfeItem.CSName) &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;";"&lt;/SPAN&gt;&amp;nbsp; &amp;amp; oQfeItem.Description &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;";"&lt;/SPAN&gt; &amp;amp; oQfeItem.HotFixID &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;";"&lt;/SPAN&gt; &amp;amp; oQfeItem.InstallDate &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;";"&lt;/SPAN&gt; &amp;amp; sInstallDate &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;";"&lt;/SPAN&gt; &amp;amp; oQfeItem.InstalledBy &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;";"&lt;/SPAN&gt; &amp;amp; bQfeFound &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;";"&lt;/SPAN&gt; &amp;amp; sHelpLink&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oLog.WriteLine(sQfeInfo)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Next&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sQfeInfo = UCase(sServer) &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;";;"&lt;/SPAN&gt; &amp;amp; sQfeId &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;";;;;"&lt;/SPAN&gt; &amp;amp; bQfeFound &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;";"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oLog.WriteLine(sQfeInfo)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Next&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.StdOut.WriteLine &lt;SPAN style="COLOR: #a31515"&gt;"**WARNING** "&lt;/SPAN&gt; &amp;amp; sServer &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;" is not pingable!"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'oLog.WriteLine("**WARNING** " &amp;amp; sServer &amp;amp; " is not pingable!")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Next&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oLog.Close()&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.StdOut.WriteLine &lt;SPAN style="COLOR: #a31515"&gt;"Done processing."&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.StdOut.WriteLine &lt;SPAN style="COLOR: #a31515"&gt;"Log file is ["&lt;/SPAN&gt; &amp;amp; sLog &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;"]."&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oQfeItem = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; colQfeItems = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oWmi = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oLog = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oFs = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;Function&lt;/SPAN&gt; PingHost(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; sServer)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; oShell, oExec&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; sResults&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; bIsSuccess&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bIsSuccess = &lt;SPAN style="COLOR: blue"&gt;False&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oShell = CreateObject(&lt;SPAN style="COLOR: #a31515"&gt;"WScript.Shell"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oExec = oShell.Exec(&lt;SPAN style="COLOR: #a31515"&gt;"ping.exe -n 2 -w 1000 "&lt;/SPAN&gt; &amp;amp; sServer)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sResults = LCase(oExec.StdOut.ReadAll)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; InStr(sResults, &lt;SPAN style="COLOR: #a31515"&gt;"reply from"&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; InStr(sResults, &lt;SPAN style="COLOR: #a31515"&gt;"destination host unreachable"&lt;/SPAN&gt;) &lt;SPAN style="COLOR: blue"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'WScript.Echo "ERROR: Destination Unreachable!"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; bIsSuccess = &lt;SPAN style="COLOR: blue"&gt;True&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;'WScript.Echo "SUCCESS"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Wscript.StdOut.WriteLine &lt;SPAN style="COLOR: #a31515"&gt;"ERROR: Host Unreachable!"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oExec = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oShell = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PingHost = bIsSuccess&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Function&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;Function&lt;/SPAN&gt; MakeFriendlyDate(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; sDate)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; sYear, sMonth, sDay, sInstalledOn&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sYear = Left(sDate, 4)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sMonth = Mid(sDate, 5, 2)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sDay = Left(sDate, 2)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sInstalledOn = sMonth &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;"/"&lt;/SPAN&gt; &amp;amp; sDay &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;"/"&lt;/SPAN&gt; &amp;amp; sYear&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MakeFriendlyDate = sInstalledOn&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Function&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;Function&lt;/SPAN&gt; GetHelpLink(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; sServer, &lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; sQfeId)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; oRegistry&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; sKeyRoot, sKey, sValue, sHelpLink&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oRegistry = GetObject(&lt;SPAN style="COLOR: #a31515"&gt;"winmgmts:{impersonationLevel=impersonate}!\\"&lt;/SPAN&gt; &amp;amp; sServer &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;"\root\default:StdRegProv"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sKey = &lt;SPAN style="COLOR: #a31515"&gt;"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"&lt;/SPAN&gt; &amp;amp; sQfeId&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sValue = &lt;SPAN style="COLOR: #a31515"&gt;"HelpLink"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oRegistry.GetStringValue HKEY_LOCAL_MACHINE, sKey, sValue, sHelpLink&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oRegistry = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetHelpLink = sHelpLink&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Function&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;Function&lt;/SPAN&gt; GetSecondaryDate(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; sServer, &lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; sQfeId)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; oRegistry&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Dim&lt;/SPAN&gt; sKeyRoot, sKey, sValue, sInstallDate&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oRegistry = GetObject(&lt;SPAN style="COLOR: #a31515"&gt;"winmgmts:{impersonationLevel=impersonate}!\\"&lt;/SPAN&gt; &amp;amp; sServer &amp;amp; &lt;SPAN style="COLOR: #a31515"&gt;"\root\default:StdRegProv"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sKey = &lt;SPAN style="COLOR: #a31515"&gt;"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"&lt;/SPAN&gt; &amp;amp; sQfeId&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sValue = &lt;SPAN style="COLOR: #a31515"&gt;"InstallDate"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oRegistry.GetStringValue HKEY_LOCAL_MACHINE, sKey, sValue, sInstallDate&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;Set&lt;/SPAN&gt; oRegistry = &lt;SPAN style="COLOR: blue"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetSecondaryDate = sInstallDate&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Function&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8405407" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Quick 'n Dirty" scheme="http://blogs.msdn.com/bryangr/archive/tags/Quick+_2700_n+Dirty/default.aspx" /><category term="Systems Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Systems+Engineering/default.aspx" /></entry><entry><title>Doc, do you think you can patch 'em up?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/04/17/doc-do-you-think-you-can-patch-em-up.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/04/17/doc-do-you-think-you-can-patch-em-up.aspx</id><published>2008-04-18T02:44:00Z</published><updated>2008-04-18T02:44:00Z</updated><content type="html">&lt;P&gt;To&amp;nbsp;some of you the second Tuesday of each month is just another day, but to the rest of us this day is known as "patch Tuesday".&amp;nbsp;&amp;nbsp;The second&amp;nbsp;Tuesday of each month is when Microsoft releases security updates for it's products to the world.&amp;nbsp; Our group previously had a patching process that worked like a charm for the majority of our boxes which were running W2K3 but now we have several WS08 RTM&amp;nbsp;boxes in production as well.&amp;nbsp; During the last patching cycle I had to rig up a less-than-elegant solution to patch those WS08 servers so I told myself that after the dust settled I'd look into a better way of handling it as well as consolidating the two processes.&lt;/P&gt;
&lt;P&gt;After pondering how I would attack this issue I found that the &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/aa387099(VS.85).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/aa387099(VS.85).aspx"&gt;Windows Update Agent API&lt;/A&gt;&amp;nbsp;was a likely candidate to assist me.&amp;nbsp; I fired up Visual Studio and set a reference to wuapi.dll then quickly threw together a proof-of-concept to show to the rest of my team.&amp;nbsp; Below you will find the source necessary to query Windows Update, add packages to an install manifest, download said packages, and install the packages.&amp;nbsp; Hopefully this will get you started if you are in fact looking for a custom Windows Update solution.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1pt solid; PADDING-RIGHT: 1pt; BORDER-TOP: #cccccc 1pt solid; PADDING-LEFT: 1pt; FONT-SIZE: 9pt; BACKGROUND: #f5f5f5; PADDING-BOTTOM: 1pt; OVERFLOW: auto; BORDER-LEFT: #cccccc 1pt solid; WIDTH: 100%; COLOR: black; PADDING-TOP: 1pt; BORDER-BOTTOM: #cccccc 1pt solid; FONT-FAMILY: Courier New"&gt;&lt;PRE style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Main(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;[] args)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;{&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;StreamWriter&lt;/SPAN&gt; hLogFileHandle = &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hLogFileHandle = GetLogFileHandle(&lt;SPAN style="COLOR: #a31515"&gt;@"C:\sdmedic\logs\wuagent.log"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Installation started by: "&lt;/SPAN&gt; + &lt;SPAN style="COLOR: #2b91af"&gt;Environment&lt;/SPAN&gt;.UserName + &lt;SPAN style="COLOR: #2b91af"&gt;Environment&lt;/SPAN&gt;.NewLine);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #2b91af"&gt;DateTime&lt;/SPAN&gt;.Now.ToString());&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;UpdateSessionClass&lt;/SPAN&gt; oUpdateSession = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;UpdateSessionClass&lt;/SPAN&gt;();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;UpdateSearcher&lt;/SPAN&gt; oUpdateSearcher = (&lt;SPAN style="COLOR: #2b91af"&gt;UpdateSearcher&lt;/SPAN&gt;)oUpdateSession.CreateUpdateSearcher();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;ISearchResult&lt;/SPAN&gt; oSearchResult = oUpdateSearcher.Search(&lt;SPAN style="COLOR: #a31515"&gt;"IsInstalled=0 and Type='Software'"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (oSearchResult.Updates.Count &amp;gt; 0)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Found "&lt;/SPAN&gt; + oSearchResult.Updates.Count + &lt;SPAN style="COLOR: #a31515"&gt;" updates."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Found "&lt;/SPAN&gt; + oSearchResult.Updates.Count + &lt;SPAN style="COLOR: #a31515"&gt;" updates."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; iIndex = 0; iIndex &amp;lt; oSearchResult.Updates.Count; iIndex++)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;//Console.WriteLine(oSearchResult.Updates[iIndex].Title);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;UpdateCollectionClass&lt;/SPAN&gt; oNeededUpdates = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;UpdateCollectionClass&lt;/SPAN&gt;();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; iIndex = 0; iIndex &amp;lt; oSearchResult.Updates.Count; iIndex++)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;IUpdate&lt;/SPAN&gt; oUpdatePackage = oSearchResult.Updates[iIndex];&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oNeededUpdates.Add(oUpdatePackage);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Added "&lt;/SPAN&gt; + oUpdatePackage.Title + &lt;SPAN style="COLOR: #a31515"&gt;" to download manifest."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Added "&lt;/SPAN&gt; + oUpdatePackage.Title + &lt;SPAN style="COLOR: #a31515"&gt;" to download manifest."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;UpdateDownloader&lt;/SPAN&gt; oDownloader = oUpdateSession.CreateUpdateDownloader();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oDownloader.Updates = oNeededUpdates;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.Write(&lt;SPAN style="COLOR: #a31515"&gt;"Downloading updates..."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Downloading updates..."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oDownloader.Download();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"done"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"done"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Verifying downloaded updates..."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Verifying downloaded updates..."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; iIndex = 0; iIndex &amp;lt; oSearchResult.Updates.Count; iIndex++)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;IUpdate&lt;/SPAN&gt; oUpdatePackage = oSearchResult.Updates[iIndex];&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (oUpdatePackage.IsDownloaded)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.Write(&lt;SPAN style="COLOR: #a31515"&gt;"Verified "&lt;/SPAN&gt; + oUpdatePackage.Title);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Verified "&lt;/SPAN&gt; + oUpdatePackage.Title);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;UpdateCollectionClass&lt;/SPAN&gt; oUpdateManifest = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;UpdateCollectionClass&lt;/SPAN&gt;();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; iIndex = 0; iIndex &amp;lt; oSearchResult.Updates.Count; iIndex++)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;IUpdate&lt;/SPAN&gt; oUpdatePackage = oSearchResult.Updates[iIndex];&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (oUpdatePackage.IsDownloaded)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; oUpdateManifest.Add(oUpdatePackage);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Added "&lt;/SPAN&gt; + oUpdatePackage.Title + &lt;SPAN style="COLOR: #a31515"&gt;" to install manifest."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Added "&lt;/SPAN&gt; + oUpdatePackage.Title + &lt;SPAN style="COLOR: #a31515"&gt;" to install manifest."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;UpdateInstaller&lt;/SPAN&gt; oInstaller = (&lt;SPAN style="COLOR: #2b91af"&gt;UpdateInstaller&lt;/SPAN&gt;)oUpdateSession.CreateUpdateInstaller();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oInstaller.Updates = oUpdateManifest;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Installing..."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Installing..."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;IInstallationResult&lt;/SPAN&gt; oInstallationResult = oInstaller.Install();&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Result: "&lt;/SPAN&gt; + oInstallationResult.ResultCode.ToString());&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Result: "&lt;/SPAN&gt; + oInstallationResult.ResultCode.ToString());&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Reboot: "&lt;/SPAN&gt; + oInstallationResult.RebootRequired.ToString());&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Reboot: "&lt;/SPAN&gt; + oInstallationResult.RebootRequired.ToString());&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; iIndex = 0; iIndex &amp;lt; oSearchResult.Updates.Count; iIndex++)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(oUpdateManifest[iIndex].Title + &lt;SPAN style="COLOR: #a31515"&gt;": "&lt;/SPAN&gt; + oInstallationResult.GetUpdateResult(iIndex).ResultCode.ToString());&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, oUpdateManifest[iIndex].Title + &lt;SPAN style="COLOR: #a31515"&gt;": "&lt;/SPAN&gt; + oInstallationResult.GetUpdateResult(iIndex).ResultCode.ToString());&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(oUpdateManifest[iIndex].Title + &lt;SPAN style="COLOR: #a31515"&gt;": "&lt;/SPAN&gt; + oInstallationResult.GetUpdateResult(iIndex).RebootRequired.ToString());&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, oUpdateManifest[iIndex].Title + &lt;SPAN style="COLOR: #a31515"&gt;": "&lt;/SPAN&gt; + oInstallationResult.GetUpdateResult(iIndex).RebootRequired.ToString());&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (oInstallationResult.RebootRequired)&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Initiating system restart."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WriteToLogFile(hLogFileHandle, &lt;SPAN style="COLOR: #a31515"&gt;"Initiating system restart."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ExitWindows(&lt;SPAN style="COLOR: #2b91af"&gt;ExitWindowsTypes&lt;/SPAN&gt;.Reboot);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CloseLogFileHandle(hLogFileHandle);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CloseLogFileHandle(hLogFileHandle);&lt;/PRE&gt;&lt;PRE style="MARGIN: 0px"&gt;}&lt;/PRE&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8405374" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Software Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Software+Engineering/default.aspx" /><category term="Quick 'n Dirty" scheme="http://blogs.msdn.com/bryangr/archive/tags/Quick+_2700_n+Dirty/default.aspx" /><category term="Systems Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Systems+Engineering/default.aspx" /></entry><entry><title>Don't let the doorknob hit you...</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/02/26/don-t-let-the-doorknob-hit-you.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/02/26/don-t-let-the-doorknob-hit-you.aspx</id><published>2008-02-26T23:54:00Z</published><updated>2008-02-26T23:54:00Z</updated><content type="html">&lt;P&gt;The last few weeks have been a blur; in part because I took a mini-vacation, but the majority of my time has been spent trying to do my part to get a few of our flagship products out the door.&amp;nbsp; It was a long, hard, and painful road to the release of &lt;A class="" href="http://www.microsoft.com/windowsserver2008" target=_blank mce_href="http://www.microsoft.com/windowsserver2008"&gt;Windows Server 2008&lt;/A&gt; but I think that it was definetly worth it.&amp;nbsp; Personally,&amp;nbsp;I've been waiting specifically for &lt;A class="" href="http://www.iis.net/" target=_blank mce_href="http://www.iis.net"&gt;IIS7&lt;/A&gt; and it's more modular design, plus I like having the ability to extend sub-systems without having to be a magician (meaning you probably won't see me writing a C++ ISAPI fiter again).&lt;/P&gt;
&lt;P&gt;In addition to WS08 and IIS7 I've also been looking forward to &lt;A class="" href="http://msdn2.microsoft.com/en-us/vstudio" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vstudio"&gt;Visual Studio 2008&lt;/A&gt;.&amp;nbsp; There are lots of cool things that come with VS08 that would make life so much easier for me like; the ability to target multiple versions of the .NET Framework, or &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/bb384054.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/bb384054.aspx"&gt;automatic properties&lt;/A&gt; (part of the new C# compiler),&amp;nbsp;or &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/bb383977.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/bb383977.aspx"&gt;extension methods&lt;/A&gt;.&amp;nbsp; Anyway, whatever product that you've been waiting for I hope you find the enhancements gratifying and most of all helpful in making your job a breeze!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7910122" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Software Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Software+Engineering/default.aspx" /><category term="Systems Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Systems+Engineering/default.aspx" /><category term="et cetera" scheme="http://blogs.msdn.com/bryangr/archive/tags/et+cetera/default.aspx" /></entry><entry><title>F5 brought sexy back; at least to networking</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/bryangr/archive/2008/02/12/f5-brought-sexy-back-at-least-to-networking.aspx" /><id>http://blogs.msdn.com/bryangr/archive/2008/02/12/f5-brought-sexy-back-at-least-to-networking.aspx</id><published>2008-02-12T17:41:00Z</published><updated>2008-02-12T17:41:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Over the years I‘ve dealt with a number of technologies and expensive devices that do funny things with network traffic.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;None of them really made me smile; you know what I mean if you’ve ever tried to read a book titled “Telecommunication Traffic Engineering with Multi-Protocol Label Switching”.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The world of networking and telecommunications was in my opinion the driest ever after you get past the basics, and even that’s questionable for some.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;To get to my point, I’ve done quite a bit of work in the world of web operations and in doing so I ran into these strange “application-aware network devices” called load balancers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;At this point I had the googly eyes and was interested.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;How could it be; a network device that actually cares what’s flowing through it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Anyway, I’ve had the chance to work with a few major appliances: &lt;A class="" href="http://en.wikipedia.org/wiki/Cisco_LocalDirector" target=_blank mce_href="http://en.wikipedia.org/wiki/Cisco_LocalDirector"&gt;Cisco’s LocalDirector&lt;/A&gt; and &lt;A class="" href="http://www.cisco.com/en/US/products/hw/modules/ps2706/ps780/index.html" target=_blank mce_href="http://www.cisco.com/en/US/products/hw/modules/ps2706/ps780/index.html"&gt;Content Switching Module&lt;/A&gt;, &lt;A class="" href="http://www.nortel.com/" target=_blank mce_href="http://www.nortel.com/"&gt;Nortel’s Alteon 180e&lt;/A&gt; and &lt;A class="" href="http://www.f5.com/products/big-ip/product-modules/local-traffic-manager.html" target=_blank mce_href="http://www.f5.com/products/big-ip/product-modules/local-traffic-manager.html"&gt;F5’s Local Traffic Manager&lt;/A&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Now at one point I was a big Cisco buff and enjoyed the mystique of operating in the IOS, I felt almost&amp;nbsp;as&amp;nbsp;elite as when I worked on UNIX, I carried my laptop and console cable like an exhibition of coolness.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In the world of web ops you live in a world where precise application upgrades are crucial and downtime is sometimes not an option.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In that world, hopping on a network device and issuing some cryptic commands to pull servers out of the web farm is not as elegant as one would like.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Enter F5’s BIG-IP and its iControl SDK.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;With iControl you can now use SOAP/XML calls to control your F5 device.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This means that now you can do some integration and have self-aware applications that can add and remove servers from the farm based on performance. Now that’s sexy!&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The other heavy hitters came along with similar solutions but in my opinion F5 had a leg up.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;F5 also has some other appliances that I think are really interesting and seem to be best in class, like the &lt;A class="" href="http://www.f5.com/products/big-ip/product-modules/global-traffic-manager.html" target=_blank mce_href="http://www.f5.com/products/big-ip/product-modules/global-traffic-manager.html"&gt;3DNS&lt;/A&gt; product (I guess now it’s called Global Traffic Manager) and the &lt;A class="" href="http://www.f5.com/products/big-ip/product-modules/webaccelerator.html" target=_blank mce_href="http://www.f5.com/products/big-ip/product-modules/webaccelerator.html"&gt;WebAccelerator&lt;/A&gt;.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7633976" width="1" height="1"&gt;</content><author><name>bryangr</name><uri>http://blogs.msdn.com/members/bryangr.aspx</uri></author><category term="Network Engineering" scheme="http://blogs.msdn.com/bryangr/archive/tags/Network+Engineering/default.aspx" /></entry></feed>