<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_gxh973121</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/7575/rss</id><updated>2012-04-25T02:50:47Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/7575/rss"/><entry><id>http://www.cnblogs.com/gxh973121/archive/2012/03/14/2395397.html</id><title type="text">[调试技巧] 如何利用WinDbg找出程序崩溃的位置</title><summary type="text">http://blog.csdn.net/wangningyu/article/details/6748138之前碰到论坛里有几个好友，说程序不时的崩溃，什么xxoo不能read的！ 如果光要是这个内存地址，估计你会疯掉~~ 所以分享一下基本的调试技巧，需要准备的工具有WinDbg + VC6.0，下面是自己整理的一份自动生成DUMP文件的源代码，只需要添加到工程即可，源代码如下：MiniDump.h[cpp] view plaincopyprint?#include&lt;windows.h&gt; #include&lt;tlhelp32.h&gt; //#include"dbg</summary><published>2012-03-14T01:41:00Z</published><updated>2012-03-14T01:41:00Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxh973121/archive/2012/03/14/2395397.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/archive/2012/03/14/2395397.html"/><content type="html">&lt;p&gt;&lt;a href="http://blog.csdn.net/wangningyu/article/details/6748138"&gt;http://blog.csdn.net/wangningyu/article/details/6748138&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;之前碰到论坛里有几个好友，说程序不时的崩溃，什么xxoo不能read的！ 如果光要是这个内存地址，估计你会疯掉~~ &lt;/p&gt;&lt;p&gt;所以分享一下基本的调试技巧，需要准备的工具有WinDbg + VC6.0，&lt;/p&gt;&lt;p&gt;下面是自己整理的一份自动生成DUMP文件的源代码，只需要添加到工程即可，源代码如下：&lt;/p&gt;&lt;p&gt;MiniDump.h&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="dp-highlighter bg_cpp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;strong&gt;[cpp]&lt;/strong&gt; &lt;a class="ViewSource" title="view plain" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;view plain&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;copy&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="PrintSource" title="print" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;print&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="About" title="?" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;?&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-cpp"&gt;&lt;li class="alt"&gt;&lt;span class="preprocessor"&gt;#include&amp;nbsp;&amp;lt;windows.h&amp;gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#include&amp;nbsp;&amp;lt;tlhelp32.h&amp;gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//#include&amp;nbsp;"dbghelp.h" &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//#define&amp;nbsp;DEBUG_DPRINTF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;//allow&amp;nbsp;d() &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//#include&amp;nbsp;"wfun.h" &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#pragma&amp;nbsp;optimize("y",&amp;nbsp;off)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//generate&amp;nbsp;stack&amp;nbsp;frame&amp;nbsp;pointers&amp;nbsp;for&amp;nbsp;all&amp;nbsp;functions&amp;nbsp;-&amp;nbsp;same&amp;nbsp;as&amp;nbsp;/Oy-&amp;nbsp;in&amp;nbsp;the&amp;nbsp;project &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#pragma&amp;nbsp;warning(disable:&amp;nbsp;4200)&amp;nbsp;&amp;nbsp;//nonstandard&amp;nbsp;extension&amp;nbsp;used&amp;nbsp;:&amp;nbsp;zero-sized&amp;nbsp;array&amp;nbsp;in&amp;nbsp;struct/union &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#pragma&amp;nbsp;warning(disable:&amp;nbsp;4100)&amp;nbsp;&amp;nbsp;//unreferenced&amp;nbsp;formal&amp;nbsp;parameter &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;/*BOOL&amp;nbsp;WINAPI&amp;nbsp;Get_Module_By_Ret_Addr(PBYTE&amp;nbsp;Ret_Addr,&amp;nbsp;PCHAR&amp;nbsp;Module_Name,&amp;nbsp;PBYTE&amp;nbsp;&amp;amp;&amp;nbsp;Module_Addr);&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;int&amp;nbsp;&amp;nbsp;WINAPI&amp;nbsp;Get_Call_Stack(PEXCEPTION_POINTERS&amp;nbsp;pException,&amp;nbsp;PCHAR&amp;nbsp;Str);&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;int&amp;nbsp;&amp;nbsp;WINAPI&amp;nbsp;Get_Version_Str(PCHAR&amp;nbsp;Str);&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;PCHAR&amp;nbsp;WINAPI&amp;nbsp;Get_Exception_Info(PEXCEPTION_POINTERS&amp;nbsp;pException);&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;void&amp;nbsp;WINAPI&amp;nbsp;Create_Dump(PEXCEPTION_POINTERS&amp;nbsp;pException,&amp;nbsp;BOOL&amp;nbsp;File_Flag,&amp;nbsp;BOOL&amp;nbsp;Show_Flag);*/&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;In&amp;nbsp;case&amp;nbsp;you&amp;nbsp;don't&amp;nbsp;have&amp;nbsp;dbghelp.h. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#ifndef&amp;nbsp;_DBGHELP_ &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;typedef&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;struct&lt;/span&gt;&lt;span&gt;&amp;nbsp;_MINIDUMP_EXCEPTION_INFORMATION&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;DWORD&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ThreadId;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PEXCEPTION_POINTERS&amp;nbsp;ExceptionPointers;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;BOOL&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ClientPointers;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;}&amp;nbsp;MINIDUMP_EXCEPTION_INFORMATION,&amp;nbsp;*PMINIDUMP_EXCEPTION_INFORMATION;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;typedef&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;enum&lt;/span&gt;&lt;span&gt;&amp;nbsp;_MINIDUMP_TYPE&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MiniDumpNormal&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;0x00000000,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MiniDumpWithDataSegs&amp;nbsp;=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00000001,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;MINIDUMP_TYPE;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;typedef&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;BOOL&lt;/span&gt;&lt;span&gt;&amp;nbsp;(WINAPI&amp;nbsp;*&amp;nbsp;MINIDUMP_WRITE_DUMP)(&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;HANDLE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hProcess,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;DWORD&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProcessId,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;HANDLE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hFile,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;MINIDUMP_TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DumpType,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;CONST&amp;nbsp;PMINIDUMP_EXCEPTION_INFORMATION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExceptionParam,&amp;nbsp;OPTIONAL&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PVOID&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserStreamParam,&amp;nbsp;OPTIONAL&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PVOID&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;CallbackParam&amp;nbsp;OPTIONAL&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#else &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;typedef&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;BOOL&lt;/span&gt;&lt;span&gt;&amp;nbsp;(WINAPI&amp;nbsp;*&amp;nbsp;MINIDUMP_WRITE_DUMP)(&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;HANDLE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hProcess,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;DWORD&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProcessId,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;HANDLE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hFile,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;MINIDUMP_TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DumpType,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;CONST&amp;nbsp;PMINIDUMP_EXCEPTION_INFORMATION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExceptionParam,&amp;nbsp;OPTIONAL&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;PMINIDUMP_USER_STREAM_INFORMATION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserStreamParam,&amp;nbsp;OPTIONAL&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;PMINIDUMP_CALLBACK_INFORMATION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CallbackParam&amp;nbsp;OPTIONAL&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#endif&amp;nbsp;//#ifndef&amp;nbsp;_DBGHELP_ &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Tool&amp;nbsp;Help&amp;nbsp;functions. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;typedef&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;HANDLE&lt;/span&gt;&lt;span&gt;&amp;nbsp;(WINAPI&amp;nbsp;*&amp;nbsp;CREATE_TOOL_HELP32_SNAPSHOT)(&lt;/span&gt;&lt;span class="datatypes"&gt;DWORD&lt;/span&gt;&lt;span&gt;&amp;nbsp;dwFlags,&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;DWORD&lt;/span&gt;&lt;span&gt;&amp;nbsp;th32ProcessID);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;typedef&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;BOOL&lt;/span&gt;&lt;span&gt;&amp;nbsp;(WINAPI&amp;nbsp;*&amp;nbsp;MODULE32_FIRST)(&lt;/span&gt;&lt;span class="datatypes"&gt;HANDLE&lt;/span&gt;&lt;span&gt;&amp;nbsp;hSnapshot,&amp;nbsp;LPMODULEENTRY32&amp;nbsp;lpme);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;typedef&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;BOOL&lt;/span&gt;&lt;span&gt;&amp;nbsp;(WINAPI&amp;nbsp;*&amp;nbsp;MODULE32_NEST)(&lt;/span&gt;&lt;span class="datatypes"&gt;HANDLE&lt;/span&gt;&lt;span&gt;&amp;nbsp;hSnapshot,&amp;nbsp;LPMODULEENTRY32&amp;nbsp;lpme);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;extern&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;WINAPI&amp;nbsp;Create_Dump(PEXCEPTION_POINTERS&amp;nbsp;pException,&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;BOOL&lt;/span&gt;&lt;span&gt;&amp;nbsp;File_Flag,&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;BOOL&lt;/span&gt;&lt;span&gt;&amp;nbsp;Show_Flag);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;extern&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;HMODULE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;hDbgHelp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;extern&lt;/span&gt;&lt;span&gt;&amp;nbsp;MINIDUMP_WRITE_DUMP&amp;nbsp;&amp;nbsp;MiniDumpWriteDump_;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;extern&lt;/span&gt;&lt;span&gt;&amp;nbsp;CREATE_TOOL_HELP32_SNAPSHOT&amp;nbsp;&amp;nbsp;CreateToolhelp32Snapshot_;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;extern&lt;/span&gt;&lt;span&gt;&amp;nbsp;MODULE32_FIRST&amp;nbsp;&amp;nbsp;&amp;nbsp;Module32First_;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;extern&lt;/span&gt;&lt;span&gt;&amp;nbsp;MODULE32_NEST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module32Next_;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;textarea style="display: none" class="cpp" readOnly name="code"&gt;#include &amp;lt;windows.h&amp;gt;#include &amp;lt;tlhelp32.h&amp;gt;//#include "dbghelp.h"//#define DEBUG_DPRINTF1//allow d()//#include "wfun.h"#pragma optimize("y", off)//generate stack frame pointers for all functions - same as /Oy- in the project#pragma warning(disable: 4200)//nonstandard extension used : zero-sized array in struct/union#pragma warning(disable: 4100)//unreferenced formal parameter/*BOOL WINAPI Get_Module_By_Ret_Addr(PBYTE Ret_Addr, PCHAR Module_Name, PBYTE &amp;amp; Module_Addr);int WINAPI Get_Call_Stack(PEXCEPTION_POINTERS pException, PCHAR Str);int  WINAPI Get_Version_Str(PCHAR Str);PCHAR WINAPI Get_Exception_Info(PEXCEPTION_POINTERS pException);void WINAPI Create_Dump(PEXCEPTION_POINTERS pException, BOOL File_Flag, BOOL Show_Flag);*/// In case you don't have dbghelp.h.#ifndef _DBGHELP_typedef struct _MINIDUMP_EXCEPTION_INFORMATION {DWORDThreadId;PEXCEPTION_POINTERSExceptionPointers;BOOLClientPointers;} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;typedef enum _MINIDUMP_TYPE {MiniDumpNormal =0x00000000,MiniDumpWithDataSegs =0x00000001,} MINIDUMP_TYPE;typedefBOOL (WINAPI * MINIDUMP_WRITE_DUMP)(IN HANDLEhProcess,IN DWORDProcessId,IN HANDLEhFile,IN MINIDUMP_TYPEDumpType,IN CONST PMINIDUMP_EXCEPTION_INFORMATIONExceptionParam, OPTIONALIN PVOIDUserStreamParam, OPTIONALIN PVOIDCallbackParam OPTIONAL);#elsetypedefBOOL (WINAPI * MINIDUMP_WRITE_DUMP)(IN HANDLEhProcess,IN DWORDProcessId,IN HANDLEhFile,IN MINIDUMP_TYPEDumpType,IN CONST PMINIDUMP_EXCEPTION_INFORMATIONExceptionParam, OPTIONALIN PMINIDUMP_USER_STREAM_INFORMATIONUserStreamParam, OPTIONALIN PMINIDUMP_CALLBACK_INFORMATIONCallbackParam OPTIONAL);#endif //#ifndef _DBGHELP_// Tool Help functions.typedefHANDLE (WINAPI * CREATE_TOOL_HELP32_SNAPSHOT)(DWORD dwFlags, DWORD th32ProcessID);typedefBOOL (WINAPI * MODULE32_FIRST)(HANDLE hSnapshot, LPMODULEENTRY32 lpme);typedefBOOL (WINAPI * MODULE32_NEST)(HANDLE hSnapshot, LPMODULEENTRY32 lpme);extern void WINAPI Create_Dump(PEXCEPTION_POINTERS pException, BOOL File_Flag, BOOL Show_Flag);extern HMODULEhDbgHelp;extern MINIDUMP_WRITE_DUMPMiniDumpWriteDump_;extern CREATE_TOOL_HELP32_SNAPSHOTCreateToolhelp32Snapshot_;extern MODULE32_FIRSTModule32First_;extern MODULE32_NESTModule32Next_;&lt;/textarea&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;MiniDump.cpp&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="dp-highlighter bg_cpp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;strong&gt;[cpp]&lt;/strong&gt; &lt;a class="ViewSource" title="view plain" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;view plain&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;copy&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="PrintSource" title="print" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;print&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="About" title="?" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;?&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-cpp"&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;/*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Author:&amp;nbsp;Vladimir&amp;nbsp;Sedach.&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Purpose:&amp;nbsp;demo&amp;nbsp;of&amp;nbsp;Call&amp;nbsp;Stack&amp;nbsp;creation&amp;nbsp;by&amp;nbsp;our&amp;nbsp;own&amp;nbsp;means,&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;and&amp;nbsp;with&amp;nbsp;MiniDumpWriteDump()&amp;nbsp;function&amp;nbsp;of&amp;nbsp;DbgHelp.dll.&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;*/&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#include&amp;nbsp;"StdAfx.h" &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#include&amp;nbsp;"MiniDump.h" &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#include&amp;nbsp;&amp;lt;Shlwapi.h&amp;gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#pragma&amp;nbsp;comment(lib,"shlwapi.lib") &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="datatypes"&gt;HMODULE&lt;/span&gt;&lt;span&gt;&amp;nbsp;hDbgHelp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;MINIDUMP_WRITE_DUMP&amp;nbsp;MiniDumpWriteDump_;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;CREATE_TOOL_HELP32_SNAPSHOT&amp;nbsp;CreateToolhelp32Snapshot_;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;MODULE32_FIRST&amp;nbsp;&amp;nbsp;Module32First_;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;MODULE32_NEST&amp;nbsp;&amp;nbsp;&amp;nbsp;Module32Next_;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#define&amp;nbsp;DUMP_SIZE_MAX&amp;nbsp;&amp;nbsp;&amp;nbsp;8000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//max&amp;nbsp;size&amp;nbsp;of&amp;nbsp;our&amp;nbsp;dump &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#define&amp;nbsp;CALL_TRACE_MAX&amp;nbsp;&amp;nbsp;((DUMP_SIZE_MAX&amp;nbsp;-&amp;nbsp;2000)&amp;nbsp;/&amp;nbsp;(MAX_PATH&amp;nbsp;+&amp;nbsp;40))&amp;nbsp;&amp;nbsp;//max&amp;nbsp;number&amp;nbsp;of&amp;nbsp;traced&amp;nbsp;calls &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="preprocessor"&gt;#define&amp;nbsp;NL&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;"\r\n"&amp;nbsp;&amp;nbsp;//new&amp;nbsp;line &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;extern&lt;/span&gt;&lt;span&gt;&amp;nbsp;CString&amp;nbsp;GetExePath();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//**************************************************************************************** &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="datatypes"&gt;BOOL&lt;/span&gt;&lt;span&gt;&amp;nbsp;WINAPI&amp;nbsp;Get_Module_By_Ret_Addr(&lt;/span&gt;&lt;span class="datatypes"&gt;PBYTE&lt;/span&gt;&lt;span&gt;&amp;nbsp;Ret_Addr,&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PCHAR&lt;/span&gt;&lt;span&gt;&amp;nbsp;Module_Name,&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PBYTE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;amp;&amp;nbsp;Module_Addr)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//**************************************************************************************** &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Find&amp;nbsp;module&amp;nbsp;by&amp;nbsp;Ret_Addr&amp;nbsp;(address&amp;nbsp;in&amp;nbsp;the&amp;nbsp;module). &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Return&amp;nbsp;Module_Name&amp;nbsp;(full&amp;nbsp;path)&amp;nbsp;and&amp;nbsp;Module_Addr&amp;nbsp;(start&amp;nbsp;address). &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Return&amp;nbsp;TRUE&amp;nbsp;if&amp;nbsp;found. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MODULEENTRY32&amp;nbsp;&amp;nbsp;&amp;nbsp;M&amp;nbsp;=&amp;nbsp;{&lt;/span&gt;&lt;span class="keyword"&gt;sizeof&lt;/span&gt;&lt;span&gt;(M)};&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;HANDLE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;hSnapshot;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module_Name[0]&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(CreateToolhelp32Snapshot_)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hSnapshot&amp;nbsp;=&amp;nbsp;CreateToolhelp32Snapshot_(TH32CS_SNAPMODULE,&amp;nbsp;0);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;((hSnapshot&amp;nbsp;!=&amp;nbsp;INVALID_HANDLE_VALUE)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module32First_(hSnapshot,&amp;nbsp;&amp;amp;M))&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;do&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span class="datatypes"&gt;DWORD&lt;/span&gt;&lt;span&gt;(Ret_Addr&amp;nbsp;-&amp;nbsp;M.modBaseAddr)&amp;nbsp;&amp;lt;&amp;nbsp;M.modBaseSize)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lstrcpyn(Module_Name,&amp;nbsp;M.szExePath,&amp;nbsp;MAX_PATH);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module_Addr&amp;nbsp;=&amp;nbsp;M.modBaseAddr;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;break&lt;/span&gt;&lt;span&gt;;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;while&lt;/span&gt;&lt;span&gt;&amp;nbsp;(Module32Next_(hSnapshot,&amp;nbsp;&amp;amp;M));&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CloseHandle(hSnapshot);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;!!Module_Name[0];&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//Get_Module_By_Ret_Addr &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//****************************************************************** &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="datatypes"&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;WINAPI&amp;nbsp;Get_Call_Stack(PEXCEPTION_POINTERS&amp;nbsp;pException,&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PCHAR&lt;/span&gt;&lt;span&gt;&amp;nbsp;Str)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//****************************************************************** &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Fill&amp;nbsp;Str&amp;nbsp;with&amp;nbsp;call&amp;nbsp;stack&amp;nbsp;info. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;pException&amp;nbsp;can&amp;nbsp;be&amp;nbsp;either&amp;nbsp;GetExceptionInformation()&amp;nbsp;or&amp;nbsp;NULL. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;If&amp;nbsp;pException&amp;nbsp;=&amp;nbsp;NULL&amp;nbsp;-&amp;nbsp;get&amp;nbsp;current&amp;nbsp;call&amp;nbsp;stack. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;CHAR&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module_Name[MAX_PATH];&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PBYTE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module_Addr&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PBYTE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module_Addr_1;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;typedef&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;struct&lt;/span&gt;&lt;span&gt;&amp;nbsp;STACK&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;STACK&amp;nbsp;*&amp;nbsp;Ebp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PBYTE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ret_Addr;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;DWORD&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Param[0];&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;STACK,&amp;nbsp;*&amp;nbsp;PSTACK;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;STACK&amp;nbsp;&amp;nbsp;&amp;nbsp;Stack&amp;nbsp;=&amp;nbsp;{0,&amp;nbsp;0};&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PSTACK&amp;nbsp;&amp;nbsp;Ebp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(pException)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//fake&amp;nbsp;frame&amp;nbsp;for&amp;nbsp;exception&amp;nbsp;address &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stack.Ebp&amp;nbsp;=&amp;nbsp;(PSTACK)pException-&amp;gt;ContextRecord-&amp;gt;Ebp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stack.Ret_Addr&amp;nbsp;=&amp;nbsp;(&lt;/span&gt;&lt;span class="datatypes"&gt;PBYTE&lt;/span&gt;&lt;span&gt;)pException-&amp;gt;ExceptionRecord-&amp;gt;ExceptionAddress;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ebp&amp;nbsp;=&amp;nbsp;&amp;amp;Stack;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;else&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ebp&amp;nbsp;=&amp;nbsp;(PSTACK)&amp;amp;pException&amp;nbsp;-&amp;nbsp;1;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//frame&amp;nbsp;addr&amp;nbsp;of&amp;nbsp;Get_Call_Stack() &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Skip&amp;nbsp;frame&amp;nbsp;of&amp;nbsp;Get_Call_Stack(). &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(!IsBadReadPtr(Ebp,&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;sizeof&lt;/span&gt;&lt;span&gt;(PSTACK)))&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ebp&amp;nbsp;=&amp;nbsp;Ebp-&amp;gt;Ebp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//caller&amp;nbsp;ebp &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str[0]&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Trace&amp;nbsp;CALL_TRACE_MAX&amp;nbsp;calls&amp;nbsp;maximum&amp;nbsp;-&amp;nbsp;not&amp;nbsp;to&amp;nbsp;exceed&amp;nbsp;DUMP_SIZE_MAX. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Break&amp;nbsp;trace&amp;nbsp;on&amp;nbsp;wrong&amp;nbsp;stack&amp;nbsp;frame. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span class="datatypes"&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;Ret_Addr_I&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(Ret_Addr_I&amp;nbsp;&amp;lt;&amp;nbsp;CALL_TRACE_MAX)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;!IsBadReadPtr(Ebp,&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;sizeof&lt;/span&gt;&lt;span&gt;(PSTACK))&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;!IsBadCodePtr(FARPROC(Ebp-&amp;gt;Ret_Addr));&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ret_Addr_I++,&amp;nbsp;Ebp&amp;nbsp;=&amp;nbsp;Ebp-&amp;gt;Ebp)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;If&amp;nbsp;module&amp;nbsp;with&amp;nbsp;Ebp-&amp;gt;Ret_Addr&amp;nbsp;found. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(Get_Module_By_Ret_Addr(Ebp-&amp;gt;Ret_Addr,&amp;nbsp;Module_Name,&amp;nbsp;Module_Addr_1))&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(Module_Addr_1&amp;nbsp;!=&amp;nbsp;Module_Addr)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//new&amp;nbsp;module &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Save&amp;nbsp;module's&amp;nbsp;address&amp;nbsp;and&amp;nbsp;full&amp;nbsp;path. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module_Addr&amp;nbsp;=&amp;nbsp;Module_Addr_1;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"%08X&amp;nbsp;&amp;nbsp;%s"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;Module_Addr,&amp;nbsp;Module_Name);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Save&amp;nbsp;call&amp;nbsp;offset. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"&amp;nbsp;&amp;nbsp;+%08X"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;Ebp-&amp;gt;Ret_Addr&amp;nbsp;-&amp;nbsp;Module_Addr);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Save&amp;nbsp;5&amp;nbsp;params&amp;nbsp;of&amp;nbsp;the&amp;nbsp;call.&amp;nbsp;We&amp;nbsp;don't&amp;nbsp;know&amp;nbsp;the&amp;nbsp;real&amp;nbsp;number&amp;nbsp;of&amp;nbsp;params. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(pException&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;!Ret_Addr_I)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//fake&amp;nbsp;frame&amp;nbsp;for&amp;nbsp;exception&amp;nbsp;address &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"&amp;nbsp;&amp;nbsp;Exception&amp;nbsp;Offset"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;else&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(!IsBadReadPtr(Ebp,&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;sizeof&lt;/span&gt;&lt;span&gt;(PSTACK)&amp;nbsp;+&amp;nbsp;5&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;sizeof&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="datatypes"&gt;DWORD&lt;/span&gt;&lt;span&gt;)))&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"&amp;nbsp;&amp;nbsp;(%X,&amp;nbsp;%X,&amp;nbsp;%X,&amp;nbsp;%X,&amp;nbsp;%X)"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ebp-&amp;gt;Param[0],&amp;nbsp;Ebp-&amp;gt;Param[1],&amp;nbsp;Ebp-&amp;gt;Param[2],&amp;nbsp;Ebp-&amp;gt;Param[3],&amp;nbsp;Ebp-&amp;gt;Param[4]);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;else&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"%08X"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;Ebp-&amp;gt;Ret_Addr);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;Str_Len;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//Get_Call_Stack &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//*********************************** &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="datatypes"&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;WINAPI&amp;nbsp;Get_Version_Str(&lt;/span&gt;&lt;span class="datatypes"&gt;PCHAR&lt;/span&gt;&lt;span&gt;&amp;nbsp;Str)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//*********************************** &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Fill&amp;nbsp;Str&amp;nbsp;with&amp;nbsp;Windows&amp;nbsp;version. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OSVERSIONINFOEX&amp;nbsp;V&amp;nbsp;=&amp;nbsp;{&lt;/span&gt;&lt;span class="keyword"&gt;sizeof&lt;/span&gt;&lt;span&gt;(OSVERSIONINFOEX)};&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//EX&amp;nbsp;for&amp;nbsp;NT&amp;nbsp;5.0&amp;nbsp;and&amp;nbsp;later &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(!GetVersionEx((POSVERSIONINFO)&amp;amp;V))&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ZeroMemory(&amp;amp;V,&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;sizeof&lt;/span&gt;&lt;span&gt;(V));&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;V.dwOSVersionInfoSize&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;sizeof&lt;/span&gt;&lt;span&gt;(OSVERSIONINFO);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GetVersionEx((POSVERSIONINFO)&amp;amp;V);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(V.dwPlatformId&amp;nbsp;!=&amp;nbsp;VER_PLATFORM_WIN32_NT)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;V.dwBuildNumber&amp;nbsp;=&amp;nbsp;LOWORD(V.dwBuildNumber);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//for&amp;nbsp;9x&amp;nbsp;HIWORD(dwBuildNumber)&amp;nbsp;=&amp;nbsp;0x04xx &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;wsprintf(Str,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Windows:&amp;nbsp;&amp;nbsp;%d.%d.%d,&amp;nbsp;SP&amp;nbsp;%d.%d,&amp;nbsp;Product&amp;nbsp;Type&amp;nbsp;%d"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//SP&amp;nbsp;-&amp;nbsp;service&amp;nbsp;pack,&amp;nbsp;Product&amp;nbsp;Type&amp;nbsp;-&amp;nbsp;VER_NT_WORKSTATION,... &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;V.dwMajorVersion,&amp;nbsp;V.dwMinorVersion,&amp;nbsp;V.dwBuildNumber,&amp;nbsp;V.wServicePackMajor,&amp;nbsp;V.wServicePackMinor/*,&amp;nbsp;V.wProductType*/);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//Get_Version_Str &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//************************************************************* &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="datatypes"&gt;PCHAR&lt;/span&gt;&lt;span&gt;&amp;nbsp;WINAPI&amp;nbsp;Get_Exception_Info(PEXCEPTION_POINTERS&amp;nbsp;pException)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//************************************************************* &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Allocate&amp;nbsp;Str[DUMP_SIZE_MAX]&amp;nbsp;and&amp;nbsp;return&amp;nbsp;Str&amp;nbsp;with&amp;nbsp;dump,&amp;nbsp;if&amp;nbsp;!pException&amp;nbsp;-&amp;nbsp;just&amp;nbsp;return&amp;nbsp;call&amp;nbsp;stack&amp;nbsp;in&amp;nbsp;Str. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PCHAR&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;CHAR&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module_Name[MAX_PATH];&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PBYTE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module_Addr;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;HANDLE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hFile;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILETIME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Last_Write_Time;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILETIME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Local_File_Time;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SYSTEMTIME&amp;nbsp;&amp;nbsp;T;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;CHAR&lt;/span&gt;&lt;span&gt;[DUMP_SIZE_MAX];&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(!Str)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;NULL;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;Get_Version_Str(Str&amp;nbsp;+&amp;nbsp;Str_Len);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Process:&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GetModuleFileName(NULL,&amp;nbsp;Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;MAX_PATH);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;=&amp;nbsp;lstrlen(Str);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;If&amp;nbsp;exception&amp;nbsp;occurred. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(pException)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EXCEPTION_RECORD&amp;nbsp;&amp;amp;&amp;nbsp;&amp;nbsp;E&amp;nbsp;=&amp;nbsp;*pException-&amp;gt;ExceptionRecord;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CONTEXT&amp;nbsp;&amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C&amp;nbsp;=&amp;nbsp;*pException-&amp;gt;ContextRecord;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;If&amp;nbsp;module&amp;nbsp;with&amp;nbsp;E.ExceptionAddress&amp;nbsp;found&amp;nbsp;-&amp;nbsp;save&amp;nbsp;its&amp;nbsp;path&amp;nbsp;and&amp;nbsp;date. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(Get_Module_By_Ret_Addr((&lt;/span&gt;&lt;span class="datatypes"&gt;PBYTE&lt;/span&gt;&lt;span&gt;)E.ExceptionAddress,&amp;nbsp;Module_Name,&amp;nbsp;Module_Addr))&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Module:&amp;nbsp;&amp;nbsp;%s"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;Module_Name);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;((hFile&amp;nbsp;=&amp;nbsp;CreateFile(Module_Name,&amp;nbsp;GENERIC_READ,&amp;nbsp;FILE_SHARE_READ,&amp;nbsp;NULL,&amp;nbsp;OPEN_EXISTING,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILE_ATTRIBUTE_NORMAL,&amp;nbsp;NULL))&amp;nbsp;!=&amp;nbsp;INVALID_HANDLE_VALUE)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(GetFileTime(hFile,&amp;nbsp;NULL,&amp;nbsp;NULL,&amp;nbsp;&amp;amp;Last_Write_Time))&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileTimeToLocalFileTime(&amp;amp;Last_Write_Time,&amp;nbsp;&amp;amp;Local_File_Time);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileTimeToSystemTime(&amp;amp;Local_File_Time,&amp;nbsp;&amp;amp;T);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Date&amp;nbsp;Modified:&amp;nbsp;&amp;nbsp;%02d/%02d/%d"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;T.wMonth,&amp;nbsp;T.wDay,&amp;nbsp;T.wYear);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CloseHandle(hFile);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;else&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Exception&amp;nbsp;Addr:&amp;nbsp;&amp;nbsp;%08X"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;E.ExceptionAddress);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Exception&amp;nbsp;Code:&amp;nbsp;&amp;nbsp;%08X"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;E.ExceptionCode);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(E.ExceptionCode&amp;nbsp;==&amp;nbsp;EXCEPTION_ACCESS_VIOLATION)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Access&amp;nbsp;violation&amp;nbsp;type&amp;nbsp;-&amp;nbsp;Write/Read. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"%s&amp;nbsp;Address:&amp;nbsp;&amp;nbsp;%08X"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(E.ExceptionInformation[0])&amp;nbsp;?&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Write"&lt;/span&gt;&lt;span&gt;&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Read"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;E.ExceptionInformation[1]);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Save&amp;nbsp;instruction&amp;nbsp;that&amp;nbsp;caused&amp;nbsp;exception. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Instruction:&amp;nbsp;"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;16;&amp;nbsp;i++)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"&amp;nbsp;%02X"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PBYTE&lt;/span&gt;&lt;span&gt;(E.ExceptionAddress)[i]);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Save&amp;nbsp;registers&amp;nbsp;at&amp;nbsp;exception. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Registers:"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"EAX:&amp;nbsp;%08X&amp;nbsp;&amp;nbsp;EBX:&amp;nbsp;%08X&amp;nbsp;&amp;nbsp;ECX:&amp;nbsp;%08X&amp;nbsp;&amp;nbsp;EDX:&amp;nbsp;%08X"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;C.Eax,&amp;nbsp;C.Ebx,&amp;nbsp;C.Ecx,&amp;nbsp;C.Edx);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"ESI:&amp;nbsp;%08X&amp;nbsp;&amp;nbsp;EDI:&amp;nbsp;%08X&amp;nbsp;&amp;nbsp;ESP:&amp;nbsp;%08X&amp;nbsp;&amp;nbsp;EBP:&amp;nbsp;%08X"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;C.Esi,&amp;nbsp;C.Edi,&amp;nbsp;C.Esp,&amp;nbsp;C.Ebp);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"EIP:&amp;nbsp;%08X&amp;nbsp;&amp;nbsp;EFlags:&amp;nbsp;%08X"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;C.Eip,&amp;nbsp;C.EFlags);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//if&amp;nbsp;(pException) &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Save&amp;nbsp;call&amp;nbsp;stack&amp;nbsp;info. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str_Len&amp;nbsp;+=&amp;nbsp;wsprintf(Str&amp;nbsp;+&amp;nbsp;Str_Len,&amp;nbsp;NL&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Call&amp;nbsp;Stack:"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get_Call_Stack(pException,&amp;nbsp;Str&amp;nbsp;+&amp;nbsp;Str_Len);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(Str[0]&amp;nbsp;==&amp;nbsp;NL[0])&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lstrcpy(Str,&amp;nbsp;Str&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;sizeof&lt;/span&gt;&lt;span&gt;(NL)&amp;nbsp;-&amp;nbsp;1);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;Str;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//Get_Exception_Info &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//************************************************************************************* &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;WINAPI&amp;nbsp;Create_Dump(PEXCEPTION_POINTERS&amp;nbsp;pException,&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;BOOL&lt;/span&gt;&lt;span&gt;&amp;nbsp;File_Flag,&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;BOOL&lt;/span&gt;&lt;span&gt;&amp;nbsp;Show_Flag)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//************************************************************************************* &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Create&amp;nbsp;dump.&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;pException&amp;nbsp;can&amp;nbsp;be&amp;nbsp;either&amp;nbsp;GetExceptionInformation()&amp;nbsp;or&amp;nbsp;NULL. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;If&amp;nbsp;File_Flag&amp;nbsp;=&amp;nbsp;TRUE&amp;nbsp;-&amp;nbsp;write&amp;nbsp;dump&amp;nbsp;files&amp;nbsp;(.dmz&amp;nbsp;and&amp;nbsp;.dmp)&amp;nbsp;with&amp;nbsp;the&amp;nbsp;name&amp;nbsp;of&amp;nbsp;the&amp;nbsp;current&amp;nbsp;process. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;If&amp;nbsp;Show_Flag&amp;nbsp;=&amp;nbsp;TRUE&amp;nbsp;-&amp;nbsp;show&amp;nbsp;message&amp;nbsp;with&amp;nbsp;Get_Exception_Info()&amp;nbsp;dump. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;HANDLE&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;hDump_File;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;PCHAR&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;DWORD&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Bytes;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;DWORD&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;nLen&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CString&amp;nbsp;strDir,strTXTFile,strDMPFile;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CString&amp;nbsp;strDate,strTotal;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CTime&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;&amp;nbsp;=&amp;nbsp;CTime::GetCurrentTime();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strDir.Format(_T(&lt;/span&gt;&lt;span class="string"&gt;"%s\\Log"&lt;/span&gt;&lt;span&gt;),GetExePath());&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strTXTFile.Format(_T(&lt;/span&gt;&lt;span class="string"&gt;"%s\\Log\\%04d-%02d-%02d&amp;nbsp;%02d%02d%02d.txt"&lt;/span&gt;&lt;span&gt;),GetExePath(),&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetYear(),&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetMonth(),&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetDay(),&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetHour(),&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetMinute(),&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetSecond());&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strDMPFile.Format(_T(&lt;/span&gt;&lt;span class="string"&gt;"%s\\Log\\%04d-%02d-%02d&amp;nbsp;%02d%02d%02d.dmp"&lt;/span&gt;&lt;span&gt;),GetExePath(),&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetYear(),&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetMonth(),&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetDay(),&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetHour(),&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetMinute(),&lt;/span&gt;&lt;span class="datatypes"&gt;tm&lt;/span&gt;&lt;span&gt;.GetSecond());&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;(!PathFileExists(strDir))&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CreateDirectory(strDir,NULL);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str&amp;nbsp;=&amp;nbsp;Get_Exception_Info(pException);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//if&amp;nbsp;(Show_Flag&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;Str) &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;&amp;nbsp;MessageBox(NULL,&amp;nbsp;Str,&amp;nbsp;"MiniDump",&amp;nbsp;MB_ICONHAND&amp;nbsp;|&amp;nbsp;MB_OK); &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(File_Flag)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(Str)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hDump_File&amp;nbsp;=&amp;nbsp;CreateFile(strTXTFile,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GENERIC_WRITE,&amp;nbsp;0,&amp;nbsp;NULL,&amp;nbsp;CREATE_ALWAYS,&amp;nbsp;FILE_ATTRIBUTE_NORMAL,&amp;nbsp;NULL);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nLen&amp;nbsp;=&amp;nbsp;lstrlen(Str);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Str[nLen]&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'\0'&lt;/span&gt;&lt;span&gt;;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WriteFile(hDump_File,&amp;nbsp;Str,&amp;nbsp;lstrlen(Str)&amp;nbsp;+&amp;nbsp;1,&amp;nbsp;&amp;amp;Bytes,&amp;nbsp;NULL);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CloseHandle(hDump_File);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;If&amp;nbsp;MiniDumpWriteDump()&amp;nbsp;of&amp;nbsp;DbgHelp.dll&amp;nbsp;available. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(MiniDumpWriteDump_)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MINIDUMP_EXCEPTION_INFORMATION&amp;nbsp;&amp;nbsp;M;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;M.ThreadId&amp;nbsp;=&amp;nbsp;GetCurrentThreadId();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;M.ExceptionPointers&amp;nbsp;=&amp;nbsp;pException;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;M.ClientPointers&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hDump_File&amp;nbsp;=&amp;nbsp;CreateFile(strDMPFile,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GENERIC_WRITE,&amp;nbsp;0,&amp;nbsp;NULL,&amp;nbsp;CREATE_ALWAYS,&amp;nbsp;FILE_ATTRIBUTE_NORMAL,&amp;nbsp;NULL);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MiniDumpWriteDump_(GetCurrentProcess(),&amp;nbsp;GetCurrentProcessId(),&amp;nbsp;hDump_File,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MiniDumpNormal,&amp;nbsp;(pException)&amp;nbsp;?&amp;nbsp;&amp;amp;M&amp;nbsp;:&amp;nbsp;NULL,&amp;nbsp;NULL,&amp;nbsp;NULL);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CloseHandle(hDump_File);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//if&amp;nbsp;(File_Flag) &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;delete&lt;/span&gt;&lt;span&gt;&amp;nbsp;Str;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//Create_Dump&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;textarea style="display: none" class="cpp" readOnly name="code"&gt;/*Author:Vladimir Sedach.Purpose: demo of Call Stack creation by our own means,and with MiniDumpWriteDump() function of DbgHelp.dll.*/#include "StdAfx.h"#include "MiniDump.h"#include &amp;lt;Shlwapi.h&amp;gt;#pragma comment(lib,"shlwapi.lib")HMODULEhDbgHelp;MINIDUMP_WRITE_DUMPMiniDumpWriteDump_;CREATE_TOOL_HELP32_SNAPSHOTCreateToolhelp32Snapshot_;MODULE32_FIRSTModule32First_;MODULE32_NESTModule32Next_;#defineDUMP_SIZE_MAX8000//max size of our dump#defineCALL_TRACE_MAX((DUMP_SIZE_MAX - 2000) / (MAX_PATH + 40))//max number of traced calls#defineNL"\r\n"//new lineextern CString GetExePath();//****************************************************************************************BOOL WINAPI Get_Module_By_Ret_Addr(PBYTE Ret_Addr, PCHAR Module_Name, PBYTE &amp;amp; Module_Addr)//****************************************************************************************// Find module by Ret_Addr (address in the module).// Return Module_Name (full path) and Module_Addr (start address).// Return TRUE if found.{MODULEENTRY32M = {sizeof(M)};HANDLEhSnapshot;Module_Name[0] = 0;if (CreateToolhelp32Snapshot_){hSnapshot = CreateToolhelp32Snapshot_(TH32CS_SNAPMODULE, 0);if ((hSnapshot != INVALID_HANDLE_VALUE) &amp;amp;&amp;amp;Module32First_(hSnapshot, &amp;amp;M)){do{if (DWORD(Ret_Addr - M.modBaseAddr) &amp;lt; M.modBaseSize){lstrcpyn(Module_Name, M.szExePath, MAX_PATH);Module_Addr = M.modBaseAddr;break;}} while (Module32Next_(hSnapshot, &amp;amp;M));}CloseHandle(hSnapshot);}return !!Module_Name[0];} //Get_Module_By_Ret_Addr//******************************************************************int WINAPI Get_Call_Stack(PEXCEPTION_POINTERS pException, PCHAR Str)//******************************************************************// Fill Str with call stack info.// pException can be either GetExceptionInformation() or NULL.// If pException = NULL - get current call stack.{CHARModule_Name[MAX_PATH];PBYTEModule_Addr = 0;PBYTEModule_Addr_1;intStr_Len;typedef struct STACK{STACK *Ebp;PBYTERet_Addr;DWORDParam[0];} STACK, * PSTACK;STACKStack = {0, 0};PSTACKEbp;if (pException)//fake frame for exception address{Stack.Ebp = (PSTACK)pException-&amp;gt;ContextRecord-&amp;gt;Ebp;Stack.Ret_Addr = (PBYTE)pException-&amp;gt;ExceptionRecord-&amp;gt;ExceptionAddress;Ebp = &amp;amp;Stack;}else{Ebp = (PSTACK)&amp;amp;pException - 1;//frame addr of Get_Call_Stack()// Skip frame of Get_Call_Stack().if (!IsBadReadPtr(Ebp, sizeof(PSTACK)))Ebp = Ebp-&amp;gt;Ebp;//caller ebp}Str[0] = 0;Str_Len = 0;// Trace CALL_TRACE_MAX calls maximum - not to exceed DUMP_SIZE_MAX.// Break trace on wrong stack frame.for (int Ret_Addr_I = 0;(Ret_Addr_I &amp;lt; CALL_TRACE_MAX) &amp;amp;&amp;amp; !IsBadReadPtr(Ebp, sizeof(PSTACK)) &amp;amp;&amp;amp; !IsBadCodePtr(FARPROC(Ebp-&amp;gt;Ret_Addr));Ret_Addr_I++, Ebp = Ebp-&amp;gt;Ebp){// If module with Ebp-&amp;gt;Ret_Addr found.if (Get_Module_By_Ret_Addr(Ebp-&amp;gt;Ret_Addr, Module_Name, Module_Addr_1)){if (Module_Addr_1 != Module_Addr)//new module{// Save module's address and full path.Module_Addr = Module_Addr_1;Str_Len += wsprintf(Str + Str_Len, NL "%08X  %s", Module_Addr, Module_Name);}// Save call offset.Str_Len += wsprintf(Str + Str_Len,NL "  +%08X", Ebp-&amp;gt;Ret_Addr - Module_Addr);// Save 5 params of the call. We don't know the real number of params.if (pException &amp;amp;&amp;amp; !Ret_Addr_I)//fake frame for exception addressStr_Len += wsprintf(Str + Str_Len, "  Exception Offset");else if (!IsBadReadPtr(Ebp, sizeof(PSTACK) + 5 * sizeof(DWORD))){Str_Len += wsprintf(Str + Str_Len, "  (%X, %X, %X, %X, %X)",Ebp-&amp;gt;Param[0], Ebp-&amp;gt;Param[1], Ebp-&amp;gt;Param[2], Ebp-&amp;gt;Param[3], Ebp-&amp;gt;Param[4]);}}elseStr_Len += wsprintf(Str + Str_Len, NL "%08X", Ebp-&amp;gt;Ret_Addr);}return Str_Len;} //Get_Call_Stack//***********************************int WINAPI Get_Version_Str(PCHAR Str)//***********************************// Fill Str with Windows version.{OSVERSIONINFOEXV = {sizeof(OSVERSIONINFOEX)};//EX for NT 5.0 and laterif (!GetVersionEx((POSVERSIONINFO)&amp;amp;V)){ZeroMemory(&amp;amp;V, sizeof(V));V.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);GetVersionEx((POSVERSIONINFO)&amp;amp;V);}if (V.dwPlatformId != VER_PLATFORM_WIN32_NT)V.dwBuildNumber = LOWORD(V.dwBuildNumber);//for 9x HIWORD(dwBuildNumber) = 0x04xxreturn wsprintf(Str,NL "Windows:  %d.%d.%d, SP %d.%d, Product Type %d",//SP - service pack, Product Type - VER_NT_WORKSTATION,...V.dwMajorVersion, V.dwMinorVersion, V.dwBuildNumber, V.wServicePackMajor, V.wServicePackMinor/*, V.wProductType*/);} //Get_Version_Str//*************************************************************PCHAR WINAPI Get_Exception_Info(PEXCEPTION_POINTERS pException)//*************************************************************// Allocate Str[DUMP_SIZE_MAX] and return Str with dump, if !pException - just return call stack in Str.{PCHARStr;intStr_Len;inti;CHARModule_Name[MAX_PATH];PBYTEModule_Addr;HANDLEhFile;FILETIMELast_Write_Time;FILETIMELocal_File_Time;SYSTEMTIMET;Str = new CHAR[DUMP_SIZE_MAX];if (!Str)return NULL;Str_Len = 0;Str_Len += Get_Version_Str(Str + Str_Len);Str_Len += wsprintf(Str + Str_Len, NL "Process:  ");GetModuleFileName(NULL, Str + Str_Len, MAX_PATH);Str_Len = lstrlen(Str);// If exception occurred.if (pException){EXCEPTION_RECORD &amp;amp;E = *pException-&amp;gt;ExceptionRecord;CONTEXT &amp;amp;C = *pException-&amp;gt;ContextRecord;// If module with E.ExceptionAddress found - save its path and date.if (Get_Module_By_Ret_Addr((PBYTE)E.ExceptionAddress, Module_Name, Module_Addr)){Str_Len += wsprintf(Str + Str_Len,NL "Module:  %s", Module_Name);if ((hFile = CreateFile(Module_Name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE){if (GetFileTime(hFile, NULL, NULL, &amp;amp;Last_Write_Time)){FileTimeToLocalFileTime(&amp;amp;Last_Write_Time, &amp;amp;Local_File_Time);FileTimeToSystemTime(&amp;amp;Local_File_Time, &amp;amp;T);Str_Len += wsprintf(Str + Str_Len,NL "Date Modified:  %02d/%02d/%d",T.wMonth, T.wDay, T.wYear);}CloseHandle(hFile);}}else{Str_Len += wsprintf(Str + Str_Len,NL "Exception Addr:  %08X", E.ExceptionAddress);}Str_Len += wsprintf(Str + Str_Len,NL "Exception Code:  %08X", E.ExceptionCode);if (E.ExceptionCode == EXCEPTION_ACCESS_VIOLATION){// Access violation type - Write/Read.Str_Len += wsprintf(Str + Str_Len,NL "%s Address:  %08X",(E.ExceptionInformation[0]) ? "Write" : "Read", E.ExceptionInformation[1]);}// Save instruction that caused exception.Str_Len += wsprintf(Str + Str_Len, NL "Instruction: ");for (i = 0; i &amp;lt; 16; i++)Str_Len += wsprintf(Str + Str_Len, " %02X", PBYTE(E.ExceptionAddress)[i]);// Save registers at exception.Str_Len += wsprintf(Str + Str_Len, NL "Registers:");Str_Len += wsprintf(Str + Str_Len, NL "EAX: %08X  EBX: %08X  ECX: %08X  EDX: %08X", C.Eax, C.Ebx, C.Ecx, C.Edx);Str_Len += wsprintf(Str + Str_Len, NL "ESI: %08X  EDI: %08X  ESP: %08X  EBP: %08X", C.Esi, C.Edi, C.Esp, C.Ebp);Str_Len += wsprintf(Str + Str_Len, NL "EIP: %08X  EFlags: %08X", C.Eip, C.EFlags);} //if (pException)// Save call stack info.Str_Len += wsprintf(Str + Str_Len, NL "Call Stack:");Get_Call_Stack(pException, Str + Str_Len);if (Str[0] == NL[0])lstrcpy(Str, Str + sizeof(NL) - 1);return Str;} //Get_Exception_Info//*************************************************************************************void WINAPI Create_Dump(PEXCEPTION_POINTERS pException, BOOL File_Flag, BOOL Show_Flag)//*************************************************************************************// Create dump. // pException can be either GetExceptionInformation() or NULL.// If File_Flag = TRUE - write dump files (.dmz and .dmp) with the name of the current process.// If Show_Flag = TRUE - show message with Get_Exception_Info() dump.{HANDLEhDump_File;PCHARStr;DWORDBytes;DWORDnLen = 0;CString strDir,strTXTFile,strDMPFile;CString strDate,strTotal;CTimetm = CTime::GetCurrentTime();strDir.Format(_T("%s\\Log"),GetExePath());strTXTFile.Format(_T("%s\\Log\\%04d-%02d-%02d %02d%02d%02d.txt"),GetExePath(),tm.GetYear(),tm.GetMonth(),tm.GetDay(),tm.GetHour(),tm.GetMinute(),tm.GetSecond());strDMPFile.Format(_T("%s\\Log\\%04d-%02d-%02d %02d%02d%02d.dmp"),GetExePath(),tm.GetYear(),tm.GetMonth(),tm.GetDay(),tm.GetHour(),tm.GetMinute(),tm.GetSecond());if(!PathFileExists(strDir))CreateDirectory(strDir,NULL);Str = Get_Exception_Info(pException);//if (Show_Flag &amp;amp;&amp;amp; Str)//MessageBox(NULL, Str, "MiniDump", MB_ICONHAND | MB_OK);if (File_Flag){if (Str){hDump_File = CreateFile(strTXTFile,GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);nLen = lstrlen(Str);Str[nLen] = '\0';WriteFile(hDump_File, Str, lstrlen(Str) + 1, &amp;amp;Bytes, NULL);CloseHandle(hDump_File);}// If MiniDumpWriteDump() of DbgHelp.dll available.if (MiniDumpWriteDump_){MINIDUMP_EXCEPTION_INFORMATIONM;M.ThreadId = GetCurrentThreadId();M.ExceptionPointers = pException;M.ClientPointers = 0;hDump_File = CreateFile(strDMPFile,GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);MiniDumpWriteDump_(GetCurrentProcess(), GetCurrentProcessId(), hDump_File,MiniDumpNormal, (pException) ? &amp;amp;M : NULL, NULL, NULL);CloseHandle(hDump_File);}} //if (File_Flag)delete Str;} //Create_Dump&lt;/textarea&gt;&lt;br /&gt;具体参考方法如下： &lt;p&gt;&lt;span style="color: #ff0000"&gt;&lt;strong&gt;&lt;span style="font-size: 18px"&gt;1、在CXXDlg::OnInitDialog()中添加这样一段：&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="dp-highlighter bg_cpp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;strong&gt;[cpp]&lt;/strong&gt; &lt;a class="ViewSource" title="view plain" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;view plain&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;copy&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="PrintSource" title="print" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;print&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="About" title="?" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;?&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-cpp"&gt;&lt;li class="alt"&gt;&lt;span&gt;SetUnhandledExceptionFilter(CrashReportEx);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="datatypes"&gt;HMODULE&lt;/span&gt;&lt;span&gt;&amp;nbsp;hKernel32;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Try&amp;nbsp;to&amp;nbsp;get&amp;nbsp;MiniDumpWriteDump()&amp;nbsp;address. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;hDbgHelp&amp;nbsp;=&amp;nbsp;LoadLibrary(&lt;/span&gt;&lt;span class="string"&gt;"DBGHELP.DLL"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;MiniDumpWriteDump_&amp;nbsp;=&amp;nbsp;(MINIDUMP_WRITE_DUMP)GetProcAddress(hDbgHelp,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"MiniDumpWriteDump"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;&amp;nbsp;d("hDbgHelp=%X,&amp;nbsp;MiniDumpWriteDump_=%X",&amp;nbsp;hDbgHelp,&amp;nbsp;MiniDumpWriteDump_); &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Try&amp;nbsp;to&amp;nbsp;get&amp;nbsp;Tool&amp;nbsp;Help&amp;nbsp;library&amp;nbsp;functions. &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;hKernel32&amp;nbsp;=&amp;nbsp;GetModuleHandle(&lt;/span&gt;&lt;span class="string"&gt;"KERNEL32"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;CreateToolhelp32Snapshot_&amp;nbsp;=&amp;nbsp;(CREATE_TOOL_HELP32_SNAPSHOT)GetProcAddress(hKernel32,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"CreateToolhelp32Snapshot"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Module32First_&amp;nbsp;=&amp;nbsp;(MODULE32_FIRST)GetProcAddress(hKernel32,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Module32First"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;Module32Next_&amp;nbsp;=&amp;nbsp;(MODULE32_NEST)GetProcAddress(hKernel32,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Module32Next"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;textarea style="display: none" class="cpp" readOnly name="code"&gt;SetUnhandledExceptionFilter(CrashReportEx);HMODULEhKernel32;// Try to get MiniDumpWriteDump() address.hDbgHelp = LoadLibrary("DBGHELP.DLL");MiniDumpWriteDump_ = (MINIDUMP_WRITE_DUMP)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");//d("hDbgHelp=%X, MiniDumpWriteDump_=%X", hDbgHelp, MiniDumpWriteDump_);// Try to get Tool Help library functions.hKernel32 = GetModuleHandle("KERNEL32");CreateToolhelp32Snapshot_ = (CREATE_TOOL_HELP32_SNAPSHOT)GetProcAddress(hKernel32, "CreateToolhelp32Snapshot");Module32First_ = (MODULE32_FIRST)GetProcAddress(hKernel32, "Module32First");Module32Next_ = (MODULE32_NEST)GetProcAddress(hKernel32, "Module32Next");&lt;/textarea&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;测试代码如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="dp-highlighter bg_cpp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;strong&gt;[cpp]&lt;/strong&gt; &lt;a class="ViewSource" title="view plain" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;view plain&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;copy&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="PrintSource" title="print" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;print&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="About" title="?" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;?&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-cpp"&gt;&lt;li class="alt"&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;CTestDlg&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;CDialog&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Construction &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CTestDlg(CWnd*&amp;nbsp;pParent&amp;nbsp;=&amp;nbsp;NULL);&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;standard&amp;nbsp;constructor &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;Fun1(&lt;/span&gt;&lt;span class="datatypes"&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;*pszBuffer);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;Fun2(&lt;/span&gt;&lt;span class="datatypes"&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;*pszBuffer);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;Fun3(&lt;/span&gt;&lt;span class="datatypes"&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;*pszBuffer);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;};&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;textarea style="display: none" class="cpp" readOnly name="code"&gt;class CTestDlg : public CDialog{// Constructionpublic:CTestDlg(CWnd* pParent = NULL);// standard constructorvoid Fun1(char *pszBuffer);void Fun2(char *pszBuffer);void Fun3(char *pszBuffer);};&lt;/textarea&gt;&lt;br /&gt;&lt;div class="dp-highlighter bg_cpp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;strong&gt;[cpp]&lt;/strong&gt; &lt;a class="ViewSource" title="view plain" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;view plain&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;copy&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="PrintSource" title="print" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;print&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="About" title="?" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;?&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-cpp"&gt;&lt;li class="alt"&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;CTestDlg::Fun1(&lt;/span&gt;&lt;span class="datatypes"&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;*pszBuffer)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Fun2(pszBuffer);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;CTestDlg::Fun2(&lt;/span&gt;&lt;span class="datatypes"&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;*pszBuffer)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Fun3(pszBuffer);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;CTestDlg::Fun3(&lt;/span&gt;&lt;span class="datatypes"&gt;char&lt;/span&gt;&lt;span&gt;&amp;nbsp;*pszBuffer)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pszBuffer[1]&amp;nbsp;=&amp;nbsp;0x00;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;textarea style="display: none" class="cpp" readOnly name="code"&gt;void CTestDlg::Fun1(char *pszBuffer){Fun2(pszBuffer);}void CTestDlg::Fun2(char *pszBuffer){Fun3(pszBuffer);}void CTestDlg::Fun3(char *pszBuffer){pszBuffer[1] = 0x00;}&lt;/textarea&gt;&lt;br /&gt;我们在双击确定按钮时的响应代码如下： &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="dp-highlighter bg_cpp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;strong&gt;[cpp]&lt;/strong&gt; &lt;a class="ViewSource" title="view plain" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;view plain&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;copy&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="PrintSource" title="print" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;print&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;a class="About" title="?" href="http://blog.csdn.net/wangningyu/article/details/6748138#"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;?&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-cpp"&gt;&lt;li class="alt"&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;CTestDlg::OnOK()&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;TODO:&amp;nbsp;Add&amp;nbsp;extra&amp;nbsp;validation&amp;nbsp;here &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Fun1(NULL);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;textarea style="display: none" class="cpp" readOnly name="code"&gt;void CTestDlg::OnOK() {// TODO: Add extra validation hereFun1(NULL);}&lt;/textarea&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000; font-size: 18px"&gt;2、设置VC编译选项，勾选生成MAP和Debug Info:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://hi.csdn.net/attachment/201109/4/0_1315148106H9D0.gif" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000; font-size: 18px"&gt;3、将编译生成的Release目录中的pdb、map文件保存起来，以后调试会用到：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://hi.csdn.net/attachment/201109/4/0_13151481669995.gif" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000"&gt;&lt;strong&gt;&lt;span style="font-size: 18px"&gt;4、运行程序，单击确定按钮出现异常后自动重启，并创建一个Log文件夹，里面生成dump文件:&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://hi.csdn.net/attachment/201109/4/0_1315148239a73a.gif" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000"&gt;&lt;strong&gt;&lt;span style="font-size: 18px"&gt;5、我们打开WinDbg，设置一下pdb路径(File \ Symbol File Path)：&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://hi.csdn.net/attachment/201109/4/0_1315148579L30U.gif" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000"&gt;&lt;strong&gt;&lt;span style="font-size: 18px"&gt;6、用WiinDbg打开dump文件（File \ Open Crash Dump）&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://hi.csdn.net/attachment/201109/4/0_1315148665Ww9F.gif" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000; font-size: 18px"&gt;7、输入命令&lt;span style="line-height: 170%; color: #3333ff; font-size: 9.5pt"&gt;!analyze -v&lt;/span&gt;，等待几秒后会打印出错误信息，函数调用栈如下图：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://hi.csdn.net/attachment/201109/4/0_1315149047621S.gif" /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;OK ，这样我们就能在发布版本的程序中，准确的定位到哪个函数出了问题，所以发布程序时，一定要记得生成pdb、map文件，不然客户运行出错的话，你不死也残！&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;测试工程下载地址：&lt;/p&gt;&lt;p&gt;http://download.csdn.net/source/3575167&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxh973121/aggbug/2395397.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxh973121/archive/2012/03/14/2395397.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxh973121/archive/2011/08/26/2154254.html</id><title type="text">Class Struct 转Byte Serialize Marshal 区别</title><summary type="text">下载</summary><published>2011-08-26T04:47:00Z</published><updated>2011-08-26T04:47:00Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxh973121/archive/2011/08/26/2154254.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/archive/2011/08/26/2154254.html"/><content type="html">&lt;a title="下载" href="http://files.cnblogs.com/gxh973121/ClassStructSerialize.rar"&gt;下载&lt;/a&gt;&lt;img src="http://www.cnblogs.com/gxh973121/aggbug/2154254.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxh973121/archive/2011/08/26/2154254.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxh973121/archive/2011/08/02/2124436.html</id><title type="text">C#捕获摄像头进行拍照和录像资料总结</title><summary type="text">1..net中捕获摄像头视频的方式及对比**2.用Directshow.net的播放控件http://www.360doc.com/content/09/0307/16/50415_2739439.shtml3。DirectShow.Net下载http://sourceforge.net/projects/directshownet/4。DirectShow .Net 实现视频预览(重点源码记录)**5。使用DirectX.Capture.dll和DShowNET.dll捕获视频程序6。Webcam in C#: AForge.NET （转）**7。AForge.Net下载http://www</summary><published>2011-08-01T17:10:00Z</published><updated>2011-08-01T17:10:00Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxh973121/archive/2011/08/02/2124436.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/archive/2011/08/02/2124436.html"/><content type="html">&lt;p&gt;1.&lt;a href="http://www.cnblogs.com/xrwang/archive/2010/02/13/HowToCaptureCameraVideoViaDotNet.html"&gt;.net中捕获摄像头视频的方式及对比&lt;/a&gt;**&lt;/p&gt;&lt;p&gt;2.用Directshow.net的播放控件&lt;a title="http://www.360doc.com/content/09/0307/16/50415_2739439.shtml" href="http://www.360doc.com/content/09/0307/16/50415_2739439.shtml"&gt;http://www.360doc.com/content/09/0307/16/50415_2739439.shtml&lt;/a&gt;&lt;/p&gt;&lt;p&gt;3。DirectShow.Net下载&lt;a title="http://sourceforge.net/projects/directshownet/" href="http://sourceforge.net/projects/directshownet/"&gt;http://sourceforge.net/projects/directshownet/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;4。&lt;a href="http://www.cnblogs.com/qiantz/archive/2009/04/15/1435952.html"&gt;DirectShow .Net 实现视频预览(重点源码记录)&lt;/a&gt;**&lt;/p&gt;&lt;p&gt;5。&lt;a href="http://www.cnblogs.com/mgod/archive/2008/06/18/1224353.html"&gt;使用DirectX.Capture.dll和DShowNET.dll捕获视频程序&lt;/a&gt;&lt;/p&gt;&lt;p&gt;6。&lt;a href="http://www.cnblogs.com/zeroone/archive/2010/04/13/1711146.html"&gt;Webcam in C#: AForge.NET （转）&lt;/a&gt;**&lt;/p&gt;&lt;p&gt;7。AForge.Net下载&lt;a title="http://www.aforgenet.com/framework/" href="http://www.aforgenet.com/framework/"&gt;http://www.aforgenet.com/framework/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;8。&lt;a href="http://www.cnblogs.com/yriyr/archive/2010/06/26/1765715.html"&gt;利用Aforge做的摄像监控程序（带视频差异录像）&lt;/a&gt;&lt;/p&gt;&lt;p&gt;9。EmguCV下载&lt;a title="http://www.emgu.com/wiki/index.php/Emgu_CV" href="http://www.emgu.com/wiki/index.php/Emgu_CV"&gt;http://www.emgu.com/wiki/index.php/Emgu_CV&lt;/a&gt;&lt;/p&gt;&lt;p&gt;10。&lt;a href="http://www.cnblogs.com/over140/archive/2009/04/07/1429308.html"&gt;C# 视频监控系列 序 [完]&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxh973121/aggbug/2124436.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxh973121/archive/2011/08/02/2124436.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxh973121/archive/2011/05/11/2042888.html</id><title type="text">一月学习socket tcp通信总结</title><summary type="text">学习过程中参考了不少园里的文章，表示感谢先学习过程1.首先学习封包拆包，这步是必须的2.考虑怎样实现高并发的通信，在网上浏览很多文章，这里我选用了SocketAsyncEventArgs，这个类在.net2.0sp1及以后版本 支持，此类对异步socket收发，线程调度，信号同步等做了封装优化，底层直接调用winapi，所以 socket通信效率是跟语言无关的3.进行封装成一个公共类库，方便以后调用总结：socket 的并发连接是很高的，一般几万个不成问题，当然我说的只是连接，我只拿1w个并发连接进行了测试，再高意义也不大，因为下一步的业务处理逻辑等会对他进行限制，形成瓶颈下面通过测试来说明问</summary><published>2011-05-11T02:07:00Z</published><updated>2011-05-11T02:07:00Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxh973121/archive/2011/05/11/2042888.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/archive/2011/05/11/2042888.html"/><content type="html">&lt;div&gt;学习过程中参考了不少园里的文章，表示感谢先&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;学习过程&lt;br /&gt;1.首先学习封包拆包，这步是必须的&lt;br /&gt;2.考虑怎样实现高并发的通信，在网上浏览很多文章，这里我选用了SocketAsyncEventArgs，这个类在.net2.0sp1及以后版本&lt;br /&gt;&amp;nbsp; 支持，此类对异步socket收发，线程调度，信号同步等做了封装优化，底层直接调用winapi，所以&amp;nbsp; socket通信效率是跟语言无关的&lt;br /&gt;3.进行封装成一个公共类库，方便以后调用&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;socket 的并发连接是很高的，一般几万个不成问题，当然我说的只是连接，我只拿1w个并发连接进行了&lt;br /&gt;测试，再高意义也不大，因为下一步的业务处理逻辑等会对他进行限制，形成瓶颈&lt;br /&gt;下面通过测试来说明问题&lt;br /&gt;&lt;br /&gt;测试方案一&lt;br /&gt;客户端并发4000个连接到服务器，每过30秒发送一条消息到服务器（内容就是一日期），服务器收到&lt;br /&gt;拆包保存到mysql数据库，然后把消息再发回客户端，上图开始&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="display: inline-block;"&gt;&lt;/div&gt;&amp;nbsp;服务器客户端连接完毕&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gxh973121/clientserver1.jpg" height="356" width="780" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;经过5轮首发消息，得到结论负载完全正常&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gxh973121/clientserver2.jpg" height="336" width="780" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;测试2&lt;/p&gt;&lt;p&gt;看上面结果处理还蛮轻松的，我们继续给它加压 并发10000个连接&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gxh973121/clientserver3.JPG" height="351" width="794" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/gxh973121/clientserver4.JPG" height="338" width="786" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;上面的结果大家看到了，客户端已经发送了30000条，但服务器只处理了5579条，其余的哪去了&lt;img src="http://www.cnblogs.com/Emoticons/msn/50_50.gif" alt="" /&gt;，没有丢，其实socket收发速度是很快的&lt;/p&gt;&lt;p&gt;立刻处理不了的被缓存了，当缓存达到一定数量时，就要出处理方案了，这时候要么拒绝服务，大家常见的Http500 服务器忙 错误怎么来的知道了吧，&lt;br /&gt;&lt;/p&gt;&lt;p&gt;要么扩容，多台服务器分担压力&lt;/p&gt;&lt;p&gt;&amp;nbsp;回到正题来，我们在服务器端没什么业务逻辑呀，就只解了下包，不应该连这点并发都处理不了啊，开始排查瓶颈，用profiler工具查看，发现80%左右耗在了&lt;/p&gt;&lt;p&gt;写mysql数据库上， 解决方法就是把这些io干掉&lt;/p&gt;&lt;p&gt;1.批更新，等到1000条再batch update 到数据库里，对我我这个测试或小应用足够了 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;2.换到内存数据库上（目前对内存数据库我了解不多，内存数据库要防断电等，所以最终要同步到磁盘sql数据库中），内存数据作为中间缓冲层，通过同步策略到磁盘上&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;结束语：瓶颈找到了，问题也就解决了，以后想在此基础上写个IM&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;-------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;我代码就不贴也，等im做出来后在放出来，下面列举下学习资源&lt;/p&gt;&lt;p&gt;&lt;div&gt;http://www.cnblogs.com/onlytiancai/archive/2008/07/26/unpack_network_package.html &lt;div&gt;&lt;span style="background-color: #ffffff"&gt;&lt;span style="background-color: #ffffff"&gt;蛙蛙教你解析网络包&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;div&gt;http://www.cnblogs.com/Alexander-Lee/archive/2009/11/11/1601021.html&lt;/div&gt;&lt;p&gt;发一个异步TCP开发库，求批评，求指正，求BUG&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;网络上针对具体问题的还很多，就不列了 &lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxh973121/aggbug/2042888.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxh973121/archive/2011/05/11/2042888.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxh973121/archive/2011/04/22/2024745.html</id><title type="text">线程防止冲突</title><summary type="text">多个线程同时访问一个公共变量时就容易引起冲突，例如解决方法是把这个变量的读写都保护起来，用lock锁定代码段</summary><published>2011-04-22T04:09:00Z</published><updated>2011-04-22T04:09:00Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxh973121/archive/2011/04/22/2024745.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/archive/2011/04/22/2024745.html"/><content type="html">&lt;p&gt; 多个线程同时访问一个公共变量时就容易引起冲突，例如&lt;/p&gt;&lt;p&gt;解决方法是把这个变量的读写都保护起来，用lock锁定代码段&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxh973121/aggbug/2024745.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxh973121/archive/2011/04/22/2024745.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxh973121/archive/2010/11/24/1886663.html</id><title type="text">flex</title><summary type="text">flex 事件异步导致代码顺序不利于阅读source：http://hi.baidu.com/chensong_blog/blog/item/56240f16a4ad064321a4e91d.html做项目时，用RemoteObject对象发现如果一个页面上调用多个方法，此时如果每个方法的出错处理提示和处理结果不同时，必须要给每个方法写一个回调方法，因此，我们采用代理执行，具体代码如下：packa...</summary><published>2010-11-24T07:46:00Z</published><updated>2010-11-24T07:46:00Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxh973121/archive/2010/11/24/1886663.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/archive/2010/11/24/1886663.html"/><content type="html">&lt;p&gt;flex 事件异步导致代码顺序不利于阅读&lt;/p&gt;&lt;p&gt;source：&lt;a href="http://hi.baidu.com/chensong_blog/blog/item/56240f16a4ad064321a4e91d.html"&gt;http://hi.baidu.com/chensong_blog/blog/item/56240f16a4ad064321a4e91d.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;做项目时，用RemoteObject对象发现如果一个页面上调用多个方法，此时如果每个方法的出错处理提示和处理结果不同时，必须要给每个方法写一个回调方法，因此，我们采用代理执行，具体代码如下：&lt;/p&gt;&lt;p&gt;package com.system {&lt;/p&gt;&lt;p&gt;import com.reider.log4AS3.Logger;&lt;br /&gt;import com.reider.log4AS3.LoggerFactory;&lt;br /&gt;&lt;br /&gt;import mx.rpc.AbstractOperation;&lt;br /&gt;import mx.rpc.AsyncResponder;&lt;br /&gt;import mx.rpc.AsyncToken;&lt;br /&gt;import mx.rpc.events.FaultEvent;&lt;br /&gt;import mx.rpc.events.ResultEvent;&lt;br /&gt;import mx.rpc.remoting.RemoteObject;&lt;/p&gt;&lt;p&gt;/**&lt;br /&gt;* 和后台数据交互的代理&lt;br /&gt;*/&lt;br /&gt;public class ServiceProxy {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; private static var logger:Logger = LoggerFactory.getLogger(ServiceProxy);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp; * 创建代理后执行此方法，并返回数据 &lt;br /&gt;&amp;nbsp;&amp;nbsp; * @param serviceName&lt;br /&gt;&amp;nbsp;&amp;nbsp; * @param methodName&lt;br /&gt;&amp;nbsp;&amp;nbsp; * @param onResult 回调函数，有两个参数：类型：boolean，标识远程调用结果；类型：Object，远程调用返回数据&lt;br /&gt;&amp;nbsp;&amp;nbsp; * @param params 参数（多个参数中间用逗号隔开）&lt;br /&gt;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; public static function execute(serviceName:String, methodName:String, onResult:Function, ... params:Array):void {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.debug("execute start");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var service:RemoteObject = new RemoteObject(serviceName);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; service.endpoint = "&lt;em&gt;&lt;u&gt;http://ip:port/contextpath/messagebroker/amf&lt;/u&gt;&lt;/em&gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var asyncToken:AsyncToken;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var operation:AbstractOperation = service.getOperation(methodName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (params &amp;amp;&amp;amp; params.length != 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asyncToken = operation.send.apply(operation, params);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asyncToken = operation.send();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asyncToken.addResponder(new AsyncResponder(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function(event:ResultEvent, asyncToken:AsyncToken):void {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onResult(true,event.result);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function(event:FaultEvent, asyncToken:AsyncToken):void {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onResult(false, event.message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asyncToken&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.debug("execute end");&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;调用示例如下：&lt;/p&gt;&lt;p&gt;private function goToPage(no:Number):void{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ServiceProxy.execute("PageService","getPage",function(success:Boolean, data:Object):void {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!success){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Alert.show("数据库异常");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;/p&gt;&lt;p&gt;。。。。。成功调用后的处理&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; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },encodeURI(hql),no,this.totalRows);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/gxh973121/aggbug/1886663.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxh973121/archive/2010/11/24/1886663.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxh973121/archive/2010/11/15/1877333.html</id><title type="text">Flex FLOWBOX 添加RichText  不换行</title><summary type="text">//richtextres.setStyle('paddingTop',5);richtextres.setStyle('paddingLeft',2);当把上面注释去掉后 Flowbox 不能正常换行，paddingLeft 不受影响</summary><published>2010-11-14T17:54:00Z</published><updated>2010-11-14T17:54:00Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxh973121/archive/2010/11/15/1877333.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/archive/2010/11/15/1877333.html"/><content type="html">&lt;p&gt;　//richtextres.setStyle('paddingTop',5);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;richtextres.setStyle('paddingLeft',2);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;当把上面注释去掉后 Flowbox 不能正常换行，paddingLeft 不受影响&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxh973121/aggbug/1877333.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxh973121/archive/2010/11/15/1877333.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxh973121/archive/2010/03/01/1675702.html</id><title type="text">win7 修复系统文件</title><summary type="text">网友建议:如果用替换法激活过的，再用OEM7激活会提示错误。可以先用命令SFC /SCANNOW 扫描并修复系统文件，重启后就可以用OEM7激活</summary><published>2010-03-01T05:55:00Z</published><updated>2010-03-01T05:55:00Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxh973121/archive/2010/03/01/1675702.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/archive/2010/03/01/1675702.html"/><content type="text">网友建议:如果用替换法激活过的，再用OEM7激活会提示错误。可以先用命令SFC /SCANNOW 扫描并修复系统文件，重启后就可以用OEM7激活</content></entry><entry><id>http://www.cnblogs.com/gxh973121/archive/2009/07/04/1516913.html</id><title type="text">方法的直接调用，反射调用与……Lambda表达式调用</title><summary type="text">source:http://www.cnblogs.com/JeffreyZhao/archive/2008/11/24/invoke-method-by-lambda-expression.html想调用一个方法很容易，直接代码调用就行，这人人都会。其次呢，还可以使用反射。不过通过反射调用的性能会远远低于直接调用——至少从绝对时间上来看的确是这样。虽然这是个众所周知的现象...</summary><published>2009-07-04T10:22:00Z</published><updated>2009-07-04T10:22:00Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxh973121/archive/2009/07/04/1516913.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/archive/2009/07/04/1516913.html"/><content type="text">source:http://www.cnblogs.com/JeffreyZhao/archive/2008/11/24/invoke-method-by-lambda-expression.html想调用一个方法很容易，直接代码调用就行，这人人都会。其次呢，还可以使用反射。不过通过反射调用的性能会远远低于直接调用——至少从绝对时间上来看的确是这样。虽然这是个众所周知的现象...</content></entry><entry><id>http://www.cnblogs.com/gxh973121/archive/2009/04/23/1441873.html</id><title type="text">WebBrowser控件使用技巧分享 </title><summary type="text">from:http://www.cnblogs.com/SkyD/archive/2009/04/23/1441696.html在发布“淘宝登货员”时发现不少朋友对WebBrowser控件比较感兴趣，故在此分享一下使用心得。首先分享一个WebBrowser的扩展类（此类所需的dll将在文章末尾提供下载），大家最好都使用这个类来替代.Net框架中的WebBrowser类，它提...</summary><published>2009-04-23T02:53:00Z</published><updated>2009-04-23T02:53:00Z</updated><author><name>gxh973121</name><uri>http://www.cnblogs.com/gxh973121/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxh973121/archive/2009/04/23/1441873.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxh973121/archive/2009/04/23/1441873.html"/><content type="text">from:http://www.cnblogs.com/SkyD/archive/2009/04/23/1441696.html在发布“淘宝登货员”时发现不少朋友对WebBrowser控件比较感兴趣，故在此分享一下使用心得。首先分享一个WebBrowser的扩展类（此类所需的dll将在文章末尾提供下载），大家最好都使用这个类来替代.Net框架中的WebBrowser类，它提...</content></entry></feed>
