<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>WER Services</title><link>http://blogs.msdn.com/b/wer/</link><description>This blog focuses on technologies that support Windows Error Reporting and Windows Quality data.</description><dc:language>en-US</dc:language><generator>Telligent Community 5.6.583.17018 (Build: 5.6.583.17018)</generator><itunes:author>Kevin Hill</itunes:author><itunes:summary>This blog focuses on technologies that support Windows Error Reporting and Windows Quality data.</itunes:summary><itunes:owner><itunes:name>Kevin Hill</itunes:name><itunes:email>khill@microsoft.com</itunes:email></itunes:owner><itunes:category text="Windows Error Reporting" /><itunes:explicit>no</itunes:explicit><itunes:keywords>wer, windows error reporting, error reporting, error, windows</itunes:keywords><language>en-US</language><item><title>The only thing constant is change – Part 1</title><link>http://blogs.msdn.com/b/wer/archive/2011/08/08/the-only-thing-constant-is-change-part-1.aspx</link><pubDate>Mon, 08 Aug 2011 15:52:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10193696</guid><dc:creator>Gr8Gatsby</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=10193696</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2011/08/08/the-only-thing-constant-is-change-part-1.aspx#comments</comments><description>&lt;p&gt;Hello it’s Kevin Hill here. I want to provide some insight into where we are heading with the WER datasets for partners.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;We surveyed users of WER data on &lt;a href="https://winqual.microsoft.com"&gt;https://winqual.microsoft.com&lt;/a&gt; to get feedback for the direction of features, the below two themes surfaced quickly as a result:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;“Reduce noise” – we had a lot of feedback around filtering out low priority “events” as these end up being time-wasters.&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;“More automation &amp;amp; notifications” – Don’t make me always come to the website to get information push it to me.&lt;/b&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We have made feature investments to help make progress in these areas:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;“Reduce noise”&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;For the user mode datasets in the past we had shown “event” (a.k.a. Bucket) based information.&amp;#160; We are moving this dataset to be based on Failures which are the result of the !Analyze debugging extension.&amp;#160;&amp;#160; Below I scratch the surface with the difference between these two datasets, but watching the Channel 9 video really helps to understand what logic goes into analyzing failures.&lt;/p&gt;  &lt;p&gt;Buckets classify issues by: &lt;b&gt;Application Name&lt;/b&gt;, &lt;b&gt;Application Version&lt;/b&gt;, &lt;b&gt;Application Build Date&lt;/b&gt;, &lt;b&gt;Module Name&lt;/b&gt;, &lt;b&gt;Module Version&lt;/b&gt;, &lt;b&gt;Module Build Date&lt;/b&gt;, &lt;b&gt;OS Exception Code&lt;/b&gt;, and &lt;b&gt;Module Code Offset&lt;/b&gt;. On the surface this looks like a very precise way to classify issues; however it can be misleading at times since we generate this bucket on the Windows OS client without performing any symbol analysis on the memory dump.&amp;#160; The module that is picked by the Windows Error Reporting client is the module at the top of the stack.&amp;#160; We have found that investigating these issues as raw buckets can cause many investigations that result in a faulting module that is different from the original bucket determination.&amp;#160; &lt;a title="WER History 101" href="http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-2-wer-history-101.aspx" target="_blank"&gt;Ryan Kivett (a developer lead from the Windows Reliability team) has a great blog post titled: WER History 101&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Failures, however, are the result of processing memory dumps collected from buckets in order to more precisely assess blame to the appropriate module.&amp;#160; I have included the graphic below to show how buckets can result in multiple different failures.&amp;#160; While this is a typically scenario once private symbol analysis has been applied, there can also be cases where multiple buckets get aggregated into a !Unknown symbol as well.&amp;#160; If you download cabs and run !Analyze with your own private symbol paths you will break down the !Unknown failures into a very precise set of issues.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-15-26-metablogapi/8053.image_5F00_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-15-26-metablogapi/5314.image_5F00_thumb.png" width="517" height="297" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here is another example considering multiple buckets:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-15-26-metablogapi/0116.image_5F00_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-15-26-metablogapi/2063.image_5F00_thumb_5F00_1.png" width="521" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Since we are performing automated analysis of issues using private symbols we are able to filter out issues where we know we will likely be able to provide a fix, in order to provide fewer issues that will result in investigations that point to issues in modules that don’t belong to you.&amp;#160; This is one of the ways we are reducing the noise in the dataset.&amp;#160; This doesn’t mean that there will be fewer number of issues, but the issues we share are more likely to be actionable for your software.&lt;/p&gt;  &lt;p&gt;The below video contains a detailed explanation of the logic behind !Analyze and what goes into the failure dataset.&lt;/p&gt;  &lt;p&gt;&lt;a title="!Analyze video" href="http://channel9.msdn.com/blogs/charles/david-grant-and-ryan-kivett-analyze-automatic-root-cause-analysis" rel="tag" target="_blank"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://mschnlnine.vo.llnwd.net/d1/ch9/5/8/8/2/8/4/Win7Analyze_large_ch9.png" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;“More automation &amp;amp; notifications”&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;We are providing email updates for all the new failure based reports that are going to be published based on the new user mode failure based dataset and the kernel mode failure based dataset as well. &lt;/p&gt;  &lt;p&gt;Stay tuned for more updates on planned changes, Part 2 will provide more information…&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10193696" width="1" height="1"&gt;</description></item><item><title>Why You Should Use XMLHttpRequest Asynchronously</title><link>http://blogs.msdn.com/b/wer/archive/2011/08/03/why-you-should-use-xmlhttprequest-asynchronously.aspx</link><pubDate>Wed, 03 Aug 2011 20:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10192555</guid><dc:creator>Dom R</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=10192555</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2011/08/03/why-you-should-use-xmlhttprequest-asynchronously.aspx#comments</comments><description>&lt;p&gt;8.4% of all hangs in IE9 in the past month are caused by XMLHttpRequest objects blocking the UI thread with a synchronous request. That&amp;rsquo;s a huge number! With some manageable code changes, these hangs can be avoided, and developers can give their users a better experience across their websites. We&amp;rsquo;ll get into what&amp;rsquo;s happening here, what you can do about it, and we&amp;rsquo;ll give a little demonstration to see firsthand what can happen when a synchronous request hangs the browser.&lt;/p&gt;
&lt;h2&gt;Synchronous XMLHttpRequest Blocks the UI Thread&lt;/h2&gt;
&lt;p&gt;We already know performing a &lt;a title="Preventing Hangs in Windows Applications" href="http://msdn.microsoft.com/en-us/library/dd744765(v=vs.85).aspx" target="_blank"&gt;blocking operation on a UI thread is asking for trouble&lt;/a&gt;. We&amp;rsquo;ve &lt;a title="Let There Be Hangs: Part 1 (Not Responding)" href="http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-1-not-responding.aspx" target="_blank"&gt;blogged&lt;/a&gt; about this before. It might not be apparent, but this is exactly what can happen when calling the XMLHttpRequest.send() method synchronously (i.e. passing false for bAsync when calling the open method). The UI thread has to wait until it gets a response from the server, or until the request times out. While waiting, it&amp;rsquo;s not pumping messages.&lt;/p&gt;
&lt;h2&gt;Why Use Synchronous XMLHttpRequest At All?&lt;/h2&gt;
&lt;p&gt;Developers tend to use synchronous over asynchronous is because it&amp;rsquo;s easier and can many times lead to less complex code. This &lt;a title="Is there any reason to use a synchronous XMLHttpRequest?" href="http://stackoverflow.com/questions/2088318/is-there-any-reason-to-use-a-synchronous-xmlhttprequest" target="_blank"&gt;StackOverflow thread&lt;/a&gt; states some potentially valid opinions on why you&amp;rsquo;d use one over the other, but nothing compelling enough that makes it worth the risk.&lt;/p&gt;
&lt;h2&gt;Fixing It&amp;hellip;&lt;/h2&gt;
&lt;p&gt;There are at least two ways you can write your code to avoid these hangs. The first method is preferred, because you won&amp;rsquo;t block on the UI thread. The second is less than optimal, because you&amp;rsquo;ll still block, but for less time than you&amp;rsquo;re probably doing now.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="text-decoration: underline;"&gt;Write your code to call open asynchronously.&lt;/span&gt; &lt;br /&gt;You need to pass true for the bAsync parameter to the &lt;a title="XMLHttpRequest Open Method" href="http://msdn.microsoft.com/en-us/library/ms536648(v=vs.85).aspx" target="_blank"&gt;open method&lt;/a&gt;, and you need to write an event handler for the &lt;a title="XMLHttpRequest Onreadystatechange Event" href="http://msdn.microsoft.com/en-us/library/dd576252(v=VS.85).aspx" target="_blank"&gt;onreadystatechange event&lt;/a&gt;. There are many examples of how to do this out one the web, like &lt;a title="XMLHttpRequest Object" href="http://msdn.microsoft.com/en-us/library/ms535874%28VS.85%29.aspx" target="_blank"&gt;this one&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span style="text-decoration: underline;"&gt;Set the timeout property.&lt;br /&gt;&lt;/span&gt;Because the Desktop Window Manager detects a hang after 5 seconds of unresponsiveness, and IE9 Hang Resistance after 8, I would set the &lt;a title="XMLHttpRequest Timeout Property" href="http://msdn.microsoft.com/en-us/library/cc304105(v=VS.85).aspx" target="_blank"&gt;timeout&amp;nbsp;property&lt;/a&gt; to something under 5 seconds. You may also want to consider creating a function to handle the &lt;a title="XMLHttpRequest Ontimeout Event" href="http://msdn.microsoft.com/en-us/library/cc304105(v=VS.85).aspx" target="_blank"&gt;ontimeout event&lt;/a&gt;.&lt;br /&gt;(How did I get these numbers? Refer to &lt;a title="Let There Be Hangs: Part 1 (Not Responding)" href="http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-1-not-responding.aspx" target="_blank"&gt;here&lt;/a&gt; and &lt;a title="Hang Resistance in IE9" href="http://blogs.msdn.com/b/ie/archive/2011/04/19/hang-resistance-in-ie9.aspx" target="_blank"&gt;here&lt;/a&gt; respectively &amp;ndash; also already mentioned above)&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;How About an Example?&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s dig into the details by creating a couple of scenarios:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We&amp;rsquo;ll create some code that will make a synchronous request and hang the browser, and then&lt;/li&gt;
&lt;li&gt;change the code to be asynchronous, and observe the acute change in browser behavior.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The goal of these scenarios is to demonstrate how switching from synchronous to asynchronous requests will improve the user experience of your web applications.&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;DISCLAIMER:&lt;/strong&gt;&lt;/span&gt; This will hang your browser and may result in unintended, perhaps even undesirable behavior on both the client and the server. In other words, don&amp;rsquo;t run this on your production server, or any other machine that can&amp;rsquo;t tolerate running instable and potentially broken code.&lt;/p&gt;
&lt;h2&gt;&amp;nbsp;The Setup&lt;/h2&gt;
&lt;p&gt;You&amp;rsquo;ll need a web server capable of running ASP.NET if you want to follow the example directly. I realize some readers may not be using ASP.NET, but the code should be straight-forward enough that you can adapt it to other environments without too much trouble.&lt;/p&gt;
&lt;p&gt;Also, I will assume you are familiar with your web server environment and know how to render a page server-side.&lt;/p&gt;
&lt;p&gt;Copy this code into your favorite text editor and save it as &lt;strong&gt;hangme.aspx&lt;/strong&gt; somewhere on your web server.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;code&gt;&amp;nbsp;&amp;lt;!-- code starts after this line --&amp;gt;&lt;br /&gt; &amp;lt;%@ Page Language="C#" %&amp;gt; &lt;br /&gt; &amp;lt;html&amp;gt; &lt;br /&gt; &amp;lt;head&amp;gt; &lt;br /&gt; &amp;lt;title&amp;gt;XmlHttpRequest open hang test&amp;lt;/title&amp;gt; &lt;br /&gt; &amp;lt;script runat="server"&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; protected void Page_Load(object sender, EventArgs e) { &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if(Request.QueryString["hang"] == "1") {&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; int seconds = 0; &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Int32.TryParse(Request.QueryString["seconds"], out seconds); &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; System.Threading.Thread.Sleep(seconds * 1000); &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; } &lt;br /&gt; &amp;nbsp;&amp;nbsp; } &lt;br /&gt; &amp;lt;/script&amp;gt; &lt;br /&gt; &amp;lt;script type="text/javascript"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp; function call_hangme() { &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; var oReq; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (window.XMLHttpRequest) { &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; oReq = new XMLHttpRequest(); &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; } &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (oReq != null) { &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; var sUrl = "http://localhost/hangme.aspx?hang=1&amp;amp;seconds=360"; &lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;!-- change localhost to your server name if applicable --&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; document.getElementById("txt1").innerHTML = "Request Sent..."; &lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;!-- pass false for the bAsync parameter for a synchronous request --&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; oReq.open("GET", sUrl, false); &lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; oReq.send(); &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; document.getElementById("txt1").innerHTML = "Response Received!"; &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; } &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; else { &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; window.alert("Error creating XmlHttpRequest object."); &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;lt;/script&amp;gt; &lt;br /&gt; &amp;lt;/head&amp;gt; &lt;br /&gt; &amp;lt;body&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Click this button to hang the browser&amp;lt;/p&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;lt;form name="form1" action="" method="get"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;input type="button" name="btn1" value="hang me" onClick="call_hangme()"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;lt;p id="txt1"/&amp;gt; &lt;br /&gt; &amp;lt;/body&amp;gt; &lt;br /&gt; &amp;lt;/html&amp;gt; &lt;br /&gt; &amp;lt;!-- code ends on the line before this one --&amp;gt;&lt;/code&gt;&lt;/span&gt; &lt;/pre&gt;
&lt;h2&gt;&amp;nbsp;Make It Hang&lt;/h2&gt;
&lt;p&gt;Now,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Internet Explorer and browse to the hangme.aspx page.&lt;/li&gt;
&lt;li&gt;Click the &amp;ldquo;hang me&amp;rdquo; button.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Uh-oh! We&amp;rsquo;re hung! Because we told the thread to sleep for 6 minutes, we&amp;rsquo;re going to be here awhile. If you&amp;rsquo;re using IE9, you&amp;rsquo;ve probably noticed the gold band at the bottom offering to &amp;ldquo;Recover webpage&amp;rdquo;. If you&amp;rsquo;re using another browser, you&amp;rsquo;ve probably got a ghosted window.&lt;/p&gt;
&lt;h2&gt;Calling Open Asynchronously&lt;/h2&gt;
&lt;p&gt;Copy this code new file and save it as &lt;strong&gt;wont_hangme.aspx&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;code&gt; &amp;lt;!-- code starts after this line --&amp;gt;&amp;nbsp; &lt;br /&gt; &amp;lt;%@ Page Language="C#" %&amp;gt;&lt;br /&gt; &amp;lt;html&amp;gt;&lt;br /&gt; &amp;lt;head&amp;gt;&lt;br /&gt; &amp;lt;title&amp;gt;XmlHttpRequest open hang test&amp;lt;/title&amp;gt;&lt;br /&gt; &amp;lt;script runat="server"&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; protected void Page_Load(object sender, EventArgs e) {&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if(Request.QueryString["hang"] == "1") {&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; int seconds = 0;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Int32.TryParse(Request.QueryString["seconds"], out seconds);&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; System.Threading.Thread.Sleep(seconds * 1000);&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;lt;/script&amp;gt;&lt;br /&gt; &amp;lt;script type="text/javascript"&amp;gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp; function hangme() {&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; var oReq;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (window.XMLHttpRequest) {&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; oReq = new XMLHttpRequest();&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (oReq != null) {&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;!-- change localhost to your server name if applicable --&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; var sUrl = "http://localhost/wont_hangme.aspx?hang=1&amp;amp;seconds=500"; &lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; document.getElementById("txt1").innerHTML = "Request Sent...";&lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;!-- pass true for the bAsync parameter --&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; oReq.open("GET", sUrl, true); &lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="background-color: #ffff00;"&gt; &amp;lt;!-- Here we define an anonymous function for the &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;onreadystatechange event. &lt;/span&gt;&lt;span style="background-color: #ffff00;"&gt; We check if we received all the data, &lt;br /&gt; &amp;gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;and the request was successful before changing the text&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ffff00;"&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff00;"&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; oReq.onreadystatechange = function() {&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ffff00;"&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (oReq.readyState == 4 &amp;amp;&amp;amp; oReq.status == 200) {&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ffff00;"&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; document.getElementById("txt1").innerHTML = "Response Received!";&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ffff00;"&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ffff00;"&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; oReq.send();&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; else {&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; window.alert("Error creating XmlHttpRequest object.");&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;nbsp;&amp;nbsp; }&lt;br /&gt; &amp;lt;/script&amp;gt;&lt;br /&gt; &amp;lt;/head&amp;gt;&lt;br /&gt; &amp;lt;body&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Click this button to hang the browser&amp;lt;/p&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;lt;form name="form1" action="" method="get"&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;input type="button" name="btn1" value="hang me" onClick="hangme()"&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;lt;p id="txt1"/&amp;gt;&lt;br /&gt; &amp;lt;/body&amp;gt;&lt;br /&gt; &amp;lt;/html&amp;gt;&lt;br /&gt; &amp;lt;!-- code ends on the line before this one --&amp;gt; &lt;/code&gt;&lt;/span&gt;
 &lt;/pre&gt;
&lt;p&gt;The new code is highlighted. Here, we&amp;rsquo;re now calling open with bAsync = true, which means we&amp;rsquo;re making an asynchronous call. This will free up the UI thread to do other things, instead of it being blocked waiting for the response or timeout. If we&amp;rsquo;re not blocked, we can pump messages, and if we can do that, we&amp;rsquo;re not hung!&lt;/p&gt;
&lt;p&gt;Now, when the response eventually comes back from the server, we&amp;rsquo;ll need a function to handle it. That is what the highlighted code does. It&amp;rsquo;s our event handler for &lt;a title="XMLHttpRequest Onreadystatechange Event" href="http://msdn.microsoft.com/en-us/library/dd576252(v=VS.85).aspx" target="_blank"&gt;onreadystatechange event&lt;/a&gt;. As you can see, I&amp;rsquo;m only checking that there response was successful (&lt;a title="XMLHttpRequest Status Property" href="http://msdn.microsoft.com/en-us/library/ms534650(v=VS.85).aspx" target="_blank"&gt;status&lt;/a&gt; == 200) and that all the data has been received (&lt;a title="XMLHttpRequest readyState Property" href="http://msdn.microsoft.com/en-us/library/ms534361(v=VS.85).aspx" target="_blank"&gt;readyState&lt;/a&gt; == 4).&lt;/p&gt;
&lt;h2&gt;Can We Make It Hang Now?&lt;/h2&gt;
&lt;p&gt;Again,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Internet Explorer and browse to the cant_hangme.aspx page.&lt;/li&gt;
&lt;li&gt;Click the &amp;ldquo;hang me&amp;rdquo; button.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Voil&amp;agrave;! You&amp;rsquo;ll see the request is sent, but the browser is not hung. When the response finally makes its way back, the text will change; all the while you&amp;rsquo;re still able to interact with the page.&lt;/p&gt;
&lt;h2&gt;In Closing&lt;/h2&gt;
&lt;p&gt;As stated from the outset, you want to implement your XMLHttpRequest calls asynchronously. This example clearly demonstrates why; you&amp;rsquo;ll improve the responsiveness of your pages, avoid hangs, and most importantly, give your users a better experience.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10192555" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/WER/">WER</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Hang/">Hang</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Hung/">Hung</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/xmlhttprequest/">xmlhttprequest</category></item><item><title>Using the Winqual Software Web Services with Live ID authentication</title><link>http://blogs.msdn.com/b/wer/archive/2011/02/09/using-the-winqaul-software-web-serviecs-with-live-id-authentication.aspx</link><pubDate>Wed, 09 Feb 2011 23:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10127042</guid><dc:creator>HardikPanchal</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=10127042</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2011/02/09/using-the-winqaul-software-web-serviecs-with-live-id-authentication.aspx#comments</comments><description>&lt;div id="codeSnippetWrapper"&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;In our early February release we switched from custom authentication to Live ID authentication. We had posted sample power-shell scripts to demonstrate how to download cabs, get event hit data etc.&lt;/p&gt;
&lt;p&gt;I want to share simple C# sample code&amp;nbsp; snippet that demonstrates how to interact with the Windows Error Reporting web services at the most basic level.&amp;nbsp; This example is provided as-is with no warranties:&amp;nbsp; This script shows how to download a cab for a bucket/event.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This code snippet is divided into two parts: The first part is how to do authentication, and the second part is a helper method to download cabs for the event.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;NOTE :&lt;/span&gt;&amp;nbsp; &lt;/strong&gt;&lt;span style="color: #1f497d;"&gt;&lt;span style="font-size: small; font-family: Times New Roman;"&gt;You need to install sample application from &lt;/span&gt;&lt;a href="http://wer.codeplex.com/"&gt;&lt;span style="font-size: small; font-family: Times New Roman; color: #0000ff;"&gt;http://wer.codeplex.com/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small; font-family: Times New Roman;"&gt; . Live ID authentication DLL &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; font-family: 'Courier New'; color: green;"&gt;Microsoft.Whos.Shared.Client.LiveID&lt;/span&gt;&lt;span style="color: #1f497d;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Times New Roman;"&gt; will be installed to your GAC for authentication once you install sample application. You need to add DLL mentioned to compile your code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code snippet to authenticate user,&lt;/strong&gt;&lt;/p&gt;
&lt;table style="width: 560px;" border="0" cellspacing="0" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="558"&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; userName = &lt;span style="color: #006080;"&gt;@"your user name"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum2"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; password = &lt;span style="color: #006080;"&gt;@"your user password"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum3"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; eventId = &lt;span style="color: #006080;"&gt;@"Event Id you want"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum4"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; eventType = &lt;span style="color: #006080;"&gt;@"Type of the Event you want"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum5"&gt; 5:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum6"&gt; 6:&lt;/span&gt; &lt;span style="color: #008000;"&gt;// Add dll reference to Microsoft.Whos.Shared.Client.LiveID for below &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum7"&gt; 7:&lt;/span&gt; LiveIdAuthentication liveAuth = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; LiveIdAuthentication(&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum8"&gt; 8:&lt;/span&gt;     &lt;span style="color: #006080;"&gt;""&lt;/span&gt;, &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum9"&gt; 9:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Guid(),&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum10"&gt; 10:&lt;/span&gt;     &lt;span style="color: #006080;"&gt;"Sample Code"&lt;/span&gt;,        &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum11"&gt; 11:&lt;/span&gt;     &lt;span style="color: #006080;"&gt;"winqual.microsoft.com"&lt;/span&gt;, &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum12"&gt; 12:&lt;/span&gt;     &lt;span style="color: #006080;"&gt;"MBI_SSL"&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum13"&gt; 13:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum14"&gt; 14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum15"&gt; 15:&lt;/span&gt; System.Security.SecureString ss = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.Security.SecureString();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum16"&gt; 16:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;char&lt;/span&gt; c &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; password)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum17"&gt; 17:&lt;/span&gt;     ss.AppendChar(c);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum18"&gt; 18:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum19"&gt; 19:&lt;/span&gt; &lt;span style="color: #008000;"&gt;//Authenticate user &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum20"&gt; 20:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!liveAuth.Authenticate(userName, ss))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum21"&gt; 21:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Exception(&lt;span style="color: #006080;"&gt;"User or Password invalid"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum22"&gt; 22:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum23"&gt; 23:&lt;/span&gt; &lt;span style="color: #008000;"&gt;//Check Cab downloaded Cabs for the events&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum24"&gt; 24:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (DownloadCabs(eventId, eventType, liveAuth))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum25"&gt; 25:&lt;/span&gt;     Console.WriteLine(&lt;span style="color: #006080;"&gt;"Cab downloaded successfully"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum26"&gt; 26:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum27"&gt; 27:&lt;/span&gt;     Console.WriteLine(&lt;span style="color: #006080;"&gt;"Cab downloaded failed"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code snippet of Helper method to download cab for the event,&lt;/strong&gt;&lt;/p&gt;
&lt;table style="width: 939px;" border="0" cellspacing="0" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="937"&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; DownloadCabs(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; eventId&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum2"&gt; 2:&lt;/span&gt;     , &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; eventtype&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum3"&gt; 3:&lt;/span&gt;     , LiveIdAuthentication liveAuth)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum4"&gt; 4:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum5"&gt; 5:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;//User specific Variables&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum6"&gt; 6:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; cabPath = &lt;span style="color: #006080;"&gt;"D:\\Temp\\"; &lt;/span&gt;https&lt;span style="color: #006080;"&gt;";&lt;/span&gt;winqual.microsoft.com&lt;span style="color: #006080;"&gt;";&lt;/span&gt;%%PROTOCOL%%:&lt;span style="color: #008000;"&gt;//%%HOSTNAME%%/services/wer/user/cabs.aspx?eventid=%%EVENTID%%&amp;amp;eventtypename=%%EVENTTYPE%%";&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum7"&gt; 7:&lt;/span&gt;             &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum8"&gt; 8:&lt;/span&gt;     //Other Variables&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum9"&gt; 9:&lt;/span&gt;     string protocol = "&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum10"&gt; 10:&lt;/span&gt;     string website = "&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum11"&gt; 11:&lt;/span&gt;     WebResponse response = null;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum12"&gt; 12:&lt;/span&gt;     CookieContainer defaultCookieContainer = new CookieContainer();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum13"&gt; 13:&lt;/span&gt;     string feeddata = null;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum14"&gt; 14:&lt;/span&gt;     string challenge = null;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum15"&gt; 15:&lt;/span&gt;     cabServiceUrl = @"&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum16"&gt; 16:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum17"&gt; 17:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(eventId) &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum18"&gt; 18:&lt;/span&gt;         || String.IsNullOrEmpty(eventtype) &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum19"&gt; 19:&lt;/span&gt;         || &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; == liveAuth)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum20"&gt; 20:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum21"&gt; 21:&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Exception(&lt;span style="color: #006080;"&gt;"Invalid argument passed to DownloadCabs"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum22"&gt; 22:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum23"&gt; 23:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum24"&gt; 24:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;//Build URL&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum25"&gt; 25:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; cabDownloadURL = (&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StringBuilder(cabServiceUrl)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum26"&gt; 26:&lt;/span&gt;                                         .Replace(&lt;span style="color: #006080;"&gt;@"%%PROTOCOL%%"&lt;/span&gt;, protocol)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum27"&gt; 27:&lt;/span&gt;                                         .Replace(&lt;span style="color: #006080;"&gt;@"%%HOSTNAME%%"&lt;/span&gt;, website)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum28"&gt; 28:&lt;/span&gt;                                         .Replace(&lt;span style="color: #006080;"&gt;@"%%EVENTID%%"&lt;/span&gt;, eventId)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum29"&gt; 29:&lt;/span&gt;                                         .Replace(&lt;span style="color: #006080;"&gt;@"%%EVENTTYPE%%"&lt;/span&gt;, eventtype)).ToString();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum30"&gt; 30:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum31"&gt; 31:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;// generate challenge on first call&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum32"&gt; 32:&lt;/span&gt;     challenge = LiveIdAuthentication.GetChallengeFromServiceRequest(cabDownloadURL);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum33"&gt; 33:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum34"&gt; 34:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;//Create new web request to get a list of cab for eventid&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum35"&gt; 35:&lt;/span&gt;     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(cabDownloadURL);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum36"&gt; 36:&lt;/span&gt;     &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum37"&gt; 37:&lt;/span&gt;     request.CookieContainer = defaultCookieContainer;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum38"&gt; 38:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum39"&gt; 39:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;// generate response from cached challenge and add as authorization header&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum40"&gt; 40:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;//- you MUST do this for each service call&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum41"&gt; 41:&lt;/span&gt;     LiveIdAuthentication.AddAuthorizationHeaderToRequest(request, &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum42"&gt; 42:&lt;/span&gt;         liveAuth.GetResponseForHttpChallenge(challenge));&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum43"&gt; 43:&lt;/span&gt;     &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum44"&gt; 44:&lt;/span&gt;     response = request.GetResponse();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum45"&gt; 45:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum46"&gt; 46:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (StreamReader responseReader = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StreamReader(response.GetResponseStream()))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum47"&gt; 47:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum48"&gt; 48:&lt;/span&gt;         feeddata = responseReader.ReadToEnd();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum49"&gt; 49:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum50"&gt; 50:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum51"&gt; 51:&lt;/span&gt;     &lt;span style="color: #008000;"&gt;//Download cabs&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum52"&gt; 52:&lt;/span&gt;     System.Net.WebClient client = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.Net.WebClient();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum53"&gt; 53:&lt;/span&gt;     client.Encoding = System.Text.Encoding.UTF8;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum54"&gt; 54:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum55"&gt; 55:&lt;/span&gt;     LiveIdAuthentication.AddAuthorizationHeaderToRequestHeaders(client.Headers&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum56"&gt; 56:&lt;/span&gt;         , liveAuth.GetResponseForHttpChallenge(challenge));            &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum57"&gt; 57:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum58"&gt; 58:&lt;/span&gt;     XNamespace ns = XNamespace.Get(&lt;span style="color: #006080;"&gt;"http://www.w3.org/2005/Atom"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum59"&gt; 59:&lt;/span&gt;     XElement xmlFeed = XElement.Parse(feeddata);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum60"&gt; 60:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum61"&gt; 61:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (var feed &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; xmlFeed.Elements(ns + &lt;span style="color: #006080;"&gt;"entry"&lt;/span&gt;).Elements(ns + &lt;span style="color: #006080;"&gt;"link"&lt;/span&gt;)) &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum62"&gt; 62:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum63"&gt; 63:&lt;/span&gt;         client.DownloadFile(feed.Attribute(&lt;span style="color: #006080;"&gt;"href"&lt;/span&gt;).Value,&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum64"&gt; 64:&lt;/span&gt;             cabPath + eventId + &lt;span style="color: #006080;"&gt;"-"&lt;/span&gt; + &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum65"&gt; 65:&lt;/span&gt;             Regex.Match(feed.Attribute(&lt;span style="color: #006080;"&gt;"href"&lt;/span&gt;).Value, &lt;span style="color: #006080;"&gt;@"cabID=\d+"&lt;/span&gt;) + &lt;span style="color: #006080;"&gt;".cab"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum66"&gt; 66:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum67"&gt; 67:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: #f4f4f4; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum68"&gt; 68:&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="font-size: 8pt; font-family: 'Courier New', courier, monospace; width: 100%; color: black; overflow: visible; direction: ltr; text-align: left; margin: 0em; line-height: 12pt; background-color: white; border-style: none; padding: 0px;"&gt;&lt;span style="color: #606060;" id="lnum69"&gt; 69:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10127042" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/WATSON/">WATSON</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/WER+Software/">WER Software</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/LIVE+ID/">LIVE ID</category></item><item><title>A checklist to help you create clear and accurate responses</title><link>http://blogs.msdn.com/b/wer/archive/2010/11/09/a-checklist-to-help-you-create-clear-and-accurate-responses.aspx</link><pubDate>Tue, 09 Nov 2010 17:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10088303</guid><dc:creator>kentwalter</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=10088303</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2010/11/09/a-checklist-to-help-you-create-clear-and-accurate-responses.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;We&amp;rsquo;ve had some questions and comments from our partners recently about the process of creating and publishing responses for Windows Error Reporting, so I want to give you some information that will help you create quality responses that get published quickly and really help your customers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;I work on the team that approves and publishes responses, and if you&amp;rsquo;ve created more than a few responses, there&amp;rsquo;s a good chance that we&amp;rsquo;ve worked with you to clarify your response content at some point. Since clarifications add time to the approval and publishing process, I wanted to give you a checklist of things to look at before you submit a response, so that your responses will sail through approval and publishing.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;span style="font-size: small;"&gt;&amp;middot;&lt;/span&gt;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Is the landing page straightforward and uncomplicated? Can you link to a better page, or better yet, a direct download? (The number one reason we clarify responses is that it links to a top-level page, like www.microsoft.com.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;span style="font-size: small;"&gt;&amp;middot;&lt;/span&gt;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Does the experience described in the template you used match the one that users will actually see? For example, if the template says a direct download is available, the linked URL should point to that download, not to a landing page that requires further action from the customer. Note that the templates you see on Winqual are only a subset of what is available.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;span style="font-size: small;"&gt;&amp;middot;&lt;/span&gt;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Does a landing page link provide what is promised? For example, if the template selected promises an automated update tool, but the landing page for the response describes a manual update process that &lt;i style="mso-bidi-font-style: normal;"&gt;doesn&amp;rsquo;t &lt;/i&gt;use a tool, the message could be clearer.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;span style="font-size: small;"&gt;&amp;middot;&lt;/span&gt;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Is the solution within easy reach of the user? The guideline we try to hit with every response is three clicks, including the main URL in the response itself.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;span style="font-size: small;"&gt;&amp;middot;&lt;/span&gt;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;Is your download as directly and easily usable as it could possibly be? Users have an easier time with an MSI than they do with a self-extractor or .zip file, for example, and the smaller the download, the better.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;span style="font-size: small;"&gt;&amp;middot;&lt;/span&gt;&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Does your response require More Info links? These should not be used unless the response does not work without them. There are a couple of reasons for this: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="padding-left: 30px;"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Any More Info link text will need to be localized, which means that the entire response be available only in English for 4-6 weeks&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; padding-left: 30px; vertical-align: middle; mso-list: l0 level3 lfo1; tab-stops: list 1.5in;"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;We found through our research that most customers just don&amp;rsquo;t see More Info links. Customers look for links in the body of the response.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;o:p&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-family: Calibri; font-size: small;"&gt;These points cover the majority of response clarifications that we see. Of course, you might need input or have questions before you even create a response. We&amp;rsquo;d be glad to help you out. If you have any questions or any specific needs, let us know. Send email to &lt;/span&gt;&lt;/span&gt;&lt;a href="mailto:WERCMS@microsoft.com"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-family: Calibri; color: #0000ff; font-size: small;"&gt;WERCMS@microsoft.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;, and we&amp;rsquo;ll give you a hand. Thanks for using Windows Error Reporting and letting us help you.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Kent Walter&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-fareast-font-family: 'Times New Roman'; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Windows Error Reporting&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10088303" width="1" height="1"&gt;</description></item><item><title>XPROC Application Hang Cabs in Windows 7</title><link>http://blogs.msdn.com/b/wer/archive/2010/08/16/xproc-application-hang-cabs-in-windows-7.aspx</link><pubDate>Mon, 16 Aug 2010 23:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10050759</guid><dc:creator>Dom R</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=10050759</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2010/08/16/xproc-application-hang-cabs-in-windows-7.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;In Windows 7, we've added some techniques and tools that assist with troubleshooting hangs involving multiple processes (if you're interested in the evolutionary history, check out Ryan's &lt;a href="http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-1-not-responding.aspx"&gt;"Let There Be Hangs" series&lt;/a&gt;, where he describes how hang reporting has changed &lt;a href="http://blogs.msdn.com/wer/archive/2009/03/19/let-there-be-hangs-part-4-better-bucketing-in-windows-vista.aspx"&gt;from Windows XP on&lt;/a&gt;.) With these improvements come some new concepts, terms, and techniques, which I will attempt to convey so that, after reading this, you can fire up the debugger and understand a bit more about what&amp;rsquo;s going on.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: large;"&gt;Defined Terms and Concepts&lt;/span&gt;&lt;/h1&gt;
&lt;h2&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-family: times new roman,times; font-size: medium;"&gt;XPROC cab&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;The &amp;ldquo;X&amp;rdquo; stand for &lt;i&gt;&lt;b&gt;cross &lt;/b&gt;&lt;/i&gt;and the &amp;ldquo;PROC&amp;rdquo; stands for &lt;i&gt;&lt;b&gt;process&lt;/b&gt;&lt;/i&gt;. So in other words, we&amp;rsquo;re talking about a cross process dump. And what is that exactly? Well, when an app is hung due to cross-process communication, we capture a dump of the hung process and, when possible, the process determined to be at the end of the &amp;ldquo;wait chain&amp;rdquo; in the inter-process communication. We include both dumps, as well as other analysis related information, in the cab submitted with the error report. XPROC dumps were introduced in Vista, but there were cases where the state of the hang would be lost before the heap dump was captured.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-family: times new roman,times; font-size: medium;"&gt;Process Reflection&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;At its core, Process Reflection is used to make a clone of an existing process. This clone, also referred to as the &lt;i&gt;&lt;b&gt;reflected process&lt;/b&gt;&lt;/i&gt;, contains a single thread and a copy of the original process&amp;rsquo; address space. Mark Russinovich talks more about it &lt;a href="http://channel9.msdn.com/shows/Going+Deep/Mark-Russinovich-Inside-Windows-7-Redux/"&gt;here&lt;/a&gt; (31:00)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;In the case of hang reporting, when a chain of processes is involved in the hang, we use Process Reflection to create a clone of the process determined to be at the end of the wait chain by virtue of the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms679364.aspx"&gt;GetThreadWaitChain&lt;/a&gt; API. A heap dump is taken of the clone instead of the original. Cloning takes way less time than generating a heap dump file, so using this technique, we increase our chances of capturing the hung state, than if we were just create a dump of the original process. Also, it&amp;rsquo;s worth pointing out that our single thread in the clone does not execute during hang reporting, so it is simply parked and left idle. Here&amp;rsquo;s what its stack looks like today:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;ChildEBP RetAddr&lt;br /&gt;0028fdbc 77a97b8c ntdll!KiFastSystemCallRet&lt;br /&gt;0028fdc0 77af02ef ntdll!ZwWaitForSingleObject+0xc&lt;br /&gt;0028fe38 75ef0239 ntdll!RtlpProcessReflectionStartup+0x1bf&lt;br /&gt;0028fe44 77ab1ec2 kernel32!BaseThreadInitThunk+0xe&lt;br /&gt;0028fe84 77ab1e95 ntdll!__RtlUserThreadStart+0x70&lt;br /&gt;0028fe9c 00000000 ntdll!_RtlUserThreadStart+0x1b&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;When it comes to debugging analysis, some things aren&amp;rsquo;t readily apparent with the reflected process. For instance, what about the original threads? Does the handle data conflict with that of the original process? After all, the reflected process is a process in its own right. The short answer is the debugger handles all of this for you. As they say, &amp;ldquo;the devil is in the details&amp;rdquo; so we&amp;rsquo;ll get into how the debugger does this shortly. But first, it&amp;rsquo;s important to understand the files contained in an &lt;a href="http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-4-better-bucketing-in-windows-vista.aspx"&gt;AppHangXProcB1&lt;/a&gt; bucket&amp;rsquo;s cab. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: large;"&gt;On to the Fun Stuff...&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;h2&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-family: times new roman,times; font-size: medium;"&gt;AppHangXProcB1 Cab Contents&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;So to recap:&lt;br /&gt;&lt;br /&gt;A hang has occurred. We get a heap dump of the hung process. Using GetThreadWaitChain(), we discover the process at the end of the wait chain and clone it using ProcessRelection.&lt;br /&gt;Next we grab a heap dump of the clone. But, we also have to deal with the fact that the thread and handle data from the original aren&amp;rsquo;t copied to the clone. So, in addition to this heap dump, we also capture a mini dump of the original process that has the thread and handle data. The debugger knows how to &amp;ldquo;stitch&amp;rdquo; both files together into a single, coherent target.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Let&amp;rsquo;s take a look at an example cab:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;File 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Time&amp;nbsp;&amp;nbsp; Attrs&lt;br /&gt;-----------------------------&amp;nbsp; ---------- ---------- -------- -----&lt;br /&gt;&amp;nbsp;&amp;nbsp; iexplore.exe.xml&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; 5496 2010/07/14 16:25:22&amp;nbsp; ----&lt;br /&gt;&amp;nbsp;&amp;nbsp; iexplore.exe.6e79.wxhu.dmp.dbgcfg.ini&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 224 2010/07/14 16:25:22&amp;nbsp; ----&lt;br /&gt;&amp;nbsp;&amp;nbsp; WER57FB.tmp.ref&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; 1596362 2010/07/14 16:25:22&amp;nbsp; ----&lt;br /&gt;&amp;nbsp;&amp;nbsp; iexplore.exe.6e79.wxhu.dmp&amp;nbsp;&amp;nbsp;&amp;nbsp; 150380775 2010/07/14 16:25:22&amp;nbsp; ----&lt;br /&gt;&amp;nbsp;&amp;nbsp; memory.hdmp&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; 40343241 2010/07/14 16:26:18&amp;nbsp; ----&lt;br /&gt;&amp;nbsp;&amp;nbsp; WERInternalMetadata.xml&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3226 2010/07/14 16:26:30&amp;nbsp; ----&lt;br /&gt;&amp;nbsp;&amp;nbsp; AppCompat.txt&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; 47354 2010/07/14 16:26:30&amp;nbsp; ----&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;&lt;br /&gt;Look at the contents of the dbgcfg.ini file and you'll see something like this:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;[UserModeDump]&lt;br /&gt;default=WER57FB.tmp.ref&lt;br /&gt;memory=iexplore.exe.6e79.wxhu.dmp&lt;br /&gt;module=iexplore.exe.6e79.wxhu.dmp&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;&lt;br /&gt;You may be able to discern what&amp;rsquo;s going on here. The *.tmp.ref file is the default target, which is the original process mini dump that I described earlier; the one with the thread and handle data. Using the debugger, you can view the flags passed to &lt;a href="http://msdn.microsoft.com/en-us/library/ms680360(VS.85).aspx"&gt;MiniDumpWriteDump&lt;/a&gt; used to create this file and thus the data contained within:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;0:004&amp;gt; .dumpdebug&lt;br /&gt;----- User Mini Dump Analysis&lt;br /&gt;&lt;br /&gt;MINIDUMP_HEADER:&lt;br /&gt;Version&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A793 (61B0)&lt;br /&gt;NumberOfStreams 11&lt;br /&gt;Flags&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1104&lt;br /&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; 0004 MiniDumpWithHandleData&lt;br /&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; 0100 MiniDumpWithProcessThreadData&lt;br /&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; 1000 MiniDumpWithThreadInfo&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;The *.wxhu.dmp file is the reflected process dump. Its naming convention hasn&amp;rsquo;t changed from Vista. So, those of you that have been working with XPROC dumps in Vista may have been a little confused when you analyzed this file from a Windows 7 machine, only to see one thread waiting in RtlpProcessReflectionStartup. Open the file directly in the debugger and you&amp;rsquo;ll see that it has full data, thread and memory info, etc&amp;hellip;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;0:000&amp;gt; .dumpdebug&lt;br /&gt;----- User Mini Dump Analysis&lt;br /&gt;&lt;br /&gt;MINIDUMP_HEADER:&lt;br /&gt;Version&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A793 (61B0)&lt;br /&gt;NumberOfStreams 14&lt;br /&gt;Flags&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 51B25&lt;br /&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; 0001 MiniDumpWithDataSegs&lt;br /&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; 0004 MiniDumpWithHandleData&lt;br /&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; 0020 MiniDumpWithUnloadedModules&lt;br /&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; 0100 MiniDumpWithProcessThreadData&lt;br /&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; 0200 MiniDumpWithPrivateReadWriteMemory&lt;br /&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; 0800 MiniDumpWithFullMemoryInfo&lt;br /&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; 1000 MiniDumpWithThreadInfo&lt;br /&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; 10000 MiniDumpWithPrivateWriteCopyMemory&lt;br /&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; 40000 MiniDumpWithTokenInformation&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;&lt;br /&gt;You&amp;rsquo;ll also probably notice that this dump also has handle data. But again, hang reporting does not duplicate the handle data from the original to the reflected process, so the only handle you should see is a process handle from the original process:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;Stream 10: type HandleDataStream (12), size 00000038, RVA 08F35E0F&lt;br /&gt;&amp;nbsp; 1 descriptors, header size is 16, descriptor size is 40&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Handle(0000000000000008,"Process","")&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: times new roman,times; font-size: medium;"&gt;&lt;span style="text-decoration: underline;"&gt;Viewing the "Stitched" Target&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;There are at least two ways you can view the stitched target (using the same cab as an example):&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Extract the files from the cab and open the *.dbgcfg.ini file instead of the individual dump files&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="background-color: #ffff00;"&gt;C:\debuggers\cdb -z C:\temp\xproc\iexplore.exe.6e79.wxhu.dmp.dbgcfg.ini&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Microsoft (R) Windows Debugger Version 6.13.0001.776 X86&lt;br /&gt;Copyright (c) Microsoft Corporation. All rights reserved.&lt;br /&gt;&lt;br /&gt;Loading Dump File [C:\temp\xproc\iexplore.exe.6e79.wxhu.dmp.dbgcfg.ini]&lt;br /&gt;Loading User-mode Dump Configuration File [C:\temp\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;xproc\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;iexplore.exe.6e79.wxhu.dmp.dbgcfg.ini,C:,\temp\]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default dump: [WER57FB.tmp.ref]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memory dump: [iexplore.exe.6e79.wxhu.dmp]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; module list dump: [iexplore.exe.6e79.wxhu.dmp]&lt;br /&gt;&lt;br /&gt;Loading Dump File [C:\temp\xproc\WER57FB.tmp.ref]&lt;br /&gt;User Mini Dump File: Only registers, stack and portions of memory are available&lt;br /&gt;&lt;br /&gt;Loading Dump File [C:\temp\xproc\iexplore.exe.6e79.wxhu.dmp]&lt;br /&gt;User Mini Dump File: Only registers, stack and portions of memory are available&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Open the cab file directly in the debugger. Then open the dbgcfg.ini file from there&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;&lt;b&gt;&lt;span style="background-color: #ffff00;"&gt;C:\debuggers\&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background-color: #ffff00;"&gt;cdb &amp;ndash;z C:\temp\xproc\sample.cab&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;Microsoft (R) Windows Debugger Version 6.13.0001.776 X86&lt;br /&gt;Copyright (c) Microsoft Corporation. All rights reserved.&lt;br /&gt;&lt;br /&gt;Extracted C:\temp\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;xproc\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;000011a00_memory.hdmp from C:\temp\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;xproc\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;sample.cab&lt;br /&gt;&lt;br /&gt;Loading Dump File [C:\temp\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;xproc\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;000011a00_memory.hdmp]&lt;br /&gt;User Mini Dump File: Only registers, stack and portions of memory are available&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff00;"&gt;&lt;b&gt;0:016&amp;gt; .opendump /c "iexplore.exe.6e79.wxhu.dmp.dbgcfg.ini";g&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Extracted C:\temp\xproc\000011a00_iexplore.exe.6e79.wxhu.dmp.dbgcfg.ini from C:\temp\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;xproc\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;sample.cab&lt;br /&gt;&lt;br /&gt;Loading Dump File [C:\temp\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;xproc\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;000011a00_iexplore.exe.6e79.wxhu.dmp.dbgcfg.ini]&lt;br /&gt;&lt;br /&gt;Loading User-mode Dump Configuration File [C:\temp\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;xproc\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;000011a00_iexplore.exe.6e79.wxhu.dmp.dbgcfg.ini&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default dump: [WER57FB.tmp.ref]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memory dump: [iexplore.exe.6e79.wxhu.dmp]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; module list dump: [iexplore.exe.6e79.wxhu.dmp]&lt;br /&gt;&lt;br /&gt;Loading Dump File [C:\temp\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;xproc\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;000011a00_WER57FB.tmp.ref]&lt;br /&gt;&lt;br /&gt;Loading Dump File [C:\temp\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;xproc\&lt;/span&gt;&lt;span style="font-family: courier new,courier; font-size: small;"&gt;000011a00_iexplore.exe.6e79.wxhu.dmp]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Just run &lt;span style="font-family: courier new,courier;"&gt;!analyze&lt;/span&gt;. It uses the same procedure outlined in option 2, and it leaves the targets opened once it&amp;rsquo;s finished.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: large;"&gt;Last But Not Least!&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-family: arial,helvetica,sans-serif; font-size: small;"&gt;Make sure you have the latest debugger or else it may not recognize this type of target. You can download it from &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10050759" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/Hang/">Hang</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Hung/">Hung</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/xproc/">xproc</category></item><item><title>StackHash Beta – A client application that uses Winqual web services</title><link>http://blogs.msdn.com/b/wer/archive/2010/06/02/stackhash-beta-a-client-application-that-uses-winqual-web-services.aspx</link><pubDate>Wed, 02 Jun 2010 03:17:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10018644</guid><dc:creator>Gr8Gatsby</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=10018644</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2010/06/02/stackhash-beta-a-client-application-that-uses-winqual-web-services.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You might remember a project that the Windows Error Reporting team published on &lt;a href="http://wer.codeplex.com" target="_blank"&gt;CodePlex&lt;/a&gt;.&amp;#160; This project contains a wrapper for our ATOM base web services that allow for automatically downloading Windows Error Reporting data.&lt;/p&gt;  &lt;p&gt;There is a new project going on at &lt;a href="http://www.stackhash.com"&gt;www.stackhash.com&lt;/a&gt; where they have released a Beta 3 build of their application that builds on the Windows Error Reporting web services to locally cache and analyze crash dumps.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-15-26-metablogapi/1882.Screenshot_5F00_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Screenshot" border="0" alt="Screenshot" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-15-26-metablogapi/0003.Screenshot_5F00_thumb.png" width="240" height="161" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can read about and sign up for their beta here: &lt;a href="http://www.stackhash.com/blog/post/StackHash-Beta-1-Preview.aspx"&gt;http://www.stackhash.com/blog/post/StackHash-Beta-1-Preview.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Scripting in this tool is really useful. You can create a script to run a sequence of WinDbg commands and then StackHash will automatically run the script each time a new cab is downloaded. Included scripts pull common information out of minidumps including process uptime, architecture and CLR version (if applicable). &lt;/p&gt;  &lt;p&gt;You can also search and filter events. Filters can be saved, so for instance you could show events with more than ten hits and at least one cab for a specific product. &lt;/p&gt;  &lt;p&gt;The beta looks like a promising tool. &lt;/p&gt;  &lt;p&gt;Check it out and provide the StackHash team with some feedback.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10018644" width="1" height="1"&gt;</description></item><item><title>MDOP error reporting for small, midsize, and large companies</title><link>http://blogs.msdn.com/b/wer/archive/2010/05/30/mdop-error-reporting-for-small-midsize-and-large-companies.aspx</link><pubDate>Sun, 30 May 2010 03:45:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10017412</guid><dc:creator>Gr8Gatsby</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=10017412</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2010/05/30/mdop-error-reporting-for-small-midsize-and-large-companies.aspx#comments</comments><description>&lt;p&gt;It is time to do a blog post that points to some resources about the &lt;a href="http://www.microsoft.com/licensing/software-assurance/mdop.aspx" title="Microsoft Desktop Optimization Pack (MDOP)"&gt;Microsoft Desktop Optimization Pack (MDOP)&lt;/a&gt;, since we get a lot of questions about how Error Reporting can work better for small, mid-size, and large corporations.&amp;nbsp;&amp;nbsp;This is part of the &lt;a target="_blank" href="http://www.microsoft.com/licensing/software-assurance/default.aspx" title="Microsoft Software Assurance Program"&gt;Microsoft Software Assurance Program&lt;/a&gt;&amp;nbsp;and provide many of the benefits of Windows Error Reporting that IT Professionals can customize.&amp;nbsp; Part of the customizations enable IT Professionals to better analyze and respond to common problems within their organization.&lt;/p&gt;
&lt;p&gt;A SpringBoard Series is available here: &lt;a href="http://technet.microsoft.com/en-us/windows/bb899442.aspx"&gt;http://technet.microsoft.com/en-us/windows/bb899442.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A great starting place to learn about all MDOP has to offer is here: &lt;a href="http://technet.microsoft.com/en-us/windows/ff383366.aspx"&gt;http://technet.microsoft.com/en-us/windows/ff383366.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For the Error Reporting Component (DEM) here are two links to videos that are worth watching:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="ee526365.aspx" onclick="function onclick()
{
Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl43',this);
}" title="A Tour of Desktop Error Monitoring" id="ctl00_mainContentContainer_ctl43"&gt;&lt;span style="color: #0066dd;"&gt;A Tour of Desktop Error Monitoring&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="dd452414.aspx" onclick="function onclick()
{
Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl44',this);
}" title="Using MDOP Desktop Error Reporting" id="ctl00_mainContentContainer_ctl44"&gt;&lt;span style="color: #0066dd;"&gt;Using MDOP Desktop Error Reporting&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a s_oidt="0" s_oid="http://blogs.technet.com/mdop" href="http://blogs.technet.com/mdop" onclick="function onclick()
{
Track('ctl00_mainContentContainer_ctl00|ctl00_mainContentContainer_ctl02',this);window.open(this.href);return false;
}" id="ctl00_mainContentContainer_ctl02"&gt;&lt;span style="color: #0066dd;"&gt;The Official MDOP Blog&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10017412" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/WER/">WER</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/DEM/">DEM</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/MDOP/">MDOP</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Error+Reporting/">Error Reporting</category></item><item><title>New response interface</title><link>http://blogs.msdn.com/b/wer/archive/2010/02/19/new-response-interface.aspx</link><pubDate>Fri, 19 Feb 2010 00:04:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9966082</guid><dc:creator>Gr8Gatsby</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9966082</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2010/02/19/new-response-interface.aspx#comments</comments><description>&lt;p&gt;Today we are deploying an update the the response tools available on &lt;a href="https://winqual.microsoft.com"&gt;https://winqual.microsoft.com&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/Newresponseinterface_DCB0/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/Newresponseinterface_DCB0/image_thumb_1.png" width="640" height="394" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="520"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="312"&gt;1.&lt;strong&gt; The life of a response&lt;/strong&gt; – Although the lifecycle of a response can vary depending on the scenarios below the general goal of a response is to lead to a solution for the problem that was identified by Windows Error Reporting (WER). &lt;/td&gt;        &lt;td valign="top" width="206"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/Newresponseinterface_DCB0/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/Newresponseinterface_DCB0/image_thumb.png" width="196" height="168" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;2. &lt;strong&gt;Selecting the appropriate response template&lt;/strong&gt; – we provide templates that provide guidance for the most common scenarios when communicating with customers who have experienced a crash or hang on Windows. Below you will find a description of common scenarios and the corresponding template(s) that support these scenarios. &lt;/p&gt;  &lt;p&gt;We have a template based system for choosing messages to show to end-users. The most common templates are shown and support the most common scenarios. If you have another scenario please comment on this blog post and we will review additional scenarios as they arise.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Common Response Scenarios and templates: &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;   &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="204"&gt;           &lt;p&gt;&lt;b&gt;Scenario&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="379"&gt;           &lt;p&gt;&lt;b&gt;Template&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="204"&gt;           &lt;p&gt;&lt;b&gt;You no longer support a product&lt;/b&gt; – If there is a product no longer supported by your company these templates best communicate this to your customers.&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="379"&gt;           &lt;ul&gt;             &lt;li&gt;&lt;strong&gt;Go to website for support info or uninstall&lt;/strong&gt; [240]&lt;/li&gt;              &lt;li&gt;&lt;strong&gt;Beta software expired&lt;/strong&gt; [37]&lt;/li&gt;           &lt;/ul&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="204"&gt;           &lt;p&gt;&lt;b&gt;You have more information for your customer or need more information from a customer &lt;/b&gt;– Company has additional information for customers like KB articles for advanced users, or survey’s asking for feedback.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="379"&gt;           &lt;ul&gt;             &lt;li&gt;&lt;strong&gt;Link to KB&lt;/strong&gt; [6582]&lt;/li&gt;              &lt;li&gt;&lt;strong&gt;Send info / feedback - link to co. survey page &lt;/strong&gt;[230]&lt;/li&gt;           &lt;/ul&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="204"&gt;           &lt;p&gt;&lt;b&gt;You have a specific fix&lt;/b&gt; – If you know that an issues is fixed in a future version or specific update these templates best communicate the fix to your customers.&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="379"&gt;           &lt;ul&gt;             &lt;li&gt;&lt;strong&gt;Download the solution &lt;/strong&gt;[217] &lt;/li&gt;              &lt;li&gt;&lt;strong&gt;Use included automatic update tool, link to instr. &lt;/strong&gt;[92]&lt;/li&gt;              &lt;li&gt;&lt;strong&gt;Install Latest Version - link to co.&lt;/strong&gt; [74] &lt;/li&gt;           &lt;/ul&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9966082" width="1" height="1"&gt;</description></item><item><title>Windows Error Reporting Terms of Use Update</title><link>http://blogs.msdn.com/b/wer/archive/2010/01/14/windows-error-reporting-terms-of-use-update.aspx</link><pubDate>Thu, 14 Jan 2010 21:51:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9948653</guid><dc:creator>Gr8Gatsby</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9948653</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2010/01/14/windows-error-reporting-terms-of-use-update.aspx#comments</comments><description>&lt;p&gt;I wanted to give an update on things we are doing to make things a little easier for ISV’s, after receiving a lot of feedback and looking closely at our Terms of Use (TOU) agreement for Window Error Reporting we are making some updates.&amp;#160; Once to document is live on &lt;a href="https://winqual.microsoft.com"&gt;https://winqual.microsoft.com&lt;/a&gt; you can review the differences but I have provided a high-level description below:&lt;/p&gt;  &lt;p&gt;We are updating the Windows Error Reporting Terms of Use (TOU) to be less restrictive on some data retention guidelines for non Personally Identifiable Information (PII) data, and enabling a scenario where ISV’s can submit public symbols in order to get more pinpointed problem identification through windows error reporting.&amp;#160; &lt;/p&gt;  &lt;p&gt;The new TOU is scheduled to be available for signing on &lt;strong&gt;Feb 15&lt;sup&gt;th&lt;/sup&gt; 2010 through April 15&lt;sup&gt;th&lt;/sup&gt; 2010&lt;/strong&gt;.&amp;#160; The effective start date of this new agreement will be &lt;strong&gt;March 15&lt;sup&gt;th&lt;/sup&gt; 2010&lt;/strong&gt;.&amp;#160; There is a one month overlap to allow time for companies to review the changes.&lt;/p&gt;  &lt;p&gt;Happy Debugging!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9948653" width="1" height="1"&gt;</description></item><item><title>Advanced .NET Debugging</title><link>http://blogs.msdn.com/b/wer/archive/2010/01/05/advanced-net-debugging.aspx</link><pubDate>Tue, 05 Jan 2010 21:56:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9944202</guid><dc:creator>Gr8Gatsby</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9944202</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2010/01/05/advanced-net-debugging.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/images/0321578899/sr=8-1/qid=1262726072/ref=dp_image_0?ie=UTF8&amp;amp;n=283155&amp;amp;s=books&amp;amp;qid=1262726072&amp;amp;sr=8-1"&gt;&lt;img border="0" alt="Advanced .NET Debugging" src="http://ecx.images-amazon.com/images/I/41x4gy%2BwnZL._SL500_AA240_.jpg" width="240" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you have ever wondered where a good place to start with .NET debugging this book is it!&amp;#160; Where as the previous &lt;a href="http://www.amazon.com/Advanced-Windows-Debugging-Mario-Hewardt/dp/0321374460/ref=pd_bxgy_b_img_b"&gt;Advanced Windows Debugging&lt;/a&gt; book had a single chapter on .NET debugging, this is an entire book dedicated to .NET debugging!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/Advanced-NET-Debugging-Mario-Hewardt/dp/0321578899/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1262726072&amp;amp;sr=8-1"&gt;Advanced .NET Debugging&lt;/a&gt; is authored by Mario Hewardt, who also has authored: &lt;a href="http://www.amazon.com/Advanced-Windows-Debugging-Mario-Hewardt/dp/0321374460/ref=pd_bxgy_b_img_b"&gt;Advanced Windows Debugging&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.amazon.com/Advanced-NET-Debugging-Mario-Hewardt/dp/0321578899/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1262726072&amp;amp;sr=8-1"&gt;Advanced .NET Debugging&lt;/a&gt; book is focused on Managed code debugging for Windows.&amp;#160; Chapter 8: Postmortem Debugging talks about how to leverage Windows Error Reporting (WER) (pages 409-438).&lt;/p&gt;  &lt;p&gt;This book provides very good details on how to sign-up for an account to access WER data, as well as a good walk through of the existing Website and Web service available at &lt;a href="https://winqual.microsoft.com"&gt;https://winqual.microsoft.com&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Here is what some other people are saying about the book:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/debuggingtoolbox/archive/2009/05/16/advanced-net-debugging-book-preview.aspx" href="http://blogs.msdn.com/debuggingtoolbox/archive/2009/05/16/advanced-net-debugging-book-preview.aspx"&gt;http://blogs.msdn.com/debuggingtoolbox/archive/2009/05/16/advanced-net-debugging-book-preview.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://dotnetdebug.net/2009/11/30/advanced-net-debugging-the-book-by-mario-hewardt/" href="http://dotnetdebug.net/2009/11/30/advanced-net-debugging-the-book-by-mario-hewardt/"&gt;http://dotnetdebug.net/2009/11/30/advanced-net-debugging-the-book-by-mario-hewardt/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.informit.com/store/product.aspx?isbn=0321578899" href="http://www.informit.com/store/product.aspx?isbn=0321578899"&gt;http://www.informit.com/store/product.aspx?isbn=0321578899&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/tess/archive/2009/12/15/advanced-net-debugging-book.aspx" href="http://blogs.msdn.com/tess/archive/2009/12/15/advanced-net-debugging-book.aspx"&gt;http://blogs.msdn.com/tess/archive/2009/12/15/advanced-net-debugging-book.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9944202" width="1" height="1"&gt;</description></item><item><title>Bucketing parameters but no dump. What is the symbol?</title><link>http://blogs.msdn.com/b/wer/archive/2009/12/09/bucketing-parameters-but-no-dump-what-is-the-symbol.aspx</link><pubDate>Wed, 09 Dec 2009 17:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9934702</guid><dc:creator>david.grant</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9934702</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/12/09/bucketing-parameters-but-no-dump-what-is-the-symbol.aspx#comments</comments><description>&lt;p&gt;There may be times when you have a set of bucketing parameters possibly from an end users event log, the Windows Error Reporting Portal, an online forum entry, or other reasons, but you don't have a cab or dump of this exception.&amp;#160; All is not lost, we can use the debugger, and a local copy of the binary and pdb (symbol) to get the function name.&amp;#160; &lt;/p&gt;  &lt;p&gt;These bucketing parameters will include the module name where the crash occurred and the offset, for example:&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Problem signature&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Problem Event Name:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; APPCRASH    &lt;br /&gt;Application Name:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyApp.exe    &lt;br /&gt;Application Version:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 6.0.7600.0    &lt;br /&gt;Application Timestamp:&amp;#160;&amp;#160; 4507980b    &lt;br /&gt;&lt;strong&gt;Fault Module Name:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyMod.DLL     &lt;br /&gt;&lt;/strong&gt;Fault Module Version:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 6.0.7600.0    &lt;br /&gt;Fault Module Timestamp:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 45079fe0    &lt;br /&gt;Exception Code:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c0000005    &lt;br /&gt;&lt;strong&gt;Exception Offset:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 00011710     &lt;br /&gt;&lt;/strong&gt;OS Version:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 6.0.7600.2.0.0.0.1    &lt;br /&gt;Locale ID:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1033    &lt;br /&gt;    &lt;br /&gt;Using the debugging tools for Windows which are available from:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"&gt;http://www.microsoft.com/whdc/devtools/debugging/default.mspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; You can lookup the offset by loading the binary referenced in “Fault Module Name” into the debugger, checking the base address, and calculating the function based on the base address and the offset.&lt;/p&gt;  &lt;p&gt;From a command prompt, open the image with the debugger.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;C:\Debuggers&amp;gt;&lt;strong&gt;windbg -z MyMod.dll&lt;/strong&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This assumes that either your symbol path is set properly, or that the pdb file (symbol) is in the same directory as the image. &lt;/p&gt;  &lt;p&gt;Then from in the debugger using the debugger command prompt:&lt;/p&gt;  &lt;p&gt;Get the base address of the module:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;0:000&amp;gt;&lt;strong&gt; lmvm MyMod&lt;/strong&gt;      &lt;br /&gt;start&amp;#160;&amp;#160;&amp;#160; end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; module name      &lt;br /&gt;74100000 74200000 MyMod&lt;/p&gt;    &lt;p&gt;&amp;lt;output truncated&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Add the base address and the offset from the bucketing parameters:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;     &lt;br /&gt;0:000&amp;gt;&lt;strong&gt; ln 74100000+00011710&lt;/strong&gt;      &lt;br /&gt;(7411171c)&amp;#160;&amp;#160; MyMod!CSample::Foo &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;From there you have the function, and you can continue to investigate as necessary, for example:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;0:000&amp;gt; &lt;strong&gt;u MyMod!CSample::Foo L1&lt;/strong&gt;      &lt;br /&gt;MyMod!CSample::Foo      &lt;br /&gt;74111710 8b4008&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mov&amp;#160;&amp;#160;&amp;#160;&amp;#160; eax,dword ptr [eax+8]       &lt;/p&gt;&lt;/blockquote&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9934702" width="1" height="1"&gt;</description></item><item><title>Microsoft PDC 2009</title><link>http://blogs.msdn.com/b/wer/archive/2009/11/19/microsoft-pdc-2009.aspx</link><pubDate>Thu, 19 Nov 2009 18:21:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9925638</guid><dc:creator>Gr8Gatsby</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9925638</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/11/19/microsoft-pdc-2009.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:26ccb24c-b147-42bf-b057-cf45d9a07c8f" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/pdc09" rel="tag"&gt;pdc09&lt;/a&gt;,&lt;a href="http://technorati.com/tags/PDC" rel="tag"&gt;PDC&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft" rel="tag"&gt;Microsoft&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft+PDC" rel="tag"&gt;Microsoft PDC&lt;/a&gt;,&lt;a href="http://technorati.com/tags/PDC+2009" rel="tag"&gt;PDC 2009&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Error+Reporting" rel="tag"&gt;Windows Error Reporting&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Watson" rel="tag"&gt;Watson&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WER" rel="tag"&gt;WER&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Developer" rel="tag"&gt;Developer&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Quality" rel="tag"&gt;Quality&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Software" rel="tag"&gt;Software&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Development" rel="tag"&gt;Development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+7" rel="tag"&gt;Windows 7&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VS+2010" rel="tag"&gt;VS 2010&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET+4.0" rel="tag"&gt;.NET 4.0&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I had a chance to present a lunch session at Microsoft PDC 2009 this year!&amp;#160; &lt;/p&gt;  &lt;p&gt;I wanted to call out some special thanks to&lt;font size="2"&gt; Rajeev Acharya&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;/font&gt;for helping to make this presentation and demo possible.&amp;#160; &lt;font size="2"&gt;Rajeev&lt;/font&gt; is an SDET on our team that developed this demo application in his “extra” time.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://microsoftpdc.com/Sessions/CL33" href="http://microsoftpdc.com/Sessions/CL33"&gt;http://microsoftpdc.com/Sessions/CL33&lt;/a&gt; – This talk starts with creating a better customer experience around software failures using the Application Restart and Recovery (ARR) API, to downloading and debugging mini-dumps send in from customers, to creating customer responses pointing to updates and fixes.&lt;/p&gt;  &lt;p&gt;Steven Sinofsky highlighted the importance of Windows Error Reporting and how Microsoft uses this technology to build Windows in his keynote at PDC 2009&lt;/p&gt;  &lt;p&gt;Some of his talk was summarized in this CNET article:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Sinofsky is talking about the different mechanisms Microsoft uses from Windows Error Reporting, or Watson, to its Software Quality Monitor. Sinofsky notes that the monitoring tools require the user's permission in the final versions of Windows.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://news.cnet.com/8301-13860_3-10400476-56.html?part=rss&amp;amp;subj=news&amp;amp;tag=2547-1_3-0-5" href="http://news.cnet.com/8301-13860_3-10400476-56.html?part=rss&amp;amp;subj=news&amp;amp;tag=2547-1_3-0-5"&gt;http://news.cnet.com/8301-13860_3-10400476-56.html?part=rss&amp;amp;subj=news&amp;amp;tag=2547-1_3-0-5&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here is Sinofsky’s keynote: &lt;a href="http://microsoftpdc.com/Sessions/KEY02"&gt;http://microsoftpdc.com/Sessions/KEY02&lt;/a&gt; (00:15:32, starts with Telemetry)&lt;/p&gt;  &lt;p&gt;Other blog entries:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.pcmag.com/miller/2009/11/pdc09_sinofsky_talks_about_cre.php" href="http://blogs.pcmag.com/miller/2009/11/pdc09_sinofsky_talks_about_cre.php"&gt;http://blogs.pcmag.com/miller/2009/11/pdc09_sinofsky_talks_about_cre.php&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/e7/archive/2009/05/11/OurNextEngineeringMilestone2.aspx" href="http://blogs.msdn.com/e7/archive/2009/05/11/OurNextEngineeringMilestone2.aspx"&gt;http://blogs.msdn.com/e7/archive/2009/05/11/OurNextEngineeringMilestone2.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9925638" width="1" height="1"&gt;</description></item><item><title>!Analyze – Automatic Root Cause Analysis</title><link>http://blogs.msdn.com/b/wer/archive/2009/09/29/analyze-automatic-root-cause-analysis.aspx</link><pubDate>Tue, 29 Sep 2009 20:19:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9900893</guid><dc:creator>Gr8Gatsby</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9900893</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/09/29/analyze-automatic-root-cause-analysis.aspx#comments</comments><description>&lt;p&gt;Meet the two engineers behind the !Analyze windows debugger extension!&lt;/p&gt;  &lt;p&gt;&lt;a title="http://channel9.msdn.com/posts/Charles/David-Grant-and-Ryan-Kivett-Analyze-Automatic-Root-Cause-Analysis/" href="http://channel9.msdn.com/posts/Charles/David-Grant-and-Ryan-Kivett-Analyze-Automatic-Root-Cause-Analysis/"&gt;http://channel9.msdn.com/posts/Charles/David-Grant-and-Ryan-Kivett-Analyze-Automatic-Root-Cause-Analysis/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;!Analyze is an automatic root cause analysis tool for software failures. For years, it has provided insight to engineers both inside and outside of Microsoft. It is a key enabling technology behind numerous higher-level feedback systems, including Windows Error Reporting and Watson.    &lt;br /&gt;!Analyze runs millions of times each day, producing actionable results from reliability telemetry data sent to Microsoft. Ordinary debugging tools report the file and function where a failure ended. !Analyze pinpoints where the failure started.     &lt;br /&gt;How does it work, exactly? What's the story behind !Analyze?     &lt;br /&gt;Meet two of the Software Developers behind !Analyze, David Grant and Ryan Kivett. They share with us how !Analyze works, it's history and provide a glimpse into it's potential future.Tune in. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9900893" width="1" height="1"&gt;</description></item><item><title>Using the web services to delete product mappings</title><link>http://blogs.msdn.com/b/wer/archive/2009/08/24/using-the-web-services-to-delete-product-mappings.aspx</link><pubDate>Mon, 24 Aug 2009 22:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9882910</guid><dc:creator>sunilab</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9882910</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/08/24/using-the-web-services-to-delete-product-mappings.aspx#comments</comments><description>&lt;div class="csharpcode"&gt; &lt;p&gt;&lt;font face="Trebuchet MS"&gt;In our June release we added web services for deleting mapped product(s), deleting mapped files from a product and deleting a mapped file from multiple products.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Trebuchet MS"&gt;The following code sample shows how to delete mapped products.&lt;/font&gt;&lt;/p&gt; &lt;p style="color: red"&gt;&lt;font face="Trebuchet MS"&gt;&lt;strong&gt;IMPORTANT: Please use and/or test this code very carefully as this delete cannot be undone.&lt;/strong&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Trebuchet MS"&gt;The first part of the code is used to login to the web service and get the encrypted token. The second part of the code is for deleting mapped products. The web service for deleting mapped products should be called with a post parameter named "mappedproductid" with a comma separated list of mapped product id's.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Trebuchet MS"&gt;Get the mapped product id's from the web service for getting the list of products.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; baseUrl = &lt;span class="str"&gt;"https://winqual.microsoft.com"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; userName = &lt;span class="str"&gt;"your winqual username"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; password = &lt;span class="str"&gt;"your winqual password"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="rem"&gt;// login&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; loginUrl = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="str"&gt;"{0}/services/Authentication/Authentication.svc/BasicTicket"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    , baseUrl);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; request = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="str"&gt;"&amp;lt;?xml version=\"1.0\" encoding=\"utf-8\"?&amp;gt;&amp;lt;soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"&amp;gt;&amp;lt;soap:Body&amp;gt;&amp;lt;GetBasicTicket xmlns=\"https://winqual.microsoft.com/Services/Authentication/\"&amp;gt;&amp;lt;userName&amp;gt;{0}&amp;lt;/userName&amp;gt;&amp;lt;password&amp;gt;{1}&amp;lt;/password&amp;gt;&amp;lt;/GetBasicTicket&amp;gt;&amp;lt;/soap:Body&amp;gt;&amp;lt;/soap:Envelope&amp;gt;"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    , userName&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    , password);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;WebClient loginClient = &lt;span class="kwrd"&gt;new&lt;/span&gt; WebClient();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;loginClient.Headers.Add(HttpRequestHeader.ContentType, &lt;span class="str"&gt;"text/xml"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;loginClient.Headers.Add(&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    &lt;span class="str"&gt;"SOAPAction"&lt;/span&gt;,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="str"&gt;"https://winqual.microsoft.com/Services/Authentication/IBasicTicket/GetBasicTicket"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; loginResponse = loginClient.UploadString(loginUrl, request);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&lt;span class="rem"&gt;// TODO: Handle condition where the ticket is null in case of bad pwd, bad username or some other error&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&lt;span class="rem"&gt;// parse the response to get the encrypted ticket out&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; startingIndex = loginResponse.IndexOf(&lt;span class="str"&gt;"&amp;lt;GetBasicTicketResult&amp;gt;"&lt;/span&gt;) + &lt;span class="str"&gt;"&amp;lt;GetBasicTicketResult&amp;gt;"&lt;/span&gt;.Length;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; endingIndex = loginResponse.IndexOf(&lt;span class="str"&gt;"&amp;lt;/GetBasicTicketResult&amp;gt;"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; encryptedTicket = loginResponse.Substring(startingIndex, (endingIndex - startingIndex));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;&lt;span class="rem"&gt;// comma separated list of mapped product id’s (integers) to delete.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;&lt;span class="rem"&gt;// IMPORTANT: This delete cannot be undone.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; mappedProductIDs = &lt;span class="str"&gt;"list of comma separated mapped product id's"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;NameValueCollection nameValueCollection = &lt;span class="kwrd"&gt;new&lt;/span&gt; NameValueCollection(1);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;nameValueCollection.Add(&lt;span class="str"&gt;"mappedproductid"&lt;/span&gt;, mappedProductIDs);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;WebClient webClient = &lt;span class="kwrd"&gt;new&lt;/span&gt; WebClient();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;webClient.Encoding = Encoding.UTF8;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;webClient.Headers.Add(&lt;span class="str"&gt;"encryptedTicket"&lt;/span&gt;, encryptedTicket);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;webClient.UploadValues(baseUrl + &lt;span class="str"&gt;"/services/wer/user/deletemappedproducts.aspx"&lt;/span&gt;, nameValueCollection);&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;This code will delete the mapped products and these products will look grayed out in the mapped product list at &lt;a title="https://winqual.microsoft.com/member/wer/user/ManageProductMappings.aspx" href="https://winqual.microsoft.com/member/wer/user/ManageProductMappings.aspx"&gt;https://winqual.microsoft.com/member/wer/user/ManageProductMappings.aspx&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The code for deleting mapped files for a product and deleting mapped file from multiple products is similar to the code above.&lt;/p&gt;
&lt;p&gt;The relative URL for deleting multiple mapped files from a single product is “/member/wer/user/DeleteMappedFilesForProduct.aspx”. This form requires two POST parameters. One is the “mappedproductid” parameter with the id of the mapped product and the second is “mappedfileid” which is the comma seperated list of mapped file id’s to delete.&lt;/p&gt;
&lt;p&gt;The relative URL for deleting a single mapped file from multiple products is “/member/wer/user/DeleteMappedFileFromProducts.aspx”. This form requires two POST parameters. One is the “mappedfileid” parameter with the id of the mapped file and the second is “mappedproductid” which is the comma seperated list of mapped product id’s to delete the mapped file id.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9882910" width="1" height="1"&gt;</description></item><item><title>The Three Cs of Response Satisfaction</title><link>http://blogs.msdn.com/b/wer/archive/2009/08/12/the-three-cs-of-response-satisfaction.aspx</link><pubDate>Wed, 12 Aug 2009 21:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9866878</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9866878</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/08/12/the-three-cs-of-response-satisfaction.aspx#comments</comments><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;The Windows Error Reporting (WER) platform offers software and hardware companies a way to provide helpful information to customers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;When an application stops working the WER client application that runs on Windows (since XP) detects these events and checks to see if a solution exists.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Software and hardware companies are able to create WER responses through the Windows Quality web portal (&lt;/FONT&gt;&lt;A href="https://winqual.microsoft.com/" mce_href="https://winqual.microsoft.com/"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;https://winqual.microsoft.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Windows end-users also have the ability to provide feedback on the quality of the solutions.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Through analyzing the feedback provided over the years and performing extensive usability studies we have found some simple rules that help to create a pleasant experience for end-users.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The 3 C’s are comprised of keeping Customer focus, providing Clear information, and keeping your information Current.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Customer focus&lt;/B&gt; – Keep the customer’s experience paramount in creating a response for your customers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Understanding that the customer sees messages first on the Windows operating system is important in creating a seamless experience.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;FONT face=Calibri size=3&gt;Do:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l4 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Create custom content that guides the customer&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l4 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Acknowledge that the customer was referred by Windows Error Reporting&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l4 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Use clear language and common terms&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;FONT face=Calibri size=3&gt;Don’t:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l2 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Put the customer on your main homepage&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l2 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Send the customer to a general support forum&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 0pt 0.75in; mso-add-space: auto"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Clear information&lt;/B&gt; – Ensure that information provides clear and concise steps for the end-user.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;FONT face=Calibri size=3&gt;Do:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l6 level1 lfo3"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Provide a direct download link to an update from the response message when possible&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l6 level1 lfo3"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Provide a customized and dedicated landing page on your company’s website that contains an easily identifiable link to download a fix&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l6 level1 lfo3"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Provide concise steps if user action is needed during an install&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l6 level1 lfo3"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Provide clear instructions if a work around is available&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;FONT face=Calibri size=3&gt;Don’t:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l0 level1 lfo4"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Provide misleading links&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l0 level1 lfo4"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Make the user click on three or more options before they reach an actionable solution&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l1 level1 lfo5"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Provide non-actionable information&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Current information&lt;/B&gt; – Keep your responses and landing pages up-to-date!&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We regularly review response quality and make decisions to un-publish responses based on current information and customer ratings.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;FONT face=Calibri size=3&gt;Do:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l3 level1 lfo6"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Check links on the landing pages after website updates&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l3 level1 lfo6"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Monitor the Response Satisfaction report available on the Developer Portal&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;FONT face=Calibri size=3&gt;Don’t:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-add-space: auto; mso-list: l5 level1 lfo7"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Let content sit for months unchanged&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 0pt 0.5in; mso-add-space: auto"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;If you have questions about creating a good response, you are welcome to use the contact information available on the WER portal. We are always happy to help.&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9866878" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/Windows+Error+Reporting/">Windows Error Reporting</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/WER+Services/">WER Services</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Getting+Started/">Getting Started</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Responses/">Responses</category></item><item><title>Using the Product Mapping File Upload Web Service</title><link>http://blogs.msdn.com/b/wer/archive/2009/06/12/using-the-product-mapping-file-upload-web-service.aspx</link><pubDate>Fri, 12 Jun 2009 23:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9738450</guid><dc:creator>sunilab</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9738450</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/06/12/using-the-product-mapping-file-upload-web-service.aspx#comments</comments><description>&lt;P&gt;Yesterday we released updates to our web services offerings. These updates include the ability to automate the upload of the product mapping XML, getting a list of products mapped, getting the list of mapped files for a product, deleting a mapped file from a product, deleting mapped products and deleting a mapped file from multiple products.&lt;/P&gt;
&lt;P&gt;This blog post lists the code (in C#) required to access our web services for uploading a product mapping file.&lt;/P&gt;
&lt;P&gt;The code does 2 things:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Login to the Winqual portal, since the authentication web service uses SOAP the code for accessing the authentication web service without a proxy is a bit cumbersome.&lt;/LI&gt;
&lt;LI&gt;Use the .NET WebClient class (you can also use the HttpWebRequest and HttpWebResponse classes for this) to upload the product mapping file and get the response.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Code for using the product mapping file upload service (also attached as a CS file):&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; filePath = &lt;SPAN class=str&gt;"path to the product mapping XML file e.g. c:\upload\CoolApplication.xml"&lt;/SPAN&gt;; &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; baseUrl = &lt;SPAN class=str&gt;"https://winqual.microsoft.com"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; userName = &lt;SPAN class=str&gt;"your winqual username"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; password = &lt;SPAN class=str&gt;"your winqual password"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;// login&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   7:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   8:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; loginUrl = &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.Format(&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   9:  &lt;/SPAN&gt;    &lt;SPAN class=str&gt;"{0}/services/Authentication/Authentication.svc/BasicTicket"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  10:  &lt;/SPAN&gt;    , baseUrl);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  11:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; request = &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.Format(&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  12:  &lt;/SPAN&gt;    &lt;SPAN class=str&gt;"&amp;lt;?xml version=\"1.0\" encoding=\"utf-8\"?&amp;gt;&amp;lt;soap:Envelope &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=str&gt;xmlns:soap=\&lt;A href="http://schemas.xmlsoap.org/soap/envelope//" mce_href="http://schemas.xmlsoap.org/soap/envelope/\"&gt;http://schemas.xmlsoap.org/soap/envelope/\&lt;/A&gt; &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=str&gt;xmlns:xsi=\&lt;A href="http://www.w3.org/2001/XMLSchema-instance/" mce_href="http://www.w3.org/2001/XMLSchema-instance\"&gt;http://www.w3.org/2001/XMLSchema-instance\&lt;/A&gt; &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=str&gt;xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"&amp;gt;&amp;lt;soap:Body&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=str&gt;&amp;lt;GetBasicTicket &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=str&gt;xmlns=\"https://winqual.microsoft.com/Services/Authentication/\"&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=str&gt;&amp;lt;userName&amp;gt;{0}&amp;lt;/userName&amp;gt;&amp;lt;password&amp;gt;{1}&amp;lt;/password&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=str&gt;&amp;lt;/GetBasicTicket&amp;gt;&amp;lt;/soap:Body&amp;gt;&amp;lt;/soap:Envelope&amp;gt;"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  13:  &lt;/SPAN&gt;    , userName&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  14:  &lt;/SPAN&gt;    , password);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  15:  &lt;/SPAN&gt;WebClient loginClient = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; WebClient();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  16:  &lt;/SPAN&gt;loginClient.Headers.Add(HttpRequestHeader.ContentType, &lt;SPAN class=str&gt;"text/xml"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  17:  &lt;/SPAN&gt;loginClient.Headers.Add(&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  18:  &lt;/SPAN&gt;    &lt;SPAN class=str&gt;"SOAPAction"&lt;/SPAN&gt;,&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  19:  &lt;/SPAN&gt;    &lt;SPAN class=str&gt;"https://winqual.microsoft.com/Services&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=str&gt;/Authentication/IBasicTicket/GetBasicTicket"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  20:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; loginResponse = loginClient.UploadString(loginUrl, request);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  21:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  22:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  23:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;// parse the response to get the encrypted ticket out&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  24:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;// TODO: Handle condition where the ticket is null in case of bad pwd, &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=rem&gt;bad username or some other error&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  25:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  26:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  27:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; startingIndex = loginResponse.IndexOf(&lt;SPAN class=str&gt;"&amp;lt;GetBasicTicketResult&amp;gt;"&lt;/SPAN&gt;) &lt;/PRE&gt;&lt;PRE&gt;+ &lt;SPAN class=str&gt;"&amp;lt;GetBasicTicketResult&amp;gt;"&lt;/SPAN&gt;.Length;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  28:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; endingIndex = loginResponse.IndexOf(&lt;SPAN class=str&gt;"&amp;lt;/GetBasicTicketResult&amp;gt;"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  29:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; encryptedTicket = loginResponse.Substring(startingIndex&lt;/PRE&gt;&lt;PRE&gt;, (endingIndex - startingIndex));&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  30:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  31:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  32:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;// upload file&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  33:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  34:  &lt;/SPAN&gt;WebClient webClient = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; WebClient();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  35:  &lt;/SPAN&gt;webClient.Headers.Add(&lt;SPAN class=str&gt;"encryptedTicket"&lt;/SPAN&gt;, encryptedTicket);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  36:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;byte&lt;/SPAN&gt;[] responseBytes = webClient.UploadFile(baseUrl &lt;/PRE&gt;&lt;PRE&gt;+ &lt;SPAN class=str&gt;"/services/wer/user/fileupload.aspx"&lt;/SPAN&gt;, filePath);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  37:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  38:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  39:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;// the response that the WebClient gets may contain an updated ticket, so get that&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  40:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  41:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (webClient.ResponseHeaders[&lt;SPAN class=str&gt;"encryptedTicket"&lt;/SPAN&gt;] != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  42:  &lt;/SPAN&gt;{&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  43:  &lt;/SPAN&gt;    encryptedTicket = webClient.ResponseHeaders[&lt;SPAN class=str&gt;"encryptedTicket"&lt;/SPAN&gt;];&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  44:  &lt;/SPAN&gt;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  45:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  46:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  47:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;// get the response&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  48:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  49:  &lt;/SPAN&gt;UTF8Encoding encoding = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; UTF8Encoding();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  50:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; fileUploadResponse = encoding.GetString(responseBytes);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  51:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  52:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  53:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;// TODO: Check the response XML for success or error message&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  54:  &lt;/SPAN&gt;&lt;SPAN class=rem&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  55:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  56:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; fileUploadResponse;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;The XML response from the authentication service will be similar to the following when the login is successful: 
&lt;STYLE type=text/css&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;
&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;s:Envelope&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xmlns:s&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="http://schemas.xmlsoap.org/soap/envelope/"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;s:Body&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;GetBasicTicketResponse&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=attr&gt;xmlns&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="https://winqual.microsoft.com/Services/Authentication/"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
                     &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;GetBasicTicketResult&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&lt;/SPAN&gt;encrypted ticket string&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;GetBasicTicketResult&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt; 
              &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;GetBasicTicketResponse&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;s:Body&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;s:Envelope&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;The XML response from the authentication service in case of a login failure will be similar to the following: 
&lt;STYLE type=text/css&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;
&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;s:Envelope&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xmlns:s&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="http://schemas.xmlsoap.org/soap/envelope/"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;s:Body&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;GetBasicTicketResponse&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=attr&gt;xmlns&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="https://winqual.microsoft.com/Services/Authentication/"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;GetBasicTicketResult&lt;/SPAN&gt; &lt;SPAN class=attr&gt;a:nil&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="true"&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=attr&gt;xmlns:a&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="http://www.w3.org/2001/XMLSchema-instance"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt; 
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;GetBasicTicketResponse&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;s:Body&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;s:Envelope&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;The XML response when the upload is successful is similar to the following ATOM output:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN class=html&gt;xml&lt;/SPAN&gt; &lt;SPAN class=attr&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="1.0"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;encoding&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="utf-8"&lt;/SPAN&gt; ?&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;feed&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xmlns&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;=&lt;A href="http://www.w3.org/2005/Atom" mce_href="http://www.w3.org/2005/Atom"&gt;http://www.w3.org/2005/Atom&lt;/A&gt;&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=attr&gt;xmlns:wer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;=&lt;A href="http://schemas.microsoft.com/windowserrorreporting" mce_href="http://schemas.microsoft.com/windowserrorreporting"&gt;http://schemas.microsoft.com/windowserrorreporting&lt;/A&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&lt;/SPAN&gt; &lt;SPAN class=attr&gt;wer:status&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="ok"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Feed Success&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt; 
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;link&lt;/SPAN&gt; &lt;SPAN class=attr&gt;rel&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="alternate"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;type&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="text/html"&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=attr&gt;href&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="https://winqual.microsoft.com/services/wer/user/fileupload.aspx"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt; 
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;updated&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;2009-06-12 19:28:28Z&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;updated&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt; 
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Success&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt; 
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;entry&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;updated&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;2009-06-12 19:28:28Z&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;updated&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt; 
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;published&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;2009-06-12 19:28:28Z&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;published&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt; 
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;File uploaded successfully&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt; 
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;File uploaded successfully&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt; 
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;wer:additionalInformation&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt; 
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;entry&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;feed&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;You can check the file upload by going to the website:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://winqual.microsoft.com/member/wer/user/ManageProductMappings.aspx" mce_href="https://winqual.microsoft.com/member/wer/user/ManageProductMappings.aspx"&gt;https://winqual.microsoft.com/member/wer/user/ManageProductMappings.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Once you sort the table by the Map Date column in descending order, you should see your uploaded product.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/UsingtheProductMappingFileUploadWebServi_B8C7/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/UsingtheProductMappingFileUploadWebServi_B8C7/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=clip_image002 border=0 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/UsingtheProductMappingFileUploadWebServi_B8C7/clip_image002_thumb.jpg" width=534 height=83 mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/UsingtheProductMappingFileUploadWebServi_B8C7/clip_image002_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;You can see the files for the product uploaded by clicking the icon under the File Mappings column.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9738450" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/WER+Services/">WER Services</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Mapping+XML+Upload/">Mapping XML Upload</category></item><item><title>Windows Error Reporting – Vote for a fix!</title><link>http://blogs.msdn.com/b/wer/archive/2009/05/13/windows-error-reporting-vote-for-a-fix.aspx</link><pubDate>Thu, 14 May 2009 00:38:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9611483</guid><dc:creator>Gr8Gatsby</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9611483</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/05/13/windows-error-reporting-vote-for-a-fix.aspx#comments</comments><description>&lt;p&gt;If you are a developer and reading this blog you may already know of the direct benefits provided by users submitting error reports, if you are an end-user of an application, on Windows, developers are relying on you to help identify solutions to issues that are difficult to reproduce.&lt;/p&gt;  &lt;p&gt;I want to take this short blog entry on what good Windows Error Reporting brings to the Windows Operating System and eco-system.&amp;#160; I am including hyperlinks that give a view from 3rd parties on the good things that Windows Error Reporting enables for developers on the Windows OS.&lt;/p&gt;  &lt;p&gt;The title of this blog posting was inspired by the &lt;a href="http://windowsitpro.com/article/articleid/46982/windows-error-reporting-elementary-my-dear-watson.html"&gt;WindowsITPro.com&lt;/a&gt; article below where each error report sent to Windows Error Reporting (WER) is a vote for a fix, although the article was written a few years ago, the theme of voting remains the same. Although not like texting a vote into American Idol, I argue that sending a Windows Error Report is easier and can end up fixing the issue you reported in the end!&amp;#160;&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Kate details how using Windows Error Reporting to solve problems is helpful on Vista.&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a title="http://www.gregcons.com/KateBlog/WindowsErrorReportingIsYourFriend.aspx" href="http://www.gregcons.com/KateBlog/WindowsErrorReportingIsYourFriend.aspx"&gt;http://www.gregcons.com/KateBlog/WindowsErrorReportingIsYourFriend.aspx&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;O’Reilly gives an overview:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a title="http://windowsdevcenter.com/pub/a/windows/2004/03/16/wer.html" href="http://windowsdevcenter.com/pub/a/windows/2004/03/16/wer.html"&gt;http://windowsdevcenter.com/pub/a/windows/2004/03/16/wer.html&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Bob Kelly has a post talking about his recommendations:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a title="http://www.realtime-vista.com/administration/2007/03/windows_error_reporting_option.htm" href="http://www.realtime-vista.com/administration/2007/03/windows_error_reporting_option.htm"&gt;http://www.realtime-vista.com/administration/2007/03/windows_error_reporting_option.htm&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;WindowsITPro.com article highlights how each error report you send in is like a vote for a fix:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a title="http://windowsitpro.com/article/articleid/46982/windows-error-reporting-elementary-my-dear-watson.html" href="http://windowsitpro.com/article/articleid/46982/windows-error-reporting-elementary-my-dear-watson.html"&gt;http://windowsitpro.com/article/articleid/46982/windows-error-reporting-elementary-my-dear-watson.html&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;An article talking about how WER has helped to build Windows 7:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a title="http://news.softpedia.com/news/Windows-7-Windows-Error-Reporting-Infrastructure-103252.shtml" href="http://news.softpedia.com/news/Windows-7-Windows-Error-Reporting-Infrastructure-103252.shtml"&gt;http://news.softpedia.com/news/Windows-7-Windows-Error-Reporting-Infrastructure-103252.shtml&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:06a65a56-e540-420e-a3a6-6e5710da0b5d" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/WER" rel="tag"&gt;WER&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows" rel="tag"&gt;Windows&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Error" rel="tag"&gt;Error&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Reports" rel="tag"&gt;Reports&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Error+Reporting" rel="tag"&gt;Windows Error Reporting&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Fix" rel="tag"&gt;Fix&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Developer" rel="tag"&gt;Developer&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9611483" width="1" height="1"&gt;</description></item><item><title>Vista WER Settings UI Deciphered</title><link>http://blogs.msdn.com/b/wer/archive/2009/04/15/vista-wer-settings-ui-deciphered.aspx</link><pubDate>Thu, 16 Apr 2009 00:53:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9551579</guid><dc:creator>varunb</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9551579</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/04/15/vista-wer-settings-ui-deciphered.aspx#comments</comments><description>&lt;p&gt;This post is a follow up to the original post I did about &lt;a href="http://blogs.msdn.com/wer/archive/2009/03/11/an-overview-of-wer-consent-settings-and-corresponding-ui-behavior.aspx"&gt;WER Settings &amp;amp; UI for Windows 7&lt;/a&gt;. While that post outlined the settings UI in Windows 7, this post covers the WER settings UI for Windows Vista.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WER Consent Settings:&lt;/strong&gt; The various WER consent levels are identical across Windows Vista and Windows 7. Please review &lt;a href="http://blogs.msdn.com/wer/archive/2009/03/11/an-overview-of-wer-consent-settings-and-corresponding-ui-behavior.aspx"&gt;this post&lt;/a&gt; to get an understanding of the various consent levels first. The rest of this blog post explains how these consent options are exposed in the Windows Vista UI. &lt;/p&gt;  &lt;p&gt;The WER setting in Windows Vista is exposed in the ‘Problem Reports &amp;amp; Solutions’ (aka PRS) Control Panel. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/VistaWERSettingsUIDeciphered_CE3A/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/VistaWERSettingsUIDeciphered_CE3A/image_thumb.png" width="422" height="238" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Clicking the ‘Change settings’ link in PRS, opens up the &lt;strong&gt;basic settings page&lt;/strong&gt; shown below. These settings allow configuration of WER consent settings for that specific &lt;strong&gt;logged in user&lt;/strong&gt; only.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/VistaWERSettingsUIDeciphered_CE3A/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/VistaWERSettingsUIDeciphered_CE3A/image_thumb_2.png" width="671" height="266" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Clicking on the ‘Advanced Settings’ link on this page opens the, well, &lt;strong&gt;advanced settings page&lt;/strong&gt; shown below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/VistaWERSettingsUIDeciphered_CE3A/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/VistaWERSettingsUIDeciphered_CE3A/image_thumb_3.png" width="625" height="425" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Clicking on the lower ‘Change Settings’ button, brings up a dialog which allows setting consent for &lt;strong&gt;all users on the machine&lt;/strong&gt;. Here is how that dialog looks:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/VistaWERSettingsUIDeciphered_CE3A/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/VistaWERSettingsUIDeciphered_CE3A/image_thumb_4.png" width="487" height="243" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hope this clarifies the various WER settings and how they can be configured on Windows Vista.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9551579" width="1" height="1"&gt;</description></item><item><title>Problem Steps Recorder (PSR.exe) + Windows Error Reporting = Another tool to help find solutions to software defects</title><link>http://blogs.msdn.com/b/wer/archive/2009/03/30/problem-steps-recorder-psr-exe-windows-error-reporting-another-tool-to-help-find-solutions-to-software-defects.aspx</link><pubDate>Mon, 30 Mar 2009 22:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9519998</guid><dc:creator>Gr8Gatsby</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9519998</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/03/30/problem-steps-recorder-psr-exe-windows-error-reporting-another-tool-to-help-find-solutions-to-software-defects.aspx#comments</comments><description>&lt;div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7dd81d36-fd40-4dc4-8cdb-fb26cea22a64" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/PSR" mce_href="http://technorati.com/tags/PSR" rel="tag"&gt;PSR&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WER" mce_href="http://technorati.com/tags/WER" rel="tag"&gt;WER&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WER+Services" mce_href="http://technorati.com/tags/WER+Services" rel="tag"&gt;WER Services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Problem+Steps+Recorder" mce_href="http://technorati.com/tags/Problem+Steps+Recorder" rel="tag"&gt;Problem Steps Recorder&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Repro+Steps" mce_href="http://technorati.com/tags/Repro+Steps" rel="tag"&gt;Repro Steps&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;There is a bunch of information on the web about PSR and one of the best is this video on CNET:&amp;nbsp; &lt;a href="http://cnettv.cnet.com/2001-1_53-50005144.html" mce_href="http://cnettv.cnet.com/2001-1_53-50005144.html"&gt;http://cnettv.cnet.com/2001-1_53-50005144.html&lt;/a&gt;&amp;nbsp; as you can see a demo of the tool working for an end-user perspective, it behaves differently when invoked by WER as described below.&amp;nbsp; The key difference is that WER doesn’t collect screenshots.&lt;/p&gt;  &lt;p&gt;From an error reporting perspective we plan on exposing this via the WER Services.&amp;nbsp; The concept is that if you aren’t able to use standard mini-dumps or heap dumps to find the source of the problem, WER Services will allow the PSR tool to be run (with &lt;b&gt;&lt;u&gt;&lt;a href="http://blogs.msdn.com/wer/archive/2009/03/11/an-overview-of-wer-consent-settings-and-corresponding-ui-behavior.aspx" mce_href="http://blogs.msdn.com/wer/archive/2009/03/11/an-overview-of-wer-consent-settings-and-corresponding-ui-behavior.aspx"&gt;user consent&lt;/a&gt;&lt;/u&gt;&lt;/b&gt;) &lt;/p&gt;  &lt;p&gt;Example of screen-shot shown to user:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/ProblemStepsRecorderPSR.exe_7876/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/ProblemStepsRecorderPSR.exe_7876/image_2.png"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/ProblemStepsRecorderPSR.exe_7876/image_thumb.png" style="border: 0px none ; display: block; float: none; margin-left: auto; margin-right: auto;" title="image" alt="image" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/ProblemStepsRecorderPSR.exe_7876/image_thumb.png" width="381" border="0" height="246"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When we enable an error &lt;b&gt;Bucket&lt;/b&gt; to collect PSR data, here is the workflow:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;User prompted with a request for additional data &lt;/li&gt;    &lt;li&gt;PSR waits until next time the same application is launched &lt;/li&gt;    &lt;li&gt;PSR runs silently in the background while user is using the application &lt;/li&gt;    &lt;li&gt;PSR captures descriptions of steps user has taken (without screenshots) &lt;/li&gt;    &lt;li&gt;&lt;b&gt;IF&lt;/b&gt; the same unhandled exception occurs (&lt;b&gt;BucketID&lt;/b&gt;) &lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;The Memory dump, Additional Files, and the PSR output is sent in a CAB file through WER &lt;/li&gt;      &lt;li&gt;Developer’s can now download CAB files associated with a particular event that contain these steps a user took leading up to the crash &lt;/li&gt;      &lt;li&gt;Developer’s can try to reproduce the error locally following these steps.&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;After PSR steps are sent with CAB the PSR tool is disabled for user&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;b&gt;IMPORTANT NOTES&lt;/b&gt;: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;PSR.exe when invoked by WER does &lt;b&gt;NOT&lt;/b&gt; capture screenshots, see example output below.&lt;/li&gt;    &lt;li&gt;Only CAB files that contain PSR steps will be submitted to WER, this means that possibly fewer cabs will be sent for a particular Bucket.&lt;/li&gt;    &lt;li&gt;When Windows 7 firsts launches this feature will only be manually enabled by the team behind &lt;a href="mailto:wer@microsoft.com" mce_href="mailto:wer@microsoft.com"&gt;wer@microsoft.com&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Other links and blog posts&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/magazine/dd464813.aspx" mce_href="http://technet.microsoft.com/en-us/magazine/dd464813.aspx"&gt;http://technet.microsoft.com/en-us/magazine/dd464813.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cjacks/archive/2009/02/25/deciphering-the-command-line-configuration-of-the-windows-7-problem-steps-recorder.aspx" mce_href="http://blogs.msdn.com/cjacks/archive/2009/02/25/deciphering-the-command-line-configuration-of-the-windows-7-problem-steps-recorder.aspx"&gt;http://blogs.msdn.com/cjacks/archive/2009/02/25/deciphering-the-command-line-configuration-of-the-windows-7-problem-steps-recorder.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/tims/archive/2009/01/12/the-bumper-list-of-windows-7-secrets.aspx" mce_href="http://blogs.msdn.com/tims/archive/2009/01/12/the-bumper-list-of-windows-7-secrets.aspx"&gt;http://blogs.msdn.com/tims/archive/2009/01/12/the-bumper-list-of-windows-7-secrets.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Sample output&lt;/b&gt;:&lt;/p&gt;  &lt;table width="523" border="0" cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="521"&gt;         &lt;p&gt;&lt;i&gt;&lt;b&gt;Problem Step 1: (3/27/2009 7:53:51 PM)&lt;/b&gt; User right click on "user consent (editable text)" in "Problem Steps Recorder (PSR.exe) + Windows Error Reporting = Another tool to help find solutions to software defects - Windows Live Writer" &lt;/i&gt;&lt;/p&gt;          &lt;p&gt;&lt;i&gt;&lt;b&gt;Problem Step&amp;nbsp; 2: (3/27/2009 7:53:53 PM)&lt;/b&gt; User left click on "Hyperlink... (menu item)" &lt;/i&gt;&lt;/p&gt;          &lt;p&gt;&lt;i&gt;&lt;b&gt;Problem Step 3: (3/27/2009 7:53:55 PM)&lt;/b&gt; User keyboard input in "Insert Hyperlink" [... Enter]&lt;/i&gt; &lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9519998" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/WER/">WER</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Windows+Error+Reporting/">Windows Error Reporting</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/WER+Services/">WER Services</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/PSR/">PSR</category></item><item><title>Let There Be Hangs: Part 4 – Hashes and Type Codes and XProc, Oh My!</title><link>http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-4-better-bucketing-in-windows-vista.aspx</link><pubDate>Thu, 19 Mar 2009 22:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9490989</guid><dc:creator>ryankiv</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9490989</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-4-better-bucketing-in-windows-vista.aspx#comments</comments><description>&lt;H5&gt;Hang Bucketing, A Better Way&lt;/H5&gt;
&lt;P&gt;In the &lt;A href="http://blogs.msdn.com/wer/archive/2009/03/19/let-there-be-hangs-part-3-the-hungapp-module.aspx" mce_href="http://blogs.msdn.com/wer/archive/2009/03/19/let-there-be-hangs-part-3-the-hungapp-module.aspx"&gt;previous post&lt;/A&gt; I gave a brief introduction of how the first version of hang reporting was implemented using the existing crash reporting infrastructure.&lt;/P&gt;
&lt;P&gt;Eventually (after Windows XP shipped) a new general purpose event reporting and bucketing mechanism was built. In a nutshell, this mechanism provides a very flexible way to report incidents to the WER pipeline.&amp;nbsp; It supports a custom named event (internally at Microsoft dubbed “generic events”) and up to 10 custom bucketing parameters P1...P&lt;EM&gt;n&lt;/EM&gt;...P10. &lt;/P&gt;
&lt;P&gt;During the development of Windows Vista, we decided to do something about the problematic hang bucketing and leverage the new general purpose reporting to gain a much better client-side classification of hang issues.&amp;nbsp; Before I explain what bucketing parameters these have, let me discuss a few other new things in Vista:&lt;/P&gt;
&lt;P&gt;Another problem with Windows XP hang reporting was that the application process was often hung waiting on an external process.&amp;nbsp; The report would only include a memory dump of the hung application and developers were often forced to give up not able to debug the other process.&amp;nbsp; (Now, granted, you very often don't need to debug the other process to fix a hang, but that is a discussion for a later blog post.)&lt;/P&gt;
&lt;P&gt;To solve this problem, the &lt;A href="http://msdn2.microsoft.com/en-us/library/ms679364.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms679364.aspx"&gt;GetThreadWaitChain&lt;/A&gt; API was created.&amp;nbsp; This API allows the caller to discover the blocking graph (or “wait chain”) for a given thread.&amp;nbsp; A trivial example: Thread A is waiting to enter a critical section owned by Thread B which is making a blocking SendMessage call to Thread C which is waiting on a mutex owned by Thread D which is running in another process.&amp;nbsp; The output from the API provides the caller all of this information.&lt;/P&gt;
&lt;P&gt;It's this mechanism that hang reporting uses in Vista to discover not only the wait chain information but to collect memory dumps of external processes.&lt;/P&gt;
&lt;P&gt;Back to the bucketing parameters – the hang reporting infrastructure actually reports hangs to two different generic events: AppHangB1 and AppHangXProcB1 (yes, B1 stands for Beta 1.&amp;nbsp; Don’t ask…).&amp;nbsp; On Winqual, AppHangB1 is shown as Event Type "Hang" and AppHangXProcB1 is shown as "Hang XProc".&amp;nbsp; AppHangB1 has 5 parameters (by convention P1 &amp;amp; P2 are typically Application Name &amp;amp; Version):&lt;/P&gt;
&lt;P&gt;P1 - Application Name &lt;BR&gt;P2 - Application Version &lt;BR&gt;P3 - Application Timestamp &lt;BR&gt;P4 - Stack Hash &lt;BR&gt;P5 - Type Code&lt;/P&gt;
&lt;P&gt;AppHangXProcB1 has those 5 and adds 2 more:&lt;/P&gt;
&lt;P&gt;P6 - Waiting On Application Name &lt;BR&gt;P7 - Waiting On Application Version&lt;/P&gt;
&lt;P&gt;Most of these parameters are self explanatory.&amp;nbsp; The two that might not be are P4 and P5:&lt;/P&gt;
&lt;P&gt;Stack Hash (P4) - hang reporting traverses the wait chain and for the final thread in the chain &lt;EM&gt;before&lt;/EM&gt; it jumps to a different process, we generate a hash based on the thread’s stack back trace. P4 is a &lt;EM&gt;restricted &lt;/EM&gt;hash which means we chop the MD5 128-bit hash down to 16 bits.&amp;nbsp; This prevents any wild spraying of buckets and when we studied it we were still achieving ~85% uniqueness.&lt;/P&gt;
&lt;P&gt;Type Code (P5) - this is a bit field based in part on the WCT_OBJECT_TYPEs found during wait chain traversal with GetThreadWaitChain (e.g., mutex, COM, etc.) but also on a few other items too - like if there's a deadlock or if the hang report came from End Task in Task Manager (more blog fodder).&lt;/P&gt;
&lt;P&gt;As rich and wonderful as hang bucketing has become in Windows Vista, there are still edge cases (just as there are in crash bucketing) where a bucket does not uniquely identify a single bug.&amp;nbsp; In a future post I will discuss bucketing more generally and how we REALLY determine and quantify bugs using WER data at Microsoft.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9490989" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/WER/">WER</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Hang/">Hang</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Bucketing/">Bucketing</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Hung/">Hung</category></item><item><title>Let There Be Hangs: Part 2 – WER History 101</title><link>http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-2-wer-history-101.aspx</link><pubDate>Thu, 19 Mar 2009 22:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9490986</guid><dc:creator>ryankiv</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9490986</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-2-wer-history-101.aspx#comments</comments><description>&lt;h4&gt;Crashes Suck&lt;/h4&gt;  &lt;p&gt;In the beginning, we needed a way to close the loop with our customers in order to ease the pain felt from software defects (bugs) that caused crashes.&amp;#160; A simple client service was produced that collected crash dumps from Windows desktops and sent them back to Microsoft for analysis. The crash dumps were debugged, bugs exposed, fixes were made, problems went away. Lather, rinse, repeat.&amp;#160; Note: This is how &lt;em&gt;user&lt;/em&gt; mode error reporting began.&amp;#160; Interestingly, kernel mode error reporting (bluescreens) had its origin in a roughly parallel timeframe (actually a little earlier) but it began in a completely different group at Microsoft. For the rest of this series of posts I’m talking about the user mode side of WER.&lt;/p&gt;  &lt;h5&gt;Buckets&lt;/h5&gt;  &lt;p&gt;An early design assumption was that this client had zero analysis ability and so we needed a simple and deterministic way to organize the data that would allow both the client and the backend servers at Microsoft to speak to each other in a common language.&amp;#160; Oh, and the solution needed to be (*ahem*) scalable. That common language is the unique combination of event &lt;em&gt;parameters&lt;/em&gt; which give us the &lt;em&gt;Event ID&lt;/em&gt;. Internally at Microsoft these are actually known as &lt;em&gt;bucket&lt;/em&gt; IDs – or just buckets.&amp;#160; It’s more natural for me to talk about buckets and I’ll try to be consistent, but just in case, know that “bucket” and “event” are mostly interchangeable in the context of error reporting. &lt;/p&gt;  &lt;p&gt;Originally, plain old crashes were bucketed using 5 parameters:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The application’s name &lt;/li&gt;    &lt;li&gt;The application’s version &lt;/li&gt;    &lt;li&gt;The name of the module containing the instruction that causes the crash exception &lt;/li&gt;    &lt;li&gt;The version of that module &lt;/li&gt;    &lt;li&gt;The byte offset into that module where that instruction resides &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/LetThereBeHangsPart2_A854/crash%20event%20with%20hits.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/LetThereBeHangsPart2_A854/crash%20event%20with%20hits.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 15px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="crash event with hits" border="0" alt="crash event with hits" align="right" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/LetThereBeHangsPart2_A854/crash%20event%20with%20hits_thumb.png" width="240" height="212" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/LetThereBeHangsPart2_A854/crash%20event%20with%20hits_thumb.png" /&gt;&lt;/a&gt; The idea was that crashes with the same set of parameters were caused by the same bug. It turns out that this isn’t always true (We’ll save that for a later post) but in general it works pretty well. Today, this “client” is built as a core component of Windows and became generally referred to Windows Error Reporting (WER) Services.&amp;#160; In Vista we added 3 more parameters to plain old crash reporting: file link timestamps for both the application and modules (to try and avoid some issues of naming collisions) and exception code.&amp;#160; And by the way, the client itself has become smarter and in fact does &lt;em&gt;some&lt;/em&gt; cursory analysis when deriving bucketing parameters.&lt;/p&gt;  &lt;p&gt;Notice that you can tell the explorer crash to the right is from Windows XP because those extra 3 parameters don’t have data.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/archive/2009/03/19/let-there-be-hangs-part-1-not-responding.aspx"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt; Read Part 1&lt;/a&gt; [Part 2] &lt;a href="http://blogs.msdn.com/wer/archive/2009/03/19/let-there-be-hangs-part-3-the-hungapp-module.aspx"&gt;Read Part 3 &lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9490986" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/Hang/">Hang</category><category domain="http://blogs.msdn.com/b/wer/archive/tags/Hung/">Hung</category></item><item><title>Let There Be Hangs: Part 3 – The ‘hungapp’ module</title><link>http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-3-the-hungapp-module.aspx</link><pubDate>Thu, 19 Mar 2009 22:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9490988</guid><dc:creator>ryankiv</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9490988</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-3-the-hungapp-module.aspx#comments</comments><description>&lt;h4&gt;Hang Bucketing, v1&lt;/h4&gt;  &lt;p&gt;On Windows XP, hangs have it rough.&amp;#160; Like a younger sibling, error reporting for hangs has to wear the hand-me-down clothes of crash reporting – it piggybacks on the same 5 fixed bucketing parameters used by crash reporting. However with a hang there is no exception context and so there is no faulting instruction, therefore there is no module name, module version or module offset.&amp;#160; So on XP, hangs really only have 2 effective bucketing parameters (application name and application version).&amp;#160; The other parameters are set where module name is &amp;quot;hungapp&amp;quot;, module version is &amp;quot;0.0.0.0&amp;quot;, and the offset is 0.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/LetThereBeHangsPart3_A863/hungapp%20box%20explorer.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/LetThereBeHangsPart3_A863/hungapp%20box%20explorer.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="hungapp box explorer" border="0" alt="hungapp box explorer" align="right" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/LetThereBeHangsPart3_A863/hungapp%20box%20explorer_thumb.png" width="240" height="137" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/LetThereBeHangsPart3_A863/hungapp%20box%20explorer_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This means all of particular version of an application’s hangs ended up in a single bucket.&amp;#160; Knowing this, you might correctly guess that these buckets have very high hit counts when compared with crash buckets for the same app name/version (though some corruption buckets are not far behind).&amp;#160; When someone runs a generalized query similar to, &amp;quot;what are my highest hitting XP buckets this week?&amp;quot;, the top end of the results are often littered with hang buckets.&amp;#160; A naive conclusion would be &amp;quot;Oh my! Hangs are a huge problem and we must focus all our effort to eradicate them!&amp;quot;&amp;#160; While hangs are indeed a big problem, arriving at this conclusion based on bucket hit volume is incorrect.&amp;#160; Also, when the actual failures contained in these hang buckets are studied, it is quickly apparent they are composing many bugs – not just the ideal 1 (or few). This is a big reason development teams historically struggled to make progress with hang bugs - the data was difficult to sort and measure.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/LetThereBeHangsPart3_A863/hungapp%20box%20explorer.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/LetThereBeHangsPart3_A863/hungapp%20box%20explorer.png"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/archive/2009/03/19/let-there-be-hangs-part-2-wer-history-101.aspx"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt; Read Part 2&lt;/a&gt; [Part 3] &lt;a href="http://blogs.msdn.com/wer/archive/2009/03/19/let-there-be-hangs-part-4-better-bucketing-in-windows-vista.aspx"&gt;Read Part 4 &lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9490988" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/Hang/">Hang</category></item><item><title>Let There Be Hangs: Part 1 (Not Responding)</title><link>http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-1-not-responding.aspx</link><pubDate>Thu, 19 Mar 2009 22:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9490974</guid><dc:creator>ryankiv</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9490974</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/03/19/let-there-be-hangs-part-1-not-responding.aspx#comments</comments><description>&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:edcd728b-4424-4fed-96ca-269747ffe964" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/application" rel="tag"&gt;application&lt;/a&gt;,&lt;a href="http://technorati.com/tags/hang" rel="tag"&gt;hang&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+hang" rel="tag"&gt;application hang&lt;/a&gt;,&lt;a href="http://technorati.com/tags/windows" rel="tag"&gt;windows&lt;/a&gt;,&lt;a href="http://technorati.com/tags/hung" rel="tag"&gt;hung&lt;/a&gt;,&lt;a href="http://technorati.com/tags/xproc" rel="tag"&gt;xproc&lt;/a&gt;,&lt;a href="http://technorati.com/tags/hang+XProc" rel="tag"&gt;hang XProc&lt;/a&gt;&lt;/div&gt;  &lt;h4&gt;Well hang &lt;em&gt;reports &lt;/em&gt;anyway…&lt;/h4&gt;  &lt;p&gt;Those of you signed up on the &lt;a href="http://winqual.microsoft.com/" mce_href="http://winqual.microsoft.com/"&gt;Winqual site&lt;/a&gt; are likely familiar with the &amp;quot;Event ID&amp;quot; and what it (ideally) represents – that is, a basic demarcation of unique software defects.&amp;#160; Additionally you’re probably more familiar with crash-related Event IDs like “Crash 32-bit” and “Crash 64-bit”.&amp;#160; But what about the other event types?&amp;#160; Specifically “Hang” and “Hang XProc”?&amp;#160; And by the way – what’s a crash in module “hungapp”?&lt;/p&gt;  &lt;p&gt;In this and later posts I’m going to explain a little bit about error reporting and a little bit more about hangs – what they are, how they’re detected, reported, organized, counted, etc. Before getting into all that, however, we need a (very) brief history lesson.&lt;/p&gt;  &lt;h4&gt;Ghost Windows&lt;/h4&gt;  &lt;p&gt;Some of you might remember something like the following scene from the days of Windows NT 4 (and maybe you’ve seen similar scenes in more recent times):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/SavedForPart1_B21C/NT4NoGhost_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="NT4NoGhost" border="0" alt="NT4NoGhost" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/SavedForPart1_B21C/NT4NoGhost_thumb.jpg" width="240" height="234" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is a screenshot of CALC.EXE moved across an intentionally hung instance of NOTEPAD.EXE.&lt;/p&gt;  &lt;p&gt;Without getting into too much nitty gritty, a thread that creates GUI elements, namely windows, has an implicit contract with the desktop window manager that it will service messages that arrive in its message queue... in a timely fashion. “Servicing” means retrieving &lt;em&gt;and&lt;/em&gt; dispatching the messages (aka pumping messages).&amp;#160; There is plenty of &lt;a class="class" href="http://msdn.microsoft.com/en-us/library/ms644928.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/ms644928.aspx"&gt;content on MSDN&lt;/a&gt; that covers the specific APIs and mechanisms used for this and plenty of content &lt;a class="class" href="http://blogs.msdn.com/oldnewthing/search.aspx?q=message+queues&amp;amp;p=1" target="_blank" mce_href="http://blogs.msdn.com/oldnewthing/search.aspx?q=message+queues&amp;amp;p=1"&gt;elsewhere&lt;/a&gt; about the interesting peculiarities of this area.&amp;#160; What &amp;quot;timely fashion&amp;quot; means is somewhat a matter of debate among developers and users. To the window manager, it means 5 seconds by default.&amp;#160; Our user research shows that this is actually quite generous.&lt;/p&gt;  &lt;p&gt;If a thread stops pumping messages from its message queue, bad things start to happen. In such cases, the thread is often off busy working on whatever task the user just “asked” it to do (e.g. opening a file or recalculating some total or talking to a web service over the internet) and there’s a good chance that it didn’t update its UI to indicate that it’s off doing this work; it almost certainly hasn’t shown any UI resulting from that work. But there is a worse and more fundamental problem – while it’s away, the messages it isn’t pumping could be mouse, keyboard, or touch input along with paint messages.&amp;#160; Not pumping those messages would result in a window stuck on the user’s screen – the user wouldn’t be able to move, minimize, or close it and if they moved something in front of it, they’d get something like the jaggy mess in the screen shot above.&lt;/p&gt;  &lt;p&gt;I say &lt;em&gt;would&lt;/em&gt; because beginning with Windows 2000, we added functionality to the window manager to handle these cases.&amp;#160; The concept is actually quite simple – the window manager watches for when a thread has pending input in its queue but hasn’t serviced it for more than 5 seconds. When the situation is detected (aka &lt;a href="http://msdn.microsoft.com/en-us/library/ms633526.aspx" target="_blank"&gt;IsHungAppWindow&lt;/a&gt;), the window manager does a presto chango maneuver whereby it hides the window whos thread isn’t pumping input messages and seamlessly shows a replacement window (known as a “ghost” window) with its client area filled with the real window’s last known good client area bits. &lt;/p&gt;  &lt;p&gt;While the original thread isn’t responding, the window manager manages both windows in parallel, to the extent that the application doesn’t know this is happening. For example, IsWindowVisible() will actually return true for the hidden/unresponsive window. The only visual difference (initially) to the user is that the text “(Not Responding)” is appended to the ghost window’s title. Using the ghost window, the user can effectively move, minimize, and even close the unresponsive application window. When (if) the thread starts pumping messages again, the original window is re-shown and the ghost window goes away. By the way, this window manager feature is called (obviously) window ghosting - and naturally, we offer an API you should almost never use: &lt;a href="http://msdn.microsoft.com/en-us/library/ms648415.aspx" target="_blank"&gt;DisableProcessWindowsGhosting&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;While we were working on Windows XP, we realized that it might be nice to know about these unresponsive applications.&amp;#160; We had already started to collect data about crashes, which were clearly annoying to customers, and some schools of thought (and some research) indicated that unresponsive UI was even more annoying -some might even use words like “infuriating” (I know I do).&amp;#160; So, we decided to wire up a ghost window’s close button to the infrastructure that sent crash reports back to Microsoft… and voila!, hang reporting was born.&lt;/p&gt;  &lt;p&gt;[Part 1] &lt;a href="http://blogs.msdn.com/wer/archive/2009/03/19/let-there-be-hangs-part-2-wer-history-101.aspx"&gt;Read part 2 &lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9490974" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/wer/archive/tags/Hang/">Hang</category></item><item><title>FAQ</title><link>http://blogs.msdn.com/b/wer/archive/2009/03/16/faq.aspx</link><pubDate>Mon, 16 Mar 2009 19:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9481931</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9481931</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/03/16/faq.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/pages/faq.aspx#startwer"&gt;How do I get started with Windows Error Reporting (WER)?&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/pages/faq.aspx#weronpc"&gt;How do I find Windows Error Reporting information on a PC?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/pages/faq.aspx#matching"&gt;How do we match up crash data (Windows Error Reporting signatures) with companies?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/pages/faq.aspx#whatfiles"&gt;What files should I map?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/archive/2009/03/19/let-there-be-hangs-part-1-not-responding.aspx"&gt;How do we detect applications hangs in Windows?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/pages/faq.aspx#bucket"&gt;What is a bucket?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/pages/faq.aspx#specialexception"&gt;What is a “special” exception?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/pages/faq.aspx#dumptypes"&gt;What are the different types of memory dumps?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wer/pages/faq.aspx#when"&gt;When will I see data?&lt;/a&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;a title="startwer" name="startwer"&gt;&lt;/a&gt;&lt;font size="5"&gt;&lt;b&gt;Q&lt;/b&gt;: &lt;strong&gt;How do I get started with Windows Error Reporting (WER)?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;A&lt;/b&gt;: As an Independent Software Vendor (ISV) who develops software applications for the Windows Operating Systems, you are able to register to receive Software Quality information from the Windows Quality website. &lt;/p&gt;  &lt;p&gt;Please follow this link to a page with directions on how to get started! (&lt;a href="http://www.microsoft.com/whdc/maintain/StartWER.mspx" mce_href="http://www.microsoft.com/whdc/maintain/StartWER.mspx"&gt;http://www.microsoft.com/whdc/maintain/StartWER.mspx&lt;/a&gt;). &lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;a title="weronpc" name="weronpc"&gt;&lt;/a&gt;&lt;font size="5"&gt;&lt;b&gt;Q&lt;/b&gt;:&lt;strong&gt; How Do I find Windows Error Reporting information on a PC?&lt;/strong&gt;&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;:&amp;#160; Here are the solutions for finding WER data on XP, Vista, and Windows 7. &lt;/p&gt;  &lt;table style="border-bottom: black 1px solid; border-left: black 1px solid; width: 400px; height: 246px; border-top: black 1px solid; border-right: black 1px solid" cellspacing="0" cellpadding="2" width="378"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="47"&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/td&gt;        &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="69"&gt;&lt;strong&gt;WER Information&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="47"&gt;Windows XP&lt;/td&gt;        &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="69"&gt;Event Log&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="47"&gt;Windows Server 2003&lt;/td&gt;        &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="69"&gt;Event Log&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="47"&gt;Windows Vista&lt;/td&gt;        &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="69"&gt;Event Log          &lt;br /&gt;”wercon”&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="47"&gt;Windows Server 2008&lt;/td&gt;        &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="69"&gt;Event Log          &lt;br /&gt;”wercon”&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="47"&gt;Windows 7&lt;/td&gt;        &lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-top: black 1px solid; border-right: black 1px solid" valign="top" width="69"&gt;Event Log          &lt;br /&gt;Action Center&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h4&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&amp;#160;&lt;/h4&gt;  &lt;h1&gt;Windows XP/ Server 2003&lt;/h1&gt;  &lt;p&gt;   &lt;br /&gt;On XP / Server 2003 you can find information about error reports in the &lt;strong&gt;Application Log&lt;/strong&gt;.     &lt;br /&gt;When a crash occurs the bucketing parameters are written to the Application Event log with the event source of “&lt;strong&gt;Application Error&lt;/strong&gt;” and event ID &lt;strong&gt;1000&lt;/strong&gt;.&amp;#160; &lt;br /&gt;When the crash is submitted the bucket ID is written to the Application Log with the same event source and has an event ID &lt;strong&gt;1001&lt;/strong&gt;.&lt;/p&gt;  &lt;h1&gt;Windows Vista / Server 2008&lt;/h1&gt;  &lt;p&gt;   &lt;br /&gt;On Vista you can use the “&lt;strong&gt;wercon&lt;/strong&gt;” control panel accessible via:     &lt;br /&gt;Start &amp;gt;Control Panel &amp;gt;System and Maintenance &amp;gt;Problem Reports and Solutions &amp;gt;View Problem History     &lt;br /&gt;Or     &lt;br /&gt;By typing “&lt;strong&gt;wercon&lt;/strong&gt;” in the Search Box at the base of the Start Menu.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/clip_image002_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/clip_image002_thumb.gif" width="480" height="360" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click on the “&lt;strong&gt;View problem history&lt;/strong&gt;” link&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/clip_image002%5B9%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[9]" border="0" alt="clip_image002[9]" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/clip_image002%5B9%5D_thumb.gif" width="484" height="363" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Double click on on a line item below the Application Name to view details:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/clip_image002%5B11%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[11]" border="0" alt="clip_image002[11]" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/clip_image002%5B11%5D_thumb.gif" width="481" height="361" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p mce_keep="true"&gt;Notice the&lt;strong&gt; bucketID&lt;/strong&gt; and the&lt;strong&gt; Copy to Clipboard feature.&lt;/strong&gt;&lt;/p&gt;  &lt;p mce_keep="true"&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;h1&gt;Windows 7&lt;/h1&gt;  &lt;p mce_keep="true"&gt;Using the Action Center:&amp;#160; &lt;/p&gt;  &lt;p&gt;Open the Action Center by clicking on the flag icon in the system tray&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/clip_image001%5B5%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image001[5]" border="0" alt="clip_image001[5]" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/clip_image001%5B5%5D_thumb.jpg" width="33" height="41" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p mce_keep="true"&gt;   &lt;br /&gt;Select the Action Icon from the system tray, and click Open Action Center.&lt;/p&gt;  &lt;p mce_keep="true"&gt;By expanding the Maintenance toggle button, the customer can see the &lt;b&gt;View System History&lt;/b&gt; link.&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/image_thumb_1.png" width="511" height="411" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p mce_keep="true"&gt;After selecting the &lt;b&gt;View System History&lt;/b&gt; link, the customer can click the &lt;b&gt;View problem reports and responses&lt;/b&gt; link.&lt;/p&gt;  &lt;p mce_keep="true"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="View Problem Response and Reports/Reliability Panel" border="0" alt="View Problem Response and Reports/Reliability Panel" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/image_thumb_3.png" width="514" height="413" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p mce_keep="true"&gt;Or, you can type &lt;i&gt;&lt;b&gt;error &lt;/b&gt;&lt;/i&gt;into the &lt;b&gt;Search&lt;/b&gt; bar on the &lt;strong&gt;Start Menu &lt;/strong&gt;and click the “View problem History”&lt;/p&gt;  &lt;p mce_keep="true"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="StartMenu &amp;quot;View Problem History&amp;quot;" border="0" alt="StartMenu &amp;quot;View Problem History&amp;quot;" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/FAQ_8412/image_thumb.png" width="369" height="86" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p mce_keep="true"&gt;Select &lt;b&gt;View Problem History&lt;/b&gt;, and then select &lt;b&gt;View problem reports and responses&lt;/b&gt;.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;a title="matching" name="matching"&gt;&lt;/a&gt;&lt;font size="5"&gt;&lt;b&gt;Q&lt;/b&gt;: &lt;strong&gt;How do we match up crash data?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;Here is the general mapping logic we used based on crash data that is gathered by Windows Error Reporting (WER) client.&amp;#160; Notice the difference between Pre Windows Vista, and Post Windows Vista.&lt;/p&gt;  &lt;p&gt;How do we match up crash signatures with Files that are mapped?&lt;/p&gt;  &lt;p&gt;We use 4-6 basic parameters to match mapped files in the developer portal, &lt;strong&gt;Windows XP &lt;/strong&gt;has fewer and matches on File Name and File Version for either Applications and Modules. With this in mind if you are still developing for &lt;strong&gt;Windows XP&lt;/strong&gt; it is a best practice to come up with a unique file name and file version. This best practice translates to any other development environment, but is important with &lt;strong&gt;Windows XP &lt;/strong&gt;as you can see the parameters below that the &lt;strong&gt;Windows XP &lt;/strong&gt;WER Client sends to our service.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows XP (Includes Windows Server 2003)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;WER client sends these parameters we use to match crashes: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Application Name &lt;/li&gt;    &lt;li&gt;Application Version &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;OR&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Module Name &lt;/li&gt;    &lt;li&gt;Module Version &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;With &lt;strong&gt;Windows XP/Windows Server 2003&lt;/strong&gt; crashes we have less data to use for matching crash signatures with files mapped on the portal.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows Vista++ (includes Windows Server 2008)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;WER client sends these parameters we use to match crashes: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Application Name &lt;/li&gt;    &lt;li&gt;Application Version &lt;/li&gt;    &lt;li&gt;Application File Link Date &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;OR&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Module Name &lt;/li&gt;    &lt;li&gt;Module Version &lt;/li&gt;    &lt;li&gt;Module File Link Date &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We use the link date to get a more accurate match on the files mapped on the portal.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;a title="matching" name="matching"&gt;&lt;/a&gt;&lt;font size="5"&gt;&lt;b&gt;Q&lt;/b&gt;: &lt;strong&gt;&lt;a title="whatfiles" name="whatfiles"&gt;&lt;/a&gt;What files should I map&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;Given the way we have implemented mapping logic the best policy is to map only the files where you own or maintain the source code.&amp;#160; If you ship 3rd party or open source modules with your software where you do not own or maintain source then you will not be able to take action on these error reports, and this information will just be added noise and complexity.&lt;/p&gt;  &lt;p&gt;Even if you don’t map 3rd party modules you will still see crash reports where any module crashed your application.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: We have mapping collision detection that will preclude you from mapping certain files.&lt;/p&gt;  &lt;p&gt;Example:&lt;/p&gt;  &lt;p&gt;Product Name: &lt;strong&gt;FabrikamReportingApplication&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Product Binary files:&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="540"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="140"&gt;&lt;strong&gt;File Name&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="66"&gt;&lt;strong&gt;File Version&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="308"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="24"&gt;&lt;strong&gt;Should I map?&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="140"&gt;FabrikamReportGUI.exe &lt;/td&gt;        &lt;td valign="top" width="66"&gt;1.0.0.0&lt;/td&gt;        &lt;td valign="top" width="308"&gt;User interface for my reporting product&lt;/td&gt;        &lt;td valign="top" width="24"&gt;Yes&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="140"&gt;FabrikamWebserviceDataImport.dll&lt;/td&gt;        &lt;td valign="top" width="66"&gt;1.0.0.1&lt;/td&gt;        &lt;td valign="top" width="308"&gt;Library used to import and transform data from web services.&lt;/td&gt;        &lt;td valign="top" width="24"&gt;Yes&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="140"&gt;ThirdPartyChartControl.dll&lt;/td&gt;        &lt;td valign="top" width="66"&gt;5.6.1.3&lt;/td&gt;        &lt;td valign="top" width="308"&gt;3rd party &lt;strong&gt;DLL &lt;/strong&gt;I’ve licensed to ship with my report product&lt;/td&gt;        &lt;td valign="top" width="24"&gt;No&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="140"&gt;OpenSourceDataVisualizer.exe&lt;/td&gt;        &lt;td valign="top" width="66"&gt;4.5.3.1&lt;/td&gt;        &lt;td valign="top" width="308"&gt;An open source application that helps with visualizing multiple data sources (I don’t maintain code for this)&lt;/td&gt;        &lt;td valign="top" width="24"&gt;No&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="140"&gt;OpenSourceGridControl.dll&lt;/td&gt;        &lt;td valign="top" width="66"&gt;2.3.1.4&lt;/td&gt;        &lt;td valign="top" width="308"&gt;An open source library where I’ve incorporated the source code into my build and maintain changes and updates for this source.&lt;/td&gt;        &lt;td valign="top" width="24"&gt;Yes&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;With the mapping scenario above you will still see crashes where &lt;strong&gt;ThirdPartyChartControl.dll&lt;/strong&gt; caused a crash in the &lt;strong&gt;FabrikamReportGUI.exe&lt;/strong&gt; application.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;a title="bucket" name="bucket"&gt;&lt;/a&gt;&lt;font size="5"&gt;&lt;b&gt;Q&lt;/b&gt;: &lt;strong&gt;&lt;a title="bucket" name="bucket"&gt;&lt;/a&gt;What is a bucket?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;A bucket uses a set of parameters gathered by the WER client to describe a WER Event.&amp;#160; For crash events the bucketing parameters are Application Name, Application Version, Application Build Date, Module Name, Module Version, Module Build Date, Exception Code, and Code Offset.&lt;/p&gt;  &lt;p&gt;There are also Generic Buckets that are made up of up to 10 parameters.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;a title="specialexception" name="specialexception"&gt;&lt;/a&gt;&lt;font size="5"&gt;&lt;b&gt;Q&lt;/b&gt;: &lt;strong&gt;&lt;a title="specialexception" name="specialexception"&gt;&lt;/a&gt;What is “special” exception?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;A special exception is a grouping of two WER event types: Buffer Overruns (BEX) where the exception code = C0000409, and Data Execution Prevention (DEP) where the exception code = C0000005.&amp;#160; These two event types are related to security of software and can also be viewed in the Security Alerts section of the website.&amp;#160; In order for the WER client to capture BEX events you need to use the /GS command when compiling your software.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;a title="dumptypes" name="dumptypes"&gt;&lt;/a&gt;&lt;font size="5"&gt;&lt;b&gt;Q&lt;/b&gt;: &lt;strong&gt;&lt;a title="dumptypes" name="dumptypes"&gt;&lt;/a&gt;What are the different types of memory dumps?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;Below is a table that contains brief descriptions of the different types of dump files that can appear in .CAB file.&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="520"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="66"&gt;Extension&lt;/td&gt;        &lt;td valign="top" width="452"&gt;Description&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;.mdmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;minidump (Default dump collection type, stacks, and loaded modules)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;.hdmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;.mdmp += heap data&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;.kdmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;on-demand kernel mode minidump (snapshot of the kernel mode portion of a given user mode process) only sent if WCT (Wait Chain Traversal) added it, or was explicitly requested for a given ibucket by a user.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;memory.dmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;Old style (&amp;lt;=XPSP2) heap dump.&amp;#160; This is not actually a debugging dump file, instead its just a blob of read only pages &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;atk.dmp &lt;/td&gt;        &lt;td valign="top" width="452"&gt;&lt;b&gt;a&lt;/b&gt;pplication &lt;b&gt;t&lt;/b&gt;ermination &lt;b&gt;k&lt;/b&gt;ernel (taken when an exited process takes more than 10 seconds to actually terminate)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;hu.dmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;&lt;b&gt;h&lt;/b&gt;eap &lt;b&gt;u&lt;/b&gt;ser&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;mu.dmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;&lt;b&gt;m&lt;/b&gt;ini &lt;b&gt;u&lt;/b&gt;ser&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;odk.dmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;&lt;b&gt;o&lt;/b&gt;n &lt;b&gt;d&lt;/b&gt;emand &lt;b&gt;k&lt;/b&gt;ernel&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;axhu.dmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;&lt;b&gt;a&lt;/b&gt;rbitrary &lt;b&gt;x&lt;/b&gt;-process &lt;b&gt;h&lt;/b&gt;eap &lt;b&gt;u&lt;/b&gt;ser&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;axmu.dmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;&lt;b&gt;a&lt;/b&gt;rbitrary &lt;b&gt;x&lt;/b&gt;-process &lt;b&gt;m&lt;/b&gt;ini &lt;b&gt;u&lt;/b&gt;ser&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;wxhu.dmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;&lt;b&gt;w&lt;/b&gt;ct &lt;b&gt;x&lt;/b&gt;-process &lt;b&gt;h&lt;/b&gt;eap &lt;b&gt;u&lt;/b&gt;ser (wct is wait chain traversal)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="66"&gt;wxmu.dmp&lt;/td&gt;        &lt;td valign="top" width="452"&gt;&lt;b&gt;w&lt;/b&gt;ct &lt;b&gt;x&lt;/b&gt;-process &lt;b&gt;m&lt;/b&gt;ini &lt;b&gt;u&lt;/b&gt;ser &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="dumptypes" name="dumptypes"&gt;&lt;/a&gt;&lt;font size="5"&gt;&lt;b&gt;Q&lt;/b&gt;: &lt;strong&gt;&lt;a title="dumptypes" name="dumptypes"&gt;&lt;/a&gt;&lt;a title="when" name="when"&gt;When will I see data?&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A:&amp;#160; &lt;/strong&gt;After mapping files we will start to pull any existing data we have for crashes. Generally you will see Hit data within a day or so. Users who setup Vista and Windows 7 with recommended settings (~80%) will automatically send us the hit data without any prompting, so you can see hits without cabs. &lt;/p&gt;  &lt;p&gt;By default we collect 10 cab (minidump) files per event*, since a user still has to click on the “send additional information” button for us to get the crash dump it can take some time to get cab files. &lt;/p&gt;  &lt;p&gt;Once we receive cab files for an event you will generally be able to see these cabs within a&lt;strong&gt; few hours&lt;/strong&gt; of us receiving them.&lt;/p&gt;  &lt;p&gt;NOTE:&amp;#160; For newly detected crashes it can take more than 4 days to get the crashes processed and up on the site.&amp;#160; Commonly if you create an app to test our system you will see a longer latency in getting WER data.&amp;#160; Since WER is collecting unhandled exceptions on Windows all the time, we recommend mapping existing released software.&lt;/p&gt;  &lt;p&gt;*We do not set collection rules for files that are un-versioned, and automatic collection rules depend on the time you map your files.&amp;#160; If you are mapping old files, all the buckets have been created and we will not automatically collect files for old buckets.&amp;#160; For newly created buckets we will set the collection rules for the most common file extensions.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9481931" width="1" height="1"&gt;</description></item><item><title>An overview of WER consent settings and corresponding UI behavior</title><link>http://blogs.msdn.com/b/wer/archive/2009/03/11/an-overview-of-wer-consent-settings-and-corresponding-ui-behavior.aspx</link><pubDate>Wed, 11 Mar 2009 21:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9470878</guid><dc:creator>varunb</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/wer/rsscomments.aspx?WeblogPostID=9470878</wfw:commentRss><comments>http://blogs.msdn.com/b/wer/archive/2009/03/11/an-overview-of-wer-consent-settings-and-corresponding-ui-behavior.aspx#comments</comments><description>&lt;p&gt;This post gives a high level overview of the various consent settings WER supports and the corresponding experience a user has when opted into any of those setting. Before going into further details, I want to clarify a couple of terms used here:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;WER Client – The binaries that ship with the Windows OS and report problems to Microsoft. &lt;/li&gt;    &lt;li&gt;WER Service – The backend service hosted by Microsoft to which the WER client reports problems. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Windows users have three different levels to choose from when opting into reporting errors to Microsoft. these levels are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Level 1 – If a user chooses this option, Windows does not report problems to Microsoft automatically. Instead, every time a fault (like a crash or hang) occurs on the user’s machine, a dialog is presented to the user, to get explicit consent to report the fault to Microsoft. &lt;/li&gt;    &lt;li&gt;Level 2 (Is the default recommended by Windows - more details about defaults later in the post) – For users choosing this option, Windows automatically reports the problem signature (aka WER event parameters) to the Microsoft WER Service. However, if the backend WER Service requests for additional information from the machine (like mini dumps, log files), a dialog is presented to the user to get explicit consent before uploading the additional information. &lt;/li&gt;    &lt;li&gt;Level 3 – For users choosing this option, Windows automatically reports the WER event parameters to the backend WER Service, and if the WER Service requests for additional information that does not contain any personally identifiable information (PII), then that information is uploaded to the service automatically. An example of such information is a mini dump, which has an extremely low probability of containing PII. However, if the information requested by the WER Service has the potential to contain PII (for example, a heap dump), a dialog is presented to the user to get explicit consent before uploading the additional information. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Note that the three consent levels only come into play &lt;b&gt;if WER is enabled&lt;/b&gt; for the user/machine. If WER is disabled, then the user is never even prompted to report problems.&lt;/p&gt;  &lt;p&gt;Following is a summary of the typical Windows 7 user experience for each of the consent levels (&lt;b&gt;Note:&lt;/b&gt; Windows 7 is still in Beta and the UI is still susceptible to changes):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;User experience when WER is disabled:&lt;/b&gt; Error reporting does not kick in. A simple dialog informing the user about the crash is shown. &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image_thumb.png" width="244" height="115" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image_thumb.png" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;User experience when WER consent level is set to 1:&lt;/b&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Step 1: On detecting a crash, WER client presents UI to get explicit user consent to report WER event parameters to Microsoft’s WER backend service&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image9.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image9.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image9_thumb.png" width="240" height="119" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image9_thumb.png" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Step 2: On getting consent in step 1, WER client starts reporting parameters to Microsoft&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image12.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image12_thumb.png" width="240" height="111" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image12_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Step 3: If the WER Service requests additional data (like heap dumps, log files etc.), WER client starts collecting the information.&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image15.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image15.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image15_thumb.png" width="240" height="122" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image15_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Step 4: After completing data collection, WER client asks user for explicit consent to upload data to Microsoft. If user agrees, WER client uploads the data. If user clicks ‘Cancel’, the data is discarded and not sent to Microsoft.&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image18.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image18.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image18_thumb.png" width="240" height="180" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image18_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;User experience when consent level is set to 2:&lt;/b&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Step 1: On detecting a crash, WER client automatically starts reporting WER event parameters to Microsoft’s WER Service.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image21.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image21.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image21_thumb.png" width="240" height="111" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image21_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Step 2: If the WER Service requests additional data (like mini dump, heap dumps, log files etc.), WER client starts collecting the information.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image24.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image24.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image24_thumb.png" width="240" height="122" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image24_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Step 3: After completing data collection, WER client asks user for explicit consent to upload data to Microsoft. If user agrees, WER client uploads the data.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image27.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image27.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image27_thumb.png" width="240" height="180" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image27_thumb.png" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;User experience when consent level is set to 3:&lt;/b&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Step 1: On detecting a crash, WER client automatically starts reporting WER event parameters to Microsoft’s WER backend service.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image30.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image30.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image30_thumb.png" width="240" height="111" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image30_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Step 2: If the WER Service requests additional data (like mini dump, heap dumps, log files etc.), WER client starts collecting the information&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image33.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image33.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image33_thumb.png" width="240" height="122" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image33_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Step 3: If the data collected is considered safe (i.e. not containing PII; like a minidump) WER client uploads that data automatically without asking for explicit user consent. If however, the data isn't considered safe (like heap dumps, log files etc.), WER client asks user for explicit consent to upload data to the WER Service. If user clicks ‘Send Information’, WER uploads the data.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image36.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image36.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image36_thumb.png" width="240" height="180" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image36_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; It is noteworthy that WER client never uploads data containing personally identifiable information (like heap dumps) automatically. Explicit user consent it always needed to upload such information. This design decision has been made to respect the privacy of Windows users.&amp;#160; &lt;/p&gt;  &lt;h4&gt;So how does a user configure/change WER settings?&lt;/h4&gt;  &lt;p&gt;The first place where a user chooses to opt into WER is the Windows Out of the Box Experience (aka Windows OOBE). The first time a new Windows 7 machine boots up, an OOBE screen is presented to the user which opts the machine into one of two WER consent levels depending on the user’s selection.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image1.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image1.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image1_thumb.png" width="488" height="233" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image1_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If the user does not choose “recommended settings” in OOBE, another “up-sell” dialog is presented to the user in the Windows Troubleshooting Control Panel&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image7.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image7.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image7_thumb.png" width="502" height="140" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image7_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In the above dialog, if the user clicks ‘Yes’, his consent is bumped up to level 2. Note however, if the user has already set his consent level to higher than 2, it is not brought down.&lt;/p&gt;  &lt;p&gt;The OOBE and the up-sell dialog are presented to the user only once in the entire lifetime of his Windows 7 installation. If the user wants to change WER settings there after, he can do so by accessing the settings page via the Action Center Control Panel&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image4.png" mce_href="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image4_thumb.png" width="493" height="175" mce_src="http://blogs.msdn.com/blogfiles/wer/WindowsLiveWriter/AnoverviewofWERconsentsettingsandcorresp_B43D/image4_thumb.png" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This page allows setting the consent only for the specific user interacting with this page. However, if an administrator wants to configure settings for all users on a machine, he can do so by clicking on “Change report settings for all users” and making the same choice in that dialog.&lt;/p&gt;  &lt;p&gt;Hope this information helps you understand the various WER settings, the corresponding Windows UI behavior for each of the settings, and the exactly how to configure/edit these settings.&lt;/p&gt;  &lt;p&gt;Happy Error Reporting!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9470878" width="1" height="1"&gt;</description></item></channel></rss>
