Anda di halaman 1dari 78

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x html1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.

com/2008/fbml" > <head> <script>window.timer_start = (+new Date())</script> <title>A Crash Course on the Depths of Win32</title> <meta name="verify-v1" content="L4NJcP1bTYOJFMHbpoh8ERVHKc1WzM7/WG+vA6ZncWs= " /> <meta http-equiv="Content-Type" content="text/HTML; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="title" content="A Crash Course on the Depths of Win32" /> <meta property="og:description" content="Scribd is the world's largest s ocial reading and publishing site." /> <meta name="keywords" content="documents, document sharing, embedded doc uments, pdf download, free download, upload document" /> <link rel="canonical" class="SL_norewrit e" href="http://www.scribd.com/doc/52270399/A-Crash-Course-on-the-Depths-of-Win3 2" /> <script>var NREUMQ=[];NREUMQ.push(["mark","firstbyte",new Date().getTime ()]);</script>

<link rel="alternate" type="application/json+oembed" href="http://www.scribd.com/services/oembed?url=http%3A%2F%2Fw ww.scribd.com%2Fdoc%2F52270399%2FA-Crash-Course-on-the-Depths-of-Win32&format=js on" title="A Crash Course on the Depths of Win32 oEmbed Profile" / > <link rel="alternate" type="application/xml+oembed" href="http://www.scribd.com/services/oembed?url=http%3A%2F%2Fw ww.scribd.com%2Fdoc%2F52270399%2FA-Crash-Course-on-the-Depths-of-Win32&format=xm l" title="A Crash Course on the Depths of Win32 oEmbed Profile" / >

<link rel="image_src" href="http://imgv2-4.scribdassets.com/img/word _document/52270399/164x212/42bd762849/1319060131" /> <meta property="og:image" content="http://imgv2-4.scribdassets.com/i mg/word_document/52270399/164x212/42bd762849/1319060131" /> <meta property="og:type" content="article" />

<!--[if lt IE 8]> <link href="http://s6.scribdassets.com/aggregated/css/base.css?1320178242" media ="screen" rel="stylesheet" type="text/css" /> <link href="http://s7.scribdassets.com/aggregated/css/web.css?1320178242" media= "screen" rel="stylesheet" type="text/css" /> <link href="http://s7.scribdassets.com/aggregated/css/fragments.css?1320178242" media="screen" rel="stylesheet" type="text/css" /> <![endif]--> <!--[if gte IE 8]> <link href="http://s7.scribdassets.com/aggregated/css_img/base.css?1320178242" m edia="screen" rel="stylesheet" type="text/css" /> <link href="http://s7.scribdassets.com/aggregated/css_img/web.css?1320178242" me dia="screen" rel="stylesheet" type="text/css" /> <link href="http://s7.scribdassets.com/aggregated/css_img/fragments.css?13201782 42" media="screen" rel="stylesheet" type="text/css" /> <![endif]--> <!--[if !IE]> --> <link href="http://s7.scribdassets.com/aggregated/css_img/base.css?1320178242" m edia="screen" rel="stylesheet" type="text/css" /> <link href="http://s7.scribdassets.com/aggregated/css_img/web.css?1320178242" me dia="screen" rel="stylesheet" type="text/css" /> <link href="http://s7.scribdassets.com/aggregated/css_img/fragments.css?13201782 42" media="screen" rel="stylesheet" type="text/css" /> <!-- <![endif]--> <script src="http://s6.scribdassets.com/javascripts/scribd_options.js" t ype="text/javascript"></script>

<meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="212c27c7903f706e2aecfc0ba6824434c91ebe8e" />

<!--[if lte IE 6]> <link href="http://s5.scribdassets.com/aggregated/css/ie.css?132 0178242" media="screen" rel="stylesheet" type="text/css" /> <![endif]--> <!--[if gte IE 7]> <link href="http://s5.scribdassets.com/aggregated/css/ie7.css?13 20178242" media="screen" rel="stylesheet" type="text/css" /> <![endif]-->

<script type="text/javascript"> if (!window.Scribd) var Scribd = new Object(); Scribd.cdn_path = 'http://s6.scribdassets.com/'; Scribd.rails_env = 'production'; Scribd.logged_in = true;

var perfStart = new Date(); </script> <script src="http://s6.scribdassets.com/aggregated/javascript/doc_view.j s?1320178242" type="text/javascript"></script> <script src="http://s6.scribdassets.com/options/exposed_to_client.js?132 0225300" type="text/javascript"></script> <meta property="fb:app_id" content="136494494209" />

<script type="text/javascript"> window['$rat'] = ratInit( ["http://rs1.scribd.com/","http://rs2.scribd.com/","http://rs3.s cribd.com/","http://rs4.scribd.com/","http://rs5.scribd.com/","http://rs6.scribd .com/","http://rs7.scribd.com/","http://rs8.scribd.com/"], {"user_id":105583139,"doc_id":52270399}, false ); </script>

<!--[if lt IE 8]> <link href="http://s5.scribdassets.com/aggregated/css/fourgen.css?1320178169" me dia="screen" rel="stylesheet" type="text/css" /> <![endif]--> <!--[if gte IE 8]> <link href="http://s7.scribdassets.com/aggregated/css_img/fourgen.css?1320178169 " media="screen" rel="stylesheet" type="text/css" /> <![endif]--> <!--[if !IE]> --> <link href="http://s7.scribdassets.com/aggregated/css_img/fourgen.css?1320178169 " media="screen" rel="stylesheet" type="text/css" /> <!-- <![endif]--> <style></style> <script type='text/javascript' src='http://fonts2.scribdassets.com/static/4gen.j s?1318628323'> </script> <script type='text/javascript'> var defaultViewWidth = 679.0; var docManager = new DocumentManager("scroll", "web" == "mobile"); // Our glob al manager for this view page window.docManager = docManager; docManager.setEmbeddedDoc('False'); docManager.fontAggregatorHosts = ["http://fonts1.scribdassets.com", "http://fo

nts2.scribdassets.com", "http://fonts3.scribdassets.com", "http://fonts4.scribda ssets.com"]; docManager.assetPrefix = "48m0bl17r4wsixv"; docManager.addFont(1, "", "ff1", "Courier New, Courier New, Courier6", "normal ", "normal"); docManager.addFont(0, "", "ff0", "Verdana, Verdana, Geneva, sans-serif", "norm al", "normal"); docManager.addFont(3, "b", "ff3", "Verdana, Verdana, Geneva, sans-serif", "bol d", "normal"); docManager.addFont(2, "", "ff2", "Arial, Arial, Helvetica, sans-serif", "norma l", "normal"); docManager.addFont(5, "", "ff5", "Courier New, Courier New, Courier6", "normal ", "normal"); docManager.addFont(4, "", "ff4", "Georgia1, Georgia, serif", "normal", "normal "); docManager.addFont(6, "", "ff6", "Arial, Arial, Helvetica, sans-serif", "norma l", "normal"); docManager.displayType = "vector"; docManager.initStyles(); docManager.setPageWidths(679.0); docManager.setImageDomainSubstitution(/http:\/\/html.scribd.com/, ["http://htm limg1.scribdassets.com", "http://htmlimg2.scribdassets.com", "http://htmlimg3.sc ribdassets.com", "http://htmlimg4.scribdassets.com"]); </script> <link rel='stylesheet' type='text/css' href='http://fonts1.scribdassets.com/stat ic/4gen.css?1318628324'/> <!--[if IE]> <link rel='stylesheet' type='text/css' href='http://fonts3.scribdassets.com/stat ic/4gen_ie.css?1318628324' /> <![endif]--> <!--[if !IE]><!--> <link rel='stylesheet' type='text/css' href='http://fonts3.scribdassets.com/stat ic/4gen_non_ie.css?1318628324' /> <!--<![endif]-->

<script src="http://s7.scribdassets.com/aggregated/javascript/fourgen.js?13201 78169" type="text/javascript"></script> <script type="text/javascript"> document.observe('dom:loaded', function() { Scribd.FourGen = Scribd.FourGen {}; Scribd.FourGen.doc = { id: 52270399, secret_password: null } }); docManager.documentId = 52270399; Event.observe(window, 'load', function() { var currentViewMode = docManager.viewMode(); if(currentViewMode === 'slideshow') { // initial mode changes var toolbar = $('toolbar'); var togglePopupButton = toolbar.down('a.toggle_viewmode_popup'); var pagingControls = toolbar.down('div.paging_controls'); togglePopupButton.addClassName(currentViewMode);

pagingControls.addClassName(currentViewMode); // a hacky way to initialize slideshow mode for various event li steners setTimeout(function() { docManager.fireEvent('viewmodeChanged', 'slideshow', 'scroll '); }, 50); } }); </script>

<link rel="alternate" type="application/rss+xml" title="Scribd RSS feed" href="http://www.scribd.com/feeds/rss" /> <link rel="shortcut icon" href="http://s6.scribdassets.com/favicon.ico" />

<script type="text/javascript" src="http://partner.googleadservices.com/gampad /google_service.js"></script> <script type="text/javascript"> GS_googleAddAdSenseService("ca-pub-7291399211842501"); GS_googleEnableAllServices(); </script> <script src="http://s5.scribdassets.com/javascripts/ads.js?1320178242" type="tex t/javascript"></script> <script type="text/javascript"> Scribd.Ads.addAttribute("Action", "show"); Scribd.Ads.addAttribute("AdLayout", -1472436212); Scribd.Ads.addAttribute("Controller", "word"); Scribd.Ads.addAttribute("DocUser", 66996607); Scribd.Ads.addAttribute("Document", 52270399); Scribd.Ads.addAttribute("Extension", "pdf"); Scribd.Ads.addAttribute("FBRecent", false); Scribd.Ads.addAttribute("FourGen", true); Scribd.Ads.addAttribute("IABChild", ["Visual Basic","Net for Beginners ","JavaScript"]); Scribd.Ads.addAttribute("IABParent", ["Technology & Computing"]); Scribd.Ads.addAttribute("Owner", 66996607); Scribd.Ads.addAttribute("ProfUser", 66996607); Scribd.Ads.addAttribute("User", 105583139); Scribd.Ads.addAttribute("UserState", "In"); </script> <script type="text/javascript">

GA_googleFetchAds();

</script> <!-- Start Quantcast User Segmentation --> <script type="text/javascript"> var quantSegs = []; function qc_results(result) { for (var i = 0; i < result.segments.length; i++) quantSegs.push(result.segments[i].id); Scribd.Ads.addAttribute("QuantSegs", quantSegs); } </script> <script type="text/javascript" src="http://pixel.quantserve.com/api/segments.jso n?a=p-13DPpb-yg8ofc&callback=qc_results"></script> <!-- End Quantcast User Segmentation -->

<!-- BEGIN Asynchronous Google Analytics --> <script type="text/javascript"> var _gaq = _gaq []; _gaq.push(['_setAccount', "UA-443684-2"]); _gaq.push(['_setCustomVar', 1, 'logged_in', 'true', 1]); _gaq.push(['_setCustomVar', 2, 'fb_setup_context', 'none', 1]); _gaq.push(['_setCustomVar', 3, 'domain', document.location.host, 3]); document.observe('dom:loaded', function() { // wait until dom loaded so all A/B test custom vars can be set first var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.asy nc = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www ') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore( ga, s); var groups = Scribd.CohortsAdapter.getTestAssignments(); _gaq.push(['_setCustomVar', 4, 'test_groups', groups, 1]); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); }); </script> <!-- END Asynchronous Google Analytics --> </head> <body class="loc_word loc_word_show " data-revision="f185bd5f204dbc1508a78d6e2c0 5dcdd4d6d6b0c"> <div class="autogen_class_views_shared_facebook_fake_blue_bar" id="autog en_id_961995849"></div> <div id="template_main_content" >

<div id="global_header" aptureNoHighlight="true"> <div class="inner clearfix"> <a href="/" class="logo" title="Scribd Home">Scribd</a> <div class="left_bar head_sep"></div> <a href="/upload-document" class="upload_button" id="global_header_uploa d_button" onclick="trackEvent('upload','click','topbar_docview')" title="Upload &amp; share documents.">Upload a Document</a> <div class="right_bar head_sep"></div> <form action="/search" autocomplete="off" class="global_search" method="get"> <input class="search_input" id="query_header" name="query" type="text" /> <a href="#" class="search_button">Search Documents</a> <div class="autogen_class_views_shared_search_autocompleter" id="autogen _id_961994804"><div class="search_autocompleter" id="autocompleter" style="displ ay:none"><div class="ac_section ac_document_collections" id="autocompleter_docum ent_collections"><div class="ac_white_border"><div class="ac_main"></div><div cl ass="ac_sidebar"><div alt="document collections icon" class="icon_ac_collection_ 12x15"></div></div></div></div><div class="ac_section ac_publishers" id="autocom pleter_publishers"><div class="ac_white_border"><div class="ac_main"></div><div class="ac_sidebar"><div alt="publishers icon" class="icon_ac_pub_15x15"></div></ div></div></div><div class="ac_section ac_documents" id="autocompleter_documents "><div class="ac_white_border"><div class="ac_main"></div><div class="ac_sidebar "><div alt="documents icon" class="icon_ac_doc_10x14"></div></div></div></div><d iv class="ac_section ac_scribd_pages" id="autocompleter_scribd_pages"><div class ="ac_white_border"><div class="ac_main"></div><div class="ac_sidebar"><div alt=" scribd pages icon" class="icon_ac_scribd_15x15"></div></div></div></div><div cla ss="ac_section ac_users" id="autocompleter_users"><div class="ac_white_border">< div class="ac_main"></div><div class="ac_sidebar"><div alt="users icon" class="i con_ac_people_12x12"></div></div></div></div></div></div> </form> <div class="right_bar head_sep"></div> <div class="hover_menu" id="primary_menu"><a href="/explore" class="menu _control">Explore</a><div class="sub_menu clearfix"><div class="tail"><div class ="global_header_tri_11x6" style="margin-top: 11px"></div></div><div class="menu_ content clearfix"><div class="menu_left menu_column"><h3><div class="icon_doc_14 x16"></div><a href="/explore">Documents</a></h3><ul><li><a href="/explore/BooksFiction">Books - Fiction</a></li><li><a href="/explore/Books-Nonfiction">Books Non-fiction</a></li><li><a href="/explore/Health-Medicine">Health &amp; Medicin e</a></li><li><a href="/explore/BrochuresCatalogs">Brochures/Catalogs</a></li><l i><a href="/explore/Government-Docs">Government Docs</a></li><li><a href="/explo re/HowTo-GuidesManuals">How-To Guides/Manuals</a></li><li><a href="/explore/Maga zinesNewspapers">Magazines/Newspapers</a></li><li><a href="/explore/RecipesMenus ">Recipes/Menus</a></li><li><a href="/explore/School-Work">School Work</a></li>< li class="dem"><a href="/explore">+ all categories</a></li><li class="sep"></li> <li class="em"><a href="/explore">Featured</a></li><li class="em"><a href="/expl ore/Most-Recent">Recent</a></li></ul></div><div class="menu_right menu_column">< h3><div class="icon_user_17x16"></div><a href="/community">People</a></h3><ul><l i><a href="/community/authors">Authors</a></li><li><a href="/community/students" >Students</a></li><li><a href="/community/researchers">Researchers</a></li><li>< a href="/community/publishers">Publishers</a></li><li><a href="/community/govern ment-%26-nonprofits">Government &amp; Nonprofits</a></li><li><a href="/community

/businesses">Businesses</a></li><li><a href="/community/musicians">Musicians</a> </li><li><a href="/community/artists-%26-designers">Artists &amp; Designers</a>< /li><li><a href="/community/teachers">Teachers</a></li><li class="dem"><a href=" /community">+ all categories</a></li><li class="sep"></li><li class="em"><a href ="/community">Most Followed</a></li><li class="em"><a href="/community?t=trendin g">Popular</a></li></ul></div></div></div></div>

<ul class="utilities clearfix" > <li class="hover_menu l1" id="user_util"><a href="http://www.scr ibd.com/asdf112233zx" class="menu_control notranslate">asdf112233zx</a><div clas s="sub_menu"><div class="tail clearfix"><div class="global_header_tri_11x6" styl e="margin-top: 10px; float: right;"></div></div><div class="menu_content"><h3><i mg class="user_thumb" src="http://imgv2-2.scribdassets.com/img/word_user/1055831 39/15x15/2fb0c7e129/1320223946" />Account</h3><ul><li><a href="/">Home</a></li>< li><a href="http://www.scribd.com/documents">My Documents</a></li><li><a href="h ttp://www.scribd.com/my_document_collections">My Collections</a></li><li><a href ="http://www.scribd.com/shelf">My Shelf</a></li><li><a href="http://www.scribd.c om/asdf112233zx">View Public Profile</a></li><li><a href="http://www.scribd.com/ inbox">Messages</a></li><li><a href="http://www.scribd.com/notifications">Notifi cations</a></li><li id="util_logout"><a href="/account/edit">Settings</a></li><l i><a href="http://support.scribd.com">Help</a></li><li><a href="/logout?return_t o=%2Fdoc%2F52270399%2FA-Crash-Course-on-the-Depths-of-Win32" class="logout_link" style="font-weight: bold;">Log Out</a></li></ul></div></div></li> </ul> </div> </div>

<div id="wrap" class="clearfix"> <div class="autogen_class_views_documents_fourgen_toolbar" id="a utogen_id_962002185"><div aptureNoHighlight="true" id="toolbar"><div id="toolbar _left_side"><div id="scrubber"><div class="no_notches" id="all_track"><div id="l eft_track"></div></div><div id="track"><div id="handle"><div href="#" id="handle _inner" onclick="return false;" ondrag="return false;"><div id="page_num" style= "display: none;">1</div></div></div></div></div><div class="section controls"><d iv class="paging_controls"><div class="tooltip_wrapper" id="page_control_top_too ltip_wrapper"><div class="tooltip" id="page_control_top_tooltip" style="display: none;"><span class="inner" style="font-size: 11px; color: #ffffff;"><nobr>&nbsp ;</nobr></span><div class="tooltip_tail"></div></div><a class="ctl_button to_top " id="page_control_top" title="First Page"></a></div><div class="tooltip_wrapper " id="page_control_up_tooltip_wrapper"><div class="tooltip" id="page_control_up_ tooltip" style="display: none;"><span class="inner" style="font-size: 11px; colo r: #ffffff;"><nobr>&nbsp;</nobr></span><div class="tooltip_tail"></div></div><a class="ctl_button page_up" id="page_control_up" title="Previous Page"></a></div> <div class="tooltip_wrapper" id="page_control_down_tooltip_wrapper"><div class=" tooltip" id="page_control_down_tooltip" style="display: none;"><span class="inne

r" style="font-size: 11px; color: #ffffff;"><nobr>&nbsp;</nobr></span><div class ="tooltip_tail"></div></div><a class="ctl_button page_down" id="page_control_dow n" title="Next Page"></a></div><div class="pages"><input class="current_page" id ="current_page" type="text" /><span>&nbsp; / &nbsp;</span><span class="max_page notranslate">41</span></div></div><div class="sectionlist"><div class="tooltip_w rapper" id="toolbar_sectionlist_tooltip_wrapper"><div class="tooltip" id="toolba r_sectionlist_tooltip" style="display: none;"><span class="inner" style="font-si ze: 11px; color: #ffffff;"><nobr>&nbsp;</nobr></span><div class="tooltip_tail">< /div></div><a class="ctl_button section_list" id="toolbar_sectionlist" title="Se ctions"></a></div></div><div class="autogen_class_views_documents_fourgen_sectio ns" id="autogen_id_962001748"><div class="popup" id="sectionlist_popup" style="d isplay: none;"><div class="content_wrapper_wrapper"><div class="content_wrapper" ><div class="content clearfix"><div id="section_list_container"><div class="head er clearfix" style="text-align: left;"><span class="section_title">Sections</spa n><span class="section_info"></span><span class="controls"><span class="section_ counter">Section <span class="notranslate" id="popup_section_number">1</span> of <span class="notranslate">22</span></span><a class="previous" rel="nofollow"> < /a><a class="next" rel="nofollow"> </a><a class="close_button" rel="nofollow"></ a></span></div><ul class="notranslate" data-section_count="21"><li id="popup_sec tion_link_1"><a class="section_link" data-section="1" href="http://www.scribd.co m/doc/52270399/1/SEH-in-the-Buff"><span class="name">SEH in the Buff</span><span class="page" data-page="2">p. 2</span></a></li><li id="popup_section_link_2"><a class="section_link" data-section="2" href="http://www.scribd.com/doc/52270399/ 2/Moving-In-a-Little-Deeper"><span class="name">Moving In a Little Deeper</span> <span class="page" data-page="5">p. 5</span></a></li><li id="popup_section_link_ 3"><a class="section_link" data-section="3" href="http://www.scribd.com/doc/5227 0399/3/Help-Nobody-Handled-It"><span class="name">Help! Nobody Handled It!</span ><span class="page" data-page="8">p. 8</span></a></li><li id="popup_section_link _4"><a class="section_link" data-section="4" href="http://www.scribd.com/doc/522 70399/4/Compiler-level-SEH"><span class="name">Compiler-level SEH</span><span cl ass="page" data-page="10">p. 10</span></a></li><li id="popup_section_link_5"><a class="section_link" data-section="5" href="http://www.scribd.com/doc/52270399/5 /The-Extended-Exception-Handling-Frame"><span class="name">The Extended Exceptio n Handling Frame</span><span class="page" data-page="12">p. 12</span></a></li><l i id="popup_section_link_6"><a class="section_link" data-section="6" href="http: //www.scribd.com/doc/52270399/6/-except-handler3-and-the-scopetable"><span class ="name">__except_handler3 and the scopetable</span><span class="page" data-page= "13">p. 13</span></a></li><li id="popup_section_link_7"><a class="section_link" data-section="7" href="http://www.scribd.com/doc/52270399/7/The-ShowSEHFrames-Pr ogram"><span class="name">The ShowSEHFrames Program</span><span class="page" dat a-page="15">p. 15</span></a></li><li id="popup_section_link_8"><a class="section _link" data-section="8" href="http://www.scribd.com/doc/52270399/8/Unwinding"><s pan class="name">Unwinding</span><span class="page" data-page="16">p. 16</span>< /a></li><li id="popup_section_link_9"><a class="section_link" data-section="9" h ref="http://www.scribd.com/doc/52270399/9/Unhandled-Exceptions"><span class="nam e">Unhandled Exceptions</span><span class="page" data-page="17">p. 17</span></a> </li><li id="popup_section_link_10"><a class="section_link" data-section="10" hr ef="http://www.scribd.com/doc/52270399/10/Into-the-Inferno"><span class="name">I nto the Inferno</span><span class="page" data-page="19">p. 19</span></a></li><li id="popup_section_link_11"><a class="section_link" data-section="11" href="http ://www.scribd.com/doc/52270399/11/Conclusion"><span class="name">Conclusion</spa n><span class="page" data-page="20">p. 20</span></a></li><li id="popup_section_l ink_12"><a class="section_link" data-section="12" href="http://www.scribd.com/do c/52270399/12/Figure-1-CONTEXT-Structure"><span class="name">Figure 1 CONTEXT Structure</span><span class="page" data-page="20">p. 20</span></a></li><li id="p opup_section_link_13"><a class="section_link" data-section="13" href="http://www .scribd.com/doc/52270399/13/Figure-3-MYSEH-CPP"><span class="name">Figure 3 MY SEH.CPP</span><span class="page" data-page="21">p. 21</span></a></li><li id="pop up_section_link_14"><a class="section_link" data-section="14" href="http://www.s cribd.com/doc/52270399/14/Figure-5-MYSEH2-CPP"><span class="name">Figure 5 MYS

EH2.CPP</span><span class="page" data-page="22">p. 22</span></a></li><li id="pop up_section_link_15"><a class="section_link" data-section="15" href="http://www.s cribd.com/doc/52270399/15/Figure-7-BaseProcessStart-Pseudocode"><span class="nam e">Figure 7 BaseProcessStart Pseudocode</span><span class="page" data-page="24 ">p. 24</span></a></li><li id="popup_section_link_16"><a class="section_link" da ta-section="16" href="http://www.scribd.com/doc/52270399/16/Figure-9-except-hand ler3-Pseudocode"><span class="name">Figure 9 __except_handler3 Pseudocode</spa n><span class="page" data-page="24">p. 24</span></a></li><li id="popup_section_l ink_17"><a class="section_link" data-section="17" href="http://www.scribd.com/do c/52270399/17/Figure-10-ShowSEHFrames-CPP"><span class="name">Figure 10 ShowSE HFrames.CPP</span><span class="page" data-page="27">p. 27</span></a></li><li id= "popup_section_link_18"><a class="section_link" data-section="18" href="http://w ww.scribd.com/doc/52270399/18/Figure-12-RtlUnwind-Pseudocode"><span class="name" >Figure 12 RtlUnwind Pseudocode</span><span class="page" data-page="30">p. 30< /span></a></li><li id="popup_section_link_19"><a class="section_link" data-secti on="19" href="http://www.scribd.com/doc/52270399/19/Figure-13-UnHandledException Filter-Pseudocode"><span class="name">Figure 13 UnHandledExceptionFilter Pseud ocode</span><span class="page" data-page="33">p. 33</span></a></li><li id="popup _section_link_20"><a class="section_link" data-section="20" href="http://www.scr ibd.com/doc/52270399/20/Figure-14-KiUserExceptionDispatcher-Pseudocode"><span cl ass="name">Figure 14 KiUserExceptionDispatcher Pseudocode</span><span class="p age" data-page="37">p. 37</span></a></li><li id="popup_section_link_21"><a class ="section_link" data-section="21" href="http://www.scribd.com/doc/52270399/21/Fi gure-15-Who-Calls-Who-in-SEH"><span class="name">Figure 15 Who Calls Who in SE H</span><span class="page" data-page="40">p. 40</span></a></li></ul></div></div> <div class="b_tl"></div><div class="b_tr"></div><div class="b_br"></div><div cla ss="b_bl"></div><div class="b_t"></div><div class="b_r"></div><div class="b_b">< /div><div class="b_l"></div></div></div><div class="tail"></div></div></div></di v><div class="section zoom"><div class="tooltip_wrapper" id="toolbar_zoom_out_to oltip_wrapper"><div class="tooltip" id="toolbar_zoom_out_tooltip" style="display : none;"><span class="inner" style="font-size: 11px; color: #ffffff;"><nobr>&nbs p;</nobr></span><div class="tooltip_tail"></div></div><a class="ctl_button zoom_ out" id="toolbar_zoom_out" title="Zoom Out"></a></div><div class="tooltip_wrappe r" id="toolbar_zoom_in_tooltip_wrapper"><div class="tooltip" id="toolbar_zoom_in _tooltip" style="display: none;"><span class="inner" style="font-size: 11px; col or: #ffffff;"><nobr>&nbsp;</nobr></span><div class="tooltip_tail"></div></div><a class="ctl_button zoom_in" id="toolbar_zoom_in" title="Zoom In"></a></div><div class="ctl_button zoom_out_disabled" style="display:none" title="Zoom Out Disabl ed"></div><div class="ctl_button zoom_in_disabled" style="display:none" title="Z oom In Disabled"></div><div class="tooltip_wrapper" id="toolbar_enter_fullscreen _tooltip_wrapper"><div class="tooltip" id="toolbar_enter_fullscreen_tooltip" sty le="display: none;"><span class="inner" style="font-size: 11px; color: #ffffff;" ><nobr>&nbsp;</nobr></span><div class="tooltip_tail"></div></div><a class="ctl_b utton fullscreen" id="toolbar_enter_fullscreen" title="Fullscreen"></a></div><di v class="tooltip_wrapper" id="toolbar_exit_fullscreen_tooltip_wrapper"><div clas s="tooltip" id="toolbar_exit_fullscreen_tooltip" style="display: none;"><span cl ass="inner" style="font-size: 11px; color: #ffffff;"><nobr>&nbsp;</nobr></span>< div class="tooltip_tail"></div></div><a class="ctl_button exit_fullscreen" id="t oolbar_exit_fullscreen" style="display:none" title="Exit Fullscreen"></a></div>< /div><div class="section view_mode"><div style="position: relative;"><div class= "tooltip_wrapper" id="viewmode_selector_tooltip_wrapper"><div class="tooltip" id ="viewmode_selector_tooltip" style="display: none;"><span class="inner" style="f ont-size: 11px; color: #ffffff;"><nobr>&nbsp;</nobr></span><div class="tooltip_t ail"></div></div><a class="toggle_viewmode_popup scroll" id="viewmode_selector" title="Select View Mode"></a></div><div id="viewmode_popup" style="display: none ;"><div class="options"><h4>View Mode</h4><a class="option slideshow" id="slides how">Slideshow</a><a class="option scroll" id="scroll">Scroll</a></div><div clas s="tail"></div></div></div></div><div class="section search"><div class="autogen _class_views_documents_fourgen_search" id="autogen_id_962000659"><form autocompl ete="off" class="doc_search" id="doc_search"><span class="search_submit_span"><a

class="search_submit" title="Document Search" value=""> </a></span><input class ="query" name="query" type="text" /><span class="pad"><span class="results_selec tion" style="display:none;"><a class="previous" rel="nofollow"> </a><a class="ne xt" rel="nofollow"> </a></span></span><span class="clear_query_span"><a class="c lear_query"> </a></span></form><div class="popup" id="search_results_popup" styl e="display: none;"><div class="content_wrapper_wrapper"><div class="content_wrap per"><div class="content clearfix"><div id="search_results_contaner"><div class= "header clearfix"><span class="search_summary"></span><span class="controls"><sp an class="results_selection" style="display:none;"><span class="result_selection _info"></span><a class="previous" rel="nofollow"> </a><a class="next" rel="nofol low"> </a></span><a class="close_button" rel="nofollow"></a></span><div class="q uery_history clearfix" style="display:none"></div></div><div class="results"></d iv></div></div><div class="b_tl"></div><div class="b_tr"></div><div class="b_br" ></div><div class="b_bl"></div><div class="b_t"></div><div class="b_r"></div><di v class="b_b"></div><div class="b_l"></div></div></div><div class="tail"></div>< /div></div></div></div><div class="social_icon_section social"><div class="toolt ip_wrapper" id="toolbar_readcast_tooltip_wrapper"><div class="tooltip" id="toolb ar_readcast_tooltip" style="display: none;"><span class="inner" style="font-size : 11px; color: #ffffff;"><nobr>&nbsp;</nobr></span><div class="tooltip_tail"></d iv></div><a class="ctl_button readcast " id="toolbar_readcast" title="Readcast"> </a></div><div class="tooltip_wrapper" id="toolbar_comment_tooltip_wrapper"><div class="tooltip" id="toolbar_comment_tooltip" style="display: none;"><span class ="inner" style="font-size: 11px; color: #ffffff;"><nobr>&nbsp;</nobr></span><div class="tooltip_tail"></div></div><a class="ctl_button comment " id="toolbar_com ment" title="Add a Comment"></a></div><div class="tooltip_wrapper" id="toolbar_e mbed_tooltip_wrapper"><div class="tooltip" id="toolbar_embed_tooltip" style="dis play: none;"><span class="inner" style="font-size: 11px; color: #ffffff;"><nobr> &nbsp;</nobr></span><div class="tooltip_tail"></div></div><a class="ctl_button e mbed" id="toolbar_embed" title="Embed &amp; Share"></a></div><div class="autogen _class_views_documents_toolbar_popups_readcast_popup" id="autogen_id_962007534"> <div class="popup" id="social_readcast_popup" style="display: none;"><div class= "content_wrapper_wrapper"><div class="content_wrapper"><div class="content clear fix"><div class="autogen_class_views_shared_sharing_dialog" id="autogen_id_96200 6130"><div class="readcast_popup " id="readcast_popup_outer" style="display: no ne;"><div id="arrow"><img src="/images/readcast/triangle_8x16.png" /></div><div id="readcast_popup"><a class="close_button" href="#"></a><img alt="Readcast" src ="/images/readcast/readcast_logo_black_108x23.png" /><div id="readcast_status">< /div><div id="readcast_content"><div class="controls first_time" id="control">< div id="intro_text">Reading should be social! Post a message on your social netw orks to let others know what you're reading. Select the sites below and start sh aring.</div><div class="content_box clearfix"><div class="pref_item network" id= "scribd_pref"><div class="icon_scribd_25x25"></div><div class="network_input" st yle="display: none;"><input checked="checked" id="options_event_settings_reading _scribd" name="options[event_settings][reading][scribd]" type="checkbox" value=" on" /><img alt="Check_27x27" class="check" src="http://s6.scribdassets.com/image s/readcast/check_27x27.png?1320178242" style="display: none;" /><a class="send" style="display: none;"><img alt="Transparent" src="http://s7.scribdassets.com/im ages/buttons/transparent.gif?1320178242" /></a></div></div><div class="pref_item network" id="facebook_pref"><div class="icon_fb_25x25"></div><div class="networ k_input" style="display: none;"><input id="options_event_settings_reading_facebo ok" name="options[event_settings][reading][facebook]" style="display: none;" typ e="checkbox" value="on" /><img alt="Check_27x27" class="check" src="http://s6.sc ribdassets.com/images/readcast/check_27x27.png?1320178242" style="display: none; " /><a class="send" style="display: none;"><img alt="Transparent" src="http://s7 .scribdassets.com/images/buttons/transparent.gif?1320178242" /></a><a class="lin k_account facebook_link_account" href="#">Link account</a></div></div><div class ="pref_item network" id="twitter_pref"><div class="icon_twitter_25x25"></div><di v class="network_input" style="display: none;"><input id="options_event_settings _reading_twitter" name="options[event_settings][reading][twitter]" style="displa y: none;" type="checkbox" value="on" /><img alt="Check_27x27" class="check" src=

"http://s6.scribdassets.com/images/readcast/check_27x27.png?1320178242" style="d isplay: none;" /><a class="send" style="display: none;"><img alt="Transparent" s rc="http://s7.scribdassets.com/images/buttons/transparent.gif?1320178242" /></a> <a class="link_account twitter_link_account" href="#">Link account</a></div></di v><div class="pref_item last"><a class="readcast_now_button" href="#" onclick="j avascript: $rat('analytics.search.document.readcast', {})" title="Readcast this Document">Readcast this Document<img alt="Transparent" src="http://s7.scribdasse ts.com/images/buttons/transparent.gif?1320178242" /></a><p class="readcast_compl ete readcast_begin" style="display: none;">Readcast Complete!</p><p class="send_ to_readcast readcast_begin" style="display: none;">Click 'send' to Readcast!</p> <a class="edit_preferences clearfix" href="#">edit preferences</a></div></div></ div></div><div id="readcast_preferences" style="display: none;"><div id="prefs_c ontent"><div class="controls first_time" id="preferences"><div class="prefs_for _next_time"><strong>Set your preferences for next time...</strong><span>Choose ' auto' to readcast without being prompted.</span></div><form action="/sharing_pre ference" id="sharing_prefs" method="put"><div class="error"></div><div class="sh are_prefs clearfix"><div class="header_buttons clearfix"><a class="control_butto n on_button" href="#" id="header_button_on"><img src="/images/buttons/transparen t.gif" /></a><a class="control_button ask_button" href="#" id="header_button_ask "><img src="/images/buttons/transparent.gif" /></a></div><div class="pref_contai ner clearfix "><div class="site_icon"><div class="icon_scribd_25x25"></div></div ><div class="description"><span class="scribd_username"></span><span>asdf112233z x</span></div><div class="sharing_option "><input class="on" id="options_event_s ettings_reading_scribd_on" name="options[event_settings][reading][scribd]" type= "radio" value="on" /></div><div class="sharing_option far_right"><input class="a sk" id="options_event_settings_reading_scribd_ask" name="options[event_settings] [reading][scribd]" type="radio" value="ask" /></div></div><div class="pref_conta iner clearfix "><div class="site_icon"><div class="icon_fb_25x25"></div></div><d iv class="description"><span class="facebook_username"></span><a class="link_acc ount facebook_link_account" href="#">Link account</a></div><div class="sharing_o ption "><input class="on" id="options_event_settings_reading_facebook_on" name=" options[event_settings][reading][facebook]" type="radio" value="on" /></div><div class="sharing_option far_right"><input class="ask" id="options_event_settings_ reading_facebook_ask" name="options[event_settings][reading][facebook]" type="ra dio" value="ask" /></div></div><div class="pref_container clearfix last_pref_con tainer"><div class="site_icon"><div class="icon_twitter_25x25"></div></div><div class="description"><span class="twitter_username"></span><a class="link_account twitter_link_account" href="#">Link account</a></div><div class="sharing_option "><input class="on" id="options_event_settings_reading_twitter_on" name="option s[event_settings][reading][twitter]" type="radio" value="on" /></div><div class= "sharing_option far_right"><input class="ask" id="options_event_settings_reading _twitter_ask" name="options[event_settings][reading][twitter]" type="radio" valu e="ask" /></div></div></div><div class="preferences clearfix"><a class="advanced _preferences" href="http://www.scribd.com/account/edit#sharing">Advanced</a><a h ref="#" id="save_changes_button"><input src="http://s7.scribdassets.com/images/b uttons/transparent.gif?1320178242" type="image" /></a><img class="spinner" src=" http://s7.scribdassets.com/images/spinner_mac_transparent_blue.gif?1320178242" s tyle="display:none" /><a class="cancel_changes edit_preferences" href="#" id="ca ncel_changes">Cancel</a></div></form></div></div></div></div></div></div><div></ div></div><div class="b_tl"></div><div class="b_tr"></div><div class="b_br"></di v><div class="b_bl"></div><div class="b_t"></div><div class="b_r"></div><div cla ss="b_b"></div><div class="b_l"></div></div></div><div class="tail"></div></div> </div><div class="popup" id="comment_popup" style="display: none;"><div class="c ontent_wrapper_wrapper"><div class="content_wrapper"><div class="content clearfi x"><div class="autogen_class_views_documents_fourgen_comment_form" id="autogen_i d_962005987"><form action="http://www.scribd.com/documents/52270399/comments" cl ass="form clearfix comment_form" id="document_comment_form" method="post"><div s tyle="margin:0;padding:0"><input name="authenticity_token" type="hidden" value=" 212c27c7903f706e2aecfc0ba6824434c91ebe8e" /></div><a class="close_button" href=" #"></a><h3 class="first">Add a Comment</h3><textarea cols="40" id="comment_input

" name="event_status_base[text]" rows="20"></textarea><button class="standard_su bmit standard_submit_dkgry" id="submit_document_comment_button" type="submit"><s pan class="inner">Submit</span></button><span class="share_confirmations"><div c lass="autogen_class_views_shared_sharing_scribble_readcast_confirmations autogen _class_views_shared_sharing_readcast_confirmations"><span class="confirm_checkbo xes" style="display: block; float: left;"></span></div></span><span class="count ">Characters: <span class="number">...</span></span><div id="document_comment_er rors"></div><input class="hidden" id="current_comment_page_field" name="current_ comment_page" type="hidden" value="1" /><input id="errors_container" name="error s_container" type="hidden" value="document_comment_errors" /></form></div></div> <div class="b_tl"></div><div class="b_tr"></div><div class="b_br"></div><div cla ss="b_bl"></div><div class="b_t"></div><div class="b_r"></div><div class="b_b">< /div><div class="b_l"></div></div></div><div class="tail"></div></div><div class ="popup" id="embed_popup" style="display: none;"><div class="content_wrapper_wra pper"><div class="content_wrapper"><div class="content clearfix"><div class="aut ogen_class_views_documents_fourgen_share_form" id="autogen_id_962011539"><div cl ass="share_form"><a class="close_button" href="#"></a><div id="toolbar_exposed_s hare_panel"><h3>Share &amp; Embed</h3><div class="share_button_container"><a cla ss="fb_btn " href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.scribd. com%2Fdoc%2F52270399%2FA-Crash-Course-on-the-Depths-of-Win32%23source%3Afacebook " rel="nofollow"></a><a class="twtr_btn " href="http://twitter.com/home?source=s cribd.com&amp;status=Reading%20%22A%20Crash%20Course%20on%20the%20Depths%20of%20 Win32%22%20on%20Scribd%20http%3A%2F%2Fwww.scribd.com%2Fdoc%2F52270399%20%23Readc ast" rel="nofollow"></a><a class="bz_btn " href="http://www.google.com/buzz/post ?url=http%3A%2F%2Fwww.scribd.com%2Fdoc%2F52270399%2FA-Crash-Course-on-the-Depths -of-Win32&amp;message=" rel="nofollow"></a><div class="more_share_options"><a cl ass="pseudoLink embed_btn" href="#"></a></div></div></div></div></div></div><div class="b_tl"></div><div class="b_tr"></div><div class="b_br"></div><div class=" b_bl"></div><div class="b_t"></div><div class="b_r"></div><div class="b_b"></div ><div class="b_l"></div></div></div><div class="tail"></div></div></div><div cla ss="social_icon_section consume"><div class="tooltip_wrapper" id="add_to_collect ions_tooltip_wrapper"><div class="tooltip" id="add_to_collections_tooltip" style ="display: none;"><span class="inner" style="font-size: 11px; color: #ffffff;">< nobr>&nbsp;</nobr></span><div class="tooltip_tail"></div></div><a class="ctl_but ton collections login_required" id="add_to_collections" title="Add to Collection s"></a></div><a class="ctl_button download">Download this Document for Free</a>< /div><div class="social_icon_section auto_hiding"><div class="tooltip_wrapper" i d="hide_switch_tooltip_wrapper"><div class="tooltip" id="hide_switch_tooltip" st yle="display: none;"><span class="inner" style="font-size: 11px; color: #ffffff; "><nobr>&nbsp;</nobr></span><div class="tooltip_tail"></div></div><a class="off" href="#" id="hide_switch" title="Auto-hide: on"></a></div></div></div></div><di v class="base_layout" id="view_container"><div id="flashes_placeholder" style="d isplay:none"></div><div class="notice_top" id="flash_notice" style="display:none "></div><style type="text/css"> * html div#toolbar { position: absolute; bottom: auto; left: expression((document.documentElement.clientWidth - 1010) / 2 + 'px' ); top: expression((document.documentElement.clientHeight + (x=document .documentElement.scrollTop)) - 46 + 'px' ); } .autogen_class_views_documents_fourgen_toolbar > div#toolbar { margin-left: -505px; left: 50%; position: fixed; bottom: 0px; } * html div#exit_fs_button { position: absolute;

bottom: auto; right: 0px; top: 0px; } .autogen_class_views_documents_fourgen_exit_full_screen_button > div#e xit_fs_button { right: 0px; position: fixed; top: 0px; } </style><script type="text/javascript"> var analytics = new Analytics() ; var seo_query = null, seo_keywords = null; if (analytics.isSearchEngineVisitor()) { seo_query = analytics.getSearchEngineQuery(); seo_keywords = analytics.getSearchEngineKeywords(); } if (seo_query && $('disable_highlighting')) { $('query_highlighting').innerHTML = seo_query.replace(/</g, '&lt;' ).replace(/>/g, '&gt;'); $('disable_highlighting').show(); $('ipaper_highlighting_box').show(); } </script><div id="view_main_bar_wrapper"><div id="view_header"><div id="flashes_ placeholder" style="display:none"></div><div class="autogen_class_views_document s_ads_leaderboard" id="autogen_id_962010807"><div id="leaderboard_ad_main"><div id="leaderboard_ad_gam"><div id="Doc_Top_Leaderboard_ATF_728x90"></div><script t ype="text/javascript">Scribd.Ads.addUnit('Doc_Top_Leaderboard_ATF_728x90');</scr ipt></div></div></div></div><div id="view_mid_section"><div class="new_view_main " id="view_main"><div id="viewer"><div class="notranslate" id="viewer_document"> <div class="autogen_class_views_documents_fourgen_hot_spots" id="autogen_id_9620 09243"><div class="hotspot" id="slideshow_right_hotspot" style="display:none"></ div><div class="hotspot" id="slideshow_left_hotspot" style="display:none"></div> </div><span class="notranslate"><div id='font_preload_bed' style='position:absol ute; left: 0; top:0; max-width: 100%; visibility: hidden; overflow: hidden'> </d iv> <script type='text/javascript'> docManager.setupTestElements(); </script> <div class="outer_page_container">

<div class="outer_page only_ie6_border" id="outer_page_1" style="width:902px; height:1276px; "> <div class="newpage" id="page1" style="width: 902px; height:1276px"> <div class=text_layer style="z-index:2"><div class=ie_fix> &nbsp; <div class="ff4" style="font-size:79px"> <span class=a style="left:4200px;top:333px">1</span></div> <div class="ff3" style="font-size:167px"> <span class=a style="left:272px;top:728px;word-spacing:-1px">A Crash Course on t he Depths of</span><span class=a style="left:272px;top:1137px">Win32 Structured E xception Handling</span></div> <div class="ff3" style="font-size:56px"> <span class=a style="left:4173px;top:1227px"></span></div> <div class="ff4" style="font-size:95px">

<span class=a style="left:835px;top:1520px;word-spacing:57px">At its heart, Win3 2 structured exception handling is an operating</span><span class=a style="left: 653px;top:1657px;word-spacing:6px">system-provided service. All the docs you're likely to find about SEH describe one</span><span class=a style="left:653px;top: 1793px;word-spacing:32px">particular com-piler's runtime library wrapping around the operating system</span><span class=a style="left:653px;top:1930px;word-spac ing:-2px">implementation. I'll strip SEH to its most fundamental concepts.</span ><span class=a style="left:818px;top:2083px;word-spacing:-5px">Matt Pietrek</spa n></div> <div class="ff1" style="font-size:95px"> <span class=a style="left:835px;top:2237px;word-spacing:1px;letter-spacing:2px;c olor:#000000;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";f ilter: alpha(opacity=50);opacity: 0.50">This article assumes you're familiar wit h C++, Win32</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:835px;top:2373px;word-spacing:-3px">Code for this arti cle: <span class=w6></span>Exception.exe (33KB)</span><span class=a style="left: 835px;top:2509px;word-spacing:5px">Matt Pietrek is the author of Windows 95 Syst em Programming Secrets (IDG</span><span class=a style="left:653px;top:2646px;wor d-spacing:21px">Books, 1995). He works at NuMega Technologies Inc., and can be r eached at</span><span class=a style="left:653px;top:2782px">mpietrek@tiac.com.</ span><span class=a style="left:454px;top:3072px;word-spacing:15px">Of all the fa ciliti</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1130px;top:3068px">es</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1230px;top:3113px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1280px;top:3068px">p</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1330px;top:3072px;word-spacing:18px;letter-spacing:-1p x">rovided by Win32</span></div> <div class="ff4" style="font-size:56px"> <span class=a style="left:2043px;top:3062px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:2123px;top:3072px;word-spacing:14px">operating systems , perhaps the most widely used but</span><span class=a style="left:272px;top:320 8px;word-spacing:22px">underdocumented is structured exception handling (SEH). W hen you think of Win32 structured</span><span class=a style="left:272px;top:3344 px;word-spacing:10px">exception handling, you probably think of terms like</span ></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:2417px;top:3341px">_try</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:2617px;top:3344px">,</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:2675px;top:3341px">_finally</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3075px;top:3344px;word-spacing:15px;letter-spacing:-1p x">, and</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3312px;top:3341px">_except</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3661px;top:3344px;word-spacing:11px">. You can find</s pan><span class=a style="left:272px;top:3481px;word-spacing:1px">good descriptio ns of SEH in just about any competent Win32 book (even the remedial ones). Even the</span><span class=a style="left:272px;top:3617px;word-spacing:27px">Win32 SD K has a fairly complete overview of using structured exception handling with</sp an></div> <div class="ff0" style="font-size:92px">

<span class=a style="left:4015px;top:3613px">_try</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:4215px;top:3617px">,</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:272px;top:3750px">_finally</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:672px;top:3753px;word-spacing:-1px">, and</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:884px;top:3750px">_except</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1234px;top:3753px">.</span><span class=a style="left:4 54px;top:3890px">With all this documentation, where do I get off saying that SEH is underdocumented? At its heart,</span><span class=a style="left:272px;top:402 6px;word-spacing:7px">Win32 structured exception handling is an operating system -provided service. All the documentation</span><span class=a style="left:272px;t op:4163px;word-spacing:7px">you're likely to find about SEH describes one partic ular compiler's runtime library wrapping around</span><span class=a style="left: 272px;top:4299px;word-spacing:6px">the operating system implementation. There's nothing magical about the keywords</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3561px;top:4295px">_try</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3761px;top:4299px">,</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3815px;top:4295px">_finally</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:4215px;top:4299px">,</span><span class=a style="left:2 72px;top:4435px">or</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:380px;top:4432px">_except</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:730px;top:4435px">. Microsoft's OS and compiler groups defined these keywords and what they do. Other C++</span><span class=a style="l eft:272px;top:4572px;word-spacing:8px">compiler vendors have simply gone along w ith their semantics. While the compiler SEH layer tames</span><span class=a styl e="left:272px;top:4708px;word-spacing:1px">the nastiness of raw operating system SEH, it's had the effect of keeping the raw operating system SEH</span><span cl ass=a style="left:272px;top:4845px;word-spacing:-2px">details from public view.< /span><span class=a style="left:454px;top:4981px;word-spacing:-2px">I've receive d numerous email messages from <span class=w6></span>people who have needed to < span class=w7></span>implement compiler-level</span><span class=a style="left:27 2px;top:5117px;word-spacing:13px">SEH and couldn't find much in the way of docum entation for the operating system facilities. In a</span><span class=a style="le ft:272px;top:5254px;word-spacing:-1px">rational world, I'd be able <span class=w 6></span>to point to the runtime library sources for Visual C++ or <span class=w 6></span>Borland C++ and be</span><span class=a style="left:272px;top:5390px;wor d-spacing:11px">done with it. Alas, for some unknown reason, compiler-level SEH seems to be a big secret. Neither</span><span class=a style="left:272px;top:5527 px;word-spacing:-3px">Microsoft nor Borland provide the s<span class=w6></span>o urce code for the innermost layer of <span class=w7></span>their SEH support.</s pan><span class=a style="left:454px;top:5663px;word-spacing:5px">In this article , I'll strip structured exception handling down to its most fundamental concepts . In</span></div> </div> </div> <div class=image_layer style="z-index: 1"> <div class=ie_fix> <img class="absimg" style="left:348px;top:446px;width:87px;height:82px;clip:rect (1px 86px 20px 1px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/1-4a8a5 cc741.jpg"/>

<img class="absimg" style="left:428px;top:415px;width:87px;height:82px;clip:rect (33px 84px 49px 50px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/1-4a8 a5cc741.jpg"/> <img class="absimg" style="left:488px;top:382px;width:87px;height:82px;clip:rect (67px 82px 80px 64px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/1-4a8 a5cc741.jpg"/> <img class="absimg" style="left:519px;top:382px;width:87px;height:82px;clip:rect (65px 32px 79px 1px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/1-4a8a 5cc741.jpg"/> <img class="absimg" style="left:202px;top:414px;width:87px;height:82px;clip:rect (33px 48px 47px 1px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/1-4a8a 5cc741.jpg"/> <img class="absimg" style="left:130px;top:396px;width:87px;height:82px;clip:rect (51px 68px 65px 36px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/1-4a8 a5cc741.jpg"/> <img class="absimg" style="left:254px;top:430px;width:87px;height:82px;clip:rect (22px 61px 31px 1px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/1-4a8a 5cc741.jpg"/> <img class="absimg" style="left:284px;top:385px;width:87px;height:82px;clip:rect (67px 62px 81px 34px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/1-4a8 a5cc741.jpg"/> <img class="absimg" style="left:438px;top:398px;width:87px;height:82px;clip:rect (49px 34px 63px 1px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/1-4a8a 5cc741.jpg"/> </div> </div> </div> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 3, 1, 0, 2], "pageNum": 1}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 1-4a8a5cc741 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_1"); pageParams.innerPageElem = document.getElementById("page1"); var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_1" class='between_page_ads' style="display: block;">

<script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(1); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_2" style="width:902px; height:1276px; "> <div class="newpage" id="page2" style="width: 902px; height:1276px"> <div class=text_layer style="z-index:2"><div class=ie_fix> &nbsp; <div class="ff4" style="font-size:79px"> <span class=a style="left:424px;top:333px">2</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:272px;top:548px;word-spacing:14px">doing so, I'll sepa rate what the OS provides from what compilers provide via code generation and</s pan><span class=a style="left:272px;top:685px;word-spacing:3px">runtime library support. When I dive into the code for key operating system routines, I'll use t he Intel</span><span class=a style="left:272px;top:821px;word-spacing:15px">vers ion of Windows NT</span></div> <div class="ff4" style="font-size:59px"> <span class=a style="left:1238px;top:847px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1321px;top:821px;word-spacing:15px">4.0 as my base. Mo st of what I'll describe is equally applicable on other</span><span class=a styl e="left:272px;top:958px;word-spacing:-5px">processors, however.</span><span clas s=a style="left:454px;top:1094px;word-spacing:17px">I'm going to avoid the issue of true C++ exception handling, which uses</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3455px;top:1090px">catch()</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3846px;top:1094px;word-spacing:17px">instead of</span>< /div> <div class="ff0" style="font-size:92px"> <span class=a style="left:272px;top:1227px">_except</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:622px;top:1230px;word-spacing:14px">. Under the hood, true C++ exception handling is implemented very similarly to what I'll</span><sp an class=a style="left:272px;top:1367px;word-spacing:1px">describe here. However , true C++ exception handling has some additional complexities that would just</ span><span class=a style="left:272px;top:1503px;word-spacing:-2px">cloud the con cepts I want to cover.</span><span class=a style="left:454px;top:1640px;word-spa cing:3px">In digging through obscure .H and .INC files to piece together what co nstitutes Win32 SEH, one</span><span class=a style="left:272px;top:1776px;word-s pacing:-2px">of the best sources of <span class=w6></span>information turned out to be the IBM OS/2 header files <span class=w7></span>(particularly</span></div > <div class="ff0" style="font-size:92px"> <span class=a style="left:3734px;top:1772px">BSEXCPT.H</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:4184px;top:1776px">).</span><span class=a style="left: 272px;top:1912px;word-spacing:15px">This shouldn't be too surprising if you've b

een in this business for a while. The SEH mechanisms</span><span class=a style=" left:272px;top:2049px;word-spacing:-2px">described here were defined back when M icrosoft was still <span class=w7></span>working on OS/2. For this reason, you'l l <span class=w6></span>find</span><span class=a style="left:272px;top:2185px;wo rd-spacing:-2px">SEH under Win32 and OS/2 to be remarkably similar.</span></div> <div class="ff4" style="font-size:63px"> <span class=a style="left:2338px;top:2208px"></span></div> <div class="ff3" style="font-size:126px"> <span class=a style="left:272px;top:2381px;word-spacing:1px;letter-spacing:-1px" >SEH in the Buff</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:454px;top:2594px;word-spacing:1px">Since the details o f SEH can be overwhelming if taken all at once, I'll start out small and work my </span><span class=a style="left:272px;top:2731px;word-spacing:-1px">way up thro ugh the <span class=w6></span>layers. If you've never worked with <span class=w7 ></span>structured exception handling before, you're in</span><span class=a styl e="left:272px;top:2867px;word-spacing:9px">good shape; you have no preconceived notions. If you've used SEH before, try to clear your head of</span><span class=a style="left:272px;top:3003px;word-spacing:16px">words like</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:723px;top:3000px">_try</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:923px;top:3003px">,</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:984px;top:3000px">GetExceptionCode</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1784px;top:3003px;word-spacing:15px">, and</span></div > <div class="ff0" style="font-size:92px"> <span class=a style="left:2028px;top:3000px">EXCEPTION_EXECUTE_HANDLER</span></d iv> <div class="ff4" style="font-size:95px"> <span class=a style="left:3278px;top:3003px;word-spacing:15px">. Pretend that th is is all</span><span class=a style="left:272px;top:3140px;word-spacing:-2px">ne w to you. Take a deep breath. Are you ready? Good.</span><span class=a style="le ft:454px;top:3276px;word-spacing:2px">Imagine I told you that when a thread faul ts, the operating system gives you an opportunity to be</span><span class=a styl e="left:272px;top:3413px;word-spacing:-1px">informed of the fault. Mor</span></d iv> <div class="ff0" style="font-size:92px"> <span class=a style="left:1290px;top:3409px">e</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1340px;top:3454px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1390px;top:3409px">sp</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1490px;top:3413px;word-spacing:-1px">ecifically, when a thread faults, the operating system calls a <span class=w6></span>user-defined </span><span class=a style="left:272px;top:3549px;word-spacing:3px">callback fun ction. This callback function can do pretty much whatever it wants. For instance , it might</span><span class=a style="left:272px;top:3685px">fix whatever caused the fault, or it might play a Beavis and Butt-head .WAV file. Regardless of wha t the</span><span class=a style="left:272px;top:3822px;word-spacing:5px">callbac k function does, its last act is to return a value that tells the system what to do next. (This isn't</span><span class=a style="left:272px;top:3958px;word-spac ing:-3px">strictly true, but it's close <span class=w6></span>enough for now.)</ span><span class=a style="left:454px;top:4094px;word-spacing:13px">Given that th e system calls you back when your code makes a mess, what should the callback</s pan><span class=a style="left:272px;top:4231px;word-spacing:17px">function look like? In other words, what sort of information would you want to know about the<

/span><span class=a style="left:272px;top:4367px;word-spacing:17px">exception? I t really doesn't matter because Win32 has made up your mind for you. An exceptio n</span><span class=a style="left:272px;top:4504px;word-spacing:-2px">callback f unction looks like this:</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:504px;top:4660px">EXCEPTION_DISPOSITION</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1554px;top:4705px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:454px;top:4797px">__cdecl</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:804px;top:4842px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:854px;top:4797px">_except_handler(</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1654px;top:4842px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:654px;top:4933px">struct</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:954px;top:4978px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1004px;top:4933px">_EXCEPTION_RECORD</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1854px;top:4978px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1904px;top:4933px">*ExceptionRecord,</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:2755px;top:4978px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:654px;top:5069px">void</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:854px;top:5114px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:904px;top:5069px">*</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:954px;top:5114px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1004px;top:5069px">EstablisherFrame,</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1854px;top:5114px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:654px;top:5206px">struct</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:954px;top:5251px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1004px;top:5206px">_CONTEXT</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1404px;top:5251px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1454px;top:5206px">*ContextRecord,</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:2204px;top:5251px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:654px;top:5342px">void</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:854px;top:5387px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:904px;top:5342px">*</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:954px;top:5387px"></span></div>

<div class="ff0" style="font-size:92px"> <span class=a style="left:1004px;top:5342px">DispatcherContext</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1854px;top:5387px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:654px;top:5479px">);</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:754px;top:5524px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:454px;top:5640px;word-spacing:27px">This prototype, wh ich comes from the standard Win32 header file</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3287px;top:5636px">EXCPT.H</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3637px;top:5640px;word-spacing:28px">, looks a little< /span><span class=a style="left:272px;top:5777px;word-spacing:8px">overwhelming at first. If you take it slowly, it's really not so bad. For starters, ignore th e return type</span></div> </div> </div> </div> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 3, 2], "pageNum": 2}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 2-d6f4fecaa1 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_2"); pageParams.innerPageElem = document.getElementById("page2"); var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_2" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(2); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_3" style="width:902px; height:1276px; "> <div class="newpage" id="page3" style="width: 902px; height:1276px"> <div class=text_layer style="z-index:2"><div class=ie_fix> &nbsp; <div class="ff4" style="font-size:79px"> <span class=a style="left:4200px;top:333px">3</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:272px;top:543px">(</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:303px;top:539px">EXCEPTION_DISPOSITION</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1353px;top:543px;word-spacing:18px">). What you basica lly have is a function called</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3294px;top:539px">_except_handler</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:4086px;top:543px">that</span><span class=a style="left :272px;top:679px;word-spacing:-3px">takes four parameters.</span><span class=a s tyle="left:454px;top:816px">The first parameter to an</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1436px;top:812px">_except_handler</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:2211px;top:816px;word-spacing:1px">callback is a point er to an</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3225px;top:812px">EXCEPTION_RECORD</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:4025px;top:816px;word-spacing:1px">. This</span><span class=a style="left:272px;top:952px;word-spacing:-2px">structure is defined in</ span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1130px;top:948px">WINNT.H</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1479px;top:952px;word-spacing:-1px">, shown below:</sp an></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:504px;top:1109px">typedef</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:854px;top:1154px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:904px;top:1109px">struct</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1204px;top:1154px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1254px;top:1109px">_EXCEPTION_RECORD</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:2104px;top:1154px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:2154px;top:1109px">{</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:2204px;top:1154px"></span></div>

<div class="ff0" style="font-size:92px"> <span class=a style="left:454px;top:1245px">DWORD</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:704px;top:1290px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:754px;top:1245px">ExceptionCode;</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1454px;top:1290px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:454px;top:1382px">DWORD</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:704px;top:1426px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:754px;top:1382px">ExceptionFlags;</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1504px;top:1426px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:454px;top:1518px">struct</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:754px;top:1563px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:804px;top:1518px">_EXCEPTION_RECORD</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1654px;top:1563px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1704px;top:1518px">*ExceptionRecord;</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:2554px;top:1563px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:454px;top:1654px">PVOID</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:704px;top:1699px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:754px;top:1654px">ExceptionAddress;</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1604px;top:1699px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:454px;top:1791px">DWORD</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:704px;top:1836px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:754px;top:1791px">NumberParameters;</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1604px;top:1836px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:454px;top:1927px">DWORD</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:704px;top:1972px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:754px;top:1927px">ExceptionInformation[EXCEPTION_MAXIM UM_PARAMETERS];</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:3305px;top:1972px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:454px;top:2063px">}</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:504px;top:2108px"></span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:604px;top:2063px">EXCEPTION_RECORD;</span></div> <div class="ff2" style="font-size:28px">

<span class=a style="left:1454px;top:2108px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:454px;top:2373px">The</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:625px;top:2369px">ExceptionCode</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1298px;top:2373px;word-spacing:-2px">parameter is the number that the <span class=w6></span>operating system assigned to the exception .</span><span class=a style="left:272px;top:2509px;word-spacing:15px">You can se e a list of various exception codes in</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:2238px;top:2505px">WINNT.H</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:2628px;top:2509px;word-spacing:15px">by searching for #defines that start with</span><span class=a style="left:272px;top:2646px">"</sp an></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:310px;top:2642px">STATUS_</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:661px;top:2646px;word-spacing:56px">". For example, th e code for the all-too-familiar</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:2943px;top:2642px">STATUS_ACCESS_VIOLATION</span></div > <div class="ff2" style="font-size:28px"> <span class=a style="left:4093px;top:2687px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:4179px;top:2646px">is</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:272px;top:2778px">0xC0000005</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:772px;top:2782px;word-spacing:-1px">. A more complete set of exception codes can be found in</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:2989px;top:2778px">NTSTATUS.H</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3512px;top:2782px;word-spacing:-2px">from the Windows< /span><span class=a style="left:272px;top:2918px;word-spacing:2px">NT DDK. The f ourth element in the</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1707px;top:2915px">EXCEPTION_RECORD</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:2507px;top:2959px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:2557px;top:2918px;word-spacing:1px">structure is the a ddress where the exception</span><span class=a style="left:272px;top:3055px;word -spacing:-3px">occurred. The remaining</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1244px;top:3051px">EXCEPTION_RECORD</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:2043px;top:3096px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:2093px;top:3055px;word-spacing:-2px">fields can be ign ored for the moment.</span><span class=a style="left:454px;top:3191px;word-spaci ng:15px">The second parameter to the</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1655px;top:3187px">_except_handler</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:2446px;top:3191px;word-spacing:16px">function is a poi nter to an establisher frame</span><span class=a style="left:272px;top:3328px;wo

rd-spacing:-2px">structure. This is a vital parameter in SEH, <span class=w6></s pan>but for now you can ignore it.</span><span class=a style="left:454px;top:346 4px;word-spacing:5px">The third parameter to the</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1529px;top:3460px">_except_handler</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:2309px;top:3464px;word-spacing:5px">callback is a poin ter to a</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3298px;top:3460px">CONTEXT</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:3648px;top:3505px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3698px;top:3464px;word-spacing:1px">structure. The</sp an></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:272px;top:3596px">CONTEXT</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:622px;top:3641px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:672px;top:3600px;word-spacing:15px">structure is defin ed in</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1600px;top:3596px">WINNT.H</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1990px;top:3600px;word-spacing:15px">and represents th e register values of a particular thread.</span></div> <div class="ff5" style="font-size:95px"> <span class=a style="left:272px;top:3737px;word-spacing:19px;letter-spacing:2px; color:#000000;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter: alpha(opacity=50);opacity: 0.50">Figure 1</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:675px;top:3737px;word-spacing:25px">shows the fields o f a</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1597px;top:3733px">CONTEXT</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:1947px;top:3778px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:2000px;top:3737px;word-spacing:23px">structure. When u sed for SEH, the</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3494px;top:3733px">CONTEXT</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:3843px;top:3778px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3897px;top:3737px">structure</span><span class=a style ="left:272px;top:3873px;word-spacing:7px">represents the register values at the time of the exception. Incidentally, this</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3253px;top:3869px">CONTEXT</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:3603px;top:3914px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3653px;top:3873px;word-spacing:6px">structure is the</ span><span class=a style="left:272px;top:4009px;word-spacing:-2px">same structur e used with the</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1390px;top:4006px">GetThreadContext</span></div> <div class="ff4" style="font-size:95px">

<span class=a style="left:2212px;top:4009px">and</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:2379px;top:4006px">SetThreadContext</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3201px;top:4009px">APIs.</span><span class=a style="le ft:454px;top:4146px;word-spacing:-1px">The fourth and final parameter to the</sp an></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:1913px;top:4142px">_except_handler</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:2686px;top:4146px;word-spacing:-2px">callback is calle d <span class=w7></span>the DispatcherContext.</span><span class=a style="left:2 72px;top:4282px;word-spacing:-2px">It also can be ignored for the <span class=w6 ></span>moment.</span><span class=a style="left:454px;top:4419px;word-spacing:1p x">To briefly recap thus far, you have a callback function that's called when an exception occurs. The</span><span class=a style="left:272px;top:4555px;word-spa cing:2px">callback takes four parameters, three of which are pointers to structu res. Within these structures, some</span><span class=a style="left:272px;top:469 1px;word-spacing:11px">fields are important, others not so important. The key po int is that the</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:3140px;top:4688px">_except_handler</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3925px;top:4691px">callback</span><span class=a style= "left:272px;top:4828px;word-spacing:19px">function receives a wealth of informat ion, such as what type of exception occurred and where it</span><span class=a st yle="left:272px;top:4964px;word-spacing:-2px">occurred. Using this information, the exception callback needs to decide what to do.</span><span class=a style="le ft:454px;top:5101px;word-spacing:32px">While it's tempting for me to throw toget her a quickie sample program that shows the</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:272px;top:5233px">_except_handler</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1065px;top:5237px;word-spacing:18px">callback in actio n, there's still something missing. In particular, how does the</span><span clas s=a style="left:272px;top:5373px;word-spacing:1px">operating system know where t o call when a fault occurs? The answer is yet another structure called an</span> </div> <div class="ff0" style="font-size:92px"> <span class=a style="left:272px;top:5506px">EXCEPTION_REGISTRATION</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:1372px;top:5510px;word-spacing:10px">. You'll see this structure throughout this article, so don't skim past this</span><span class=a style="left:272px;top:5646px;word-spacing:13px">part. The only place I could fin d a formal definition of an</span></div> <div class="ff0" style="font-size:92px"> <span class=a style="left:2671px;top:5642px">EXCEPTION_REGISTRATION</span></div> <div class="ff2" style="font-size:28px"> <span class=a style="left:3771px;top:5687px"></span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:3821px;top:5646px;word-spacing:14px">was in the</span> </div> <div class="ff0" style="font-size:92px"> <span class=a style="left:272px;top:5779px">EXSUP.INC</span></div> <div class="ff4" style="font-size:95px"> <span class=a style="left:745px;top:5782px;word-spacing:-2px">file from the Visu al C++ runtime library sources:</span></div> </div> </div> <div class=image_layer style="z-index: 1">

<div class=ie_fix> <img class="absimg" style="left:115px;top:727px;width:53px;height:35px;clip:rect (22px 7px 34px 1px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/3-9d2e5 66cce.jpg"/> <img class="absimg" style="left:53px;top:746px;width:53px;height:35px;clip:rect( 1px 52px 20px 1px)" orig="http://html.scribd.com/48m0bl17r4wsixv/images/3-9d2e56 6cce.jpg"/> </div> </div> </div> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 5], "pageNum": 3}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 3-9d2e566cce // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_3"); pageParams.innerPageElem = document.getElementById("page3"); var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_3" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(3); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_4" style="width:902px; height:1276px; ">

<div <div <div <div <div <div <div <div

class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 5, 6], "pageNum": 4}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 4-a8b80340fc // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_4"); pageParams.contentUrl = "http://html3.scribdassets.com/48m0bl17r4wsixv /pages/4-a8b80340fc.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_4" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(4); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_5" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div>

<script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 3], "pageNum": 5}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 5-ec5ef62779 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_5"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/5-ec5ef62779.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_5" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(5); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_6" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 5], "pageNum": 6}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 6-7e967a8bc6 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_6");

pageParams.contentUrl = "http://html2.scribdassets.com/48m0bl17r4wsixv /pages/6-7e967a8bc6.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_6" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(6); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_7" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2], "pageNum": 7}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 7-e828af3f84 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_7"); pageParams.contentUrl = "http://html3.scribdassets.com/48m0bl17r4wsixv /pages/7-e828af3f84.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_7" class='between_page_ads' style="display: block;"> <script type="text/javascript">

Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(7); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_8" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 6, 5, 0, 3], "pageNum": 8}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 8-3e99d576e5 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_8"); pageParams.contentUrl = "http://html4.scribdassets.com/48m0bl17r4wsixv /pages/8-3e99d576e5.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_8" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(8); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_9" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 5], "pageNum": 9}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 9-2de535187d // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_9"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/9-2de535187d.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_9" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(9); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_10" style="width:902px; height:1276px; "> <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div>

<div class="b_b"></div> <div class="b_l"></div> </div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 6, 5, 0, 3, 2], "pageNum": 10}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 10-21eee6a0ab // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_10"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/10-21eee6a0ab.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_10" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(10); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_11" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2], "pageNum": 11}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127

.0.0.1:3128 // page.page_name : 11-1dd3eef7e5 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_11"); pageParams.contentUrl = "http://html4.scribdassets.com/48m0bl17r4wsixv /pages/11-1dd3eef7e5.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_11" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(11); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_12" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 3, 0, 2], "pageNum": 12}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 12-06b271b855 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_12"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/12-06b271b855.jsonp"; var page = docManager.addPage(pageParams); })(); </script>

<div id="between_page_ads_12" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(12); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_13" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 3], "pageNum": 13}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 13-6c24ffd959 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_13"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/13-6c24ffd959.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_13" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(13); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_14" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 5, 2], "pageNum": 14}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 14-9fd2506ad2 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_14"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/14-9fd2506ad2.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_14" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(14); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_15" style="width:902px; height:1276px; "> <div class="b_tl"></div>

<div <div <div <div <div <div <div

class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 3, 5], "pageNum": 15}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 15-52728f0c96 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_15"); pageParams.contentUrl = "http://html3.scribdassets.com/48m0bl17r4wsixv /pages/15-52728f0c96.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_15" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(15); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_16" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'>

(function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 5, 3], "pageNum": 16}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 16-06186c7f93 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_16"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/16-06186c7f93.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_16" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(16); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_17" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 5, 2, 3], "pageNum": 17}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 17-96b92e788e // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_17"); pageParams.contentUrl = "http://html2.scribdassets.com/48m0bl17r4wsixv

/pages/17-96b92e788e.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_17" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(17); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_18" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2], "pageNum": 18}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 18-c1d4b242e7 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_18"); pageParams.contentUrl = "http://html2.scribdassets.com/48m0bl17r4wsixv /pages/18-c1d4b242e7.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_18" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True');

Scribd.Ads.addBetweenPageUnit(18); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_19" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 3, 0, 5, 2], "pageNum": 19}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 19-64f48313c6 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_19"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/19-64f48313c6.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_19" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(19); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_20" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 5, 3], "pageNum": 20}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 20-b4812c155f // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_20"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/20-b4812c155f.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_20" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(20); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_21" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div>

<div class="b_l"></div> </div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0, 3], "pageNum": 21}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 21-bb5b36fc7c // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_21"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/21-bb5b36fc7c.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_21" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(21); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_22" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0, 3], "pageNum": 22}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128

// page.page_name : 22-59bc43c879 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_22"); pageParams.contentUrl = "http://html4.scribdassets.com/48m0bl17r4wsixv /pages/22-59bc43c879.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_22" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(22); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_23" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 23}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 23-725d7e1e60 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_23"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/23-725d7e1e60.jsonp"; var page = docManager.addPage(pageParams); })(); </script>

<div id="between_page_ads_23" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(23); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_24" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0, 3], "pageNum": 24}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 24-1c40496801 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_24"); pageParams.contentUrl = "http://html4.scribdassets.com/48m0bl17r4wsixv /pages/24-1c40496801.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_24" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(24); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_25" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 25}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 25-808c79ae33 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_25"); pageParams.contentUrl = "http://html2.scribdassets.com/48m0bl17r4wsixv /pages/25-808c79ae33.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_25" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(25); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_26" style="width:902px; height:1276px; "> <div class="b_tl"></div> <div class="b_tr"></div>

<div <div <div <div <div <div

class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 26}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 26-9286039294 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_26"); pageParams.contentUrl = "http://html3.scribdassets.com/48m0bl17r4wsixv /pages/26-9286039294.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_26" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(26); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_27" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() {

var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 3], "pageNum": 27}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 27-caaa103fd5 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_27"); pageParams.contentUrl = "http://html3.scribdassets.com/48m0bl17r4wsixv /pages/27-caaa103fd5.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_27" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(27); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_28" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 28}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 28-a82d942297 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_28"); pageParams.contentUrl = "http://html2.scribdassets.com/48m0bl17r4wsixv /pages/28-a82d942297.jsonp";

var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_28" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(28); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_29" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 29}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 29-bad4b972d0 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_29"); pageParams.contentUrl = "http://html2.scribdassets.com/48m0bl17r4wsixv /pages/29-bad4b972d0.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_29" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(29);

</script> </div>

<div class="outer_page only_ie6_border" id="outer_page_30" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0, 3], "pageNum": 30}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 30-7b012e43ff // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_30"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/30-7b012e43ff.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_30" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(30); </script> </div>

<div class="outer_page only_ie6_border"

id="outer_page_31" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 31}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 31-aafa2e3e7b // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_31"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/31-aafa2e3e7b.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_31" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(31); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_32" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 32}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 32-13199c3160 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_32"); pageParams.contentUrl = "http://html3.scribdassets.com/48m0bl17r4wsixv /pages/32-13199c3160.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_32" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(32); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_33" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 3], "pageNum": 33}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 33-c4d76c7ecd

// 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_33"); pageParams.contentUrl = "http://html2.scribdassets.com/48m0bl17r4wsixv /pages/33-c4d76c7ecd.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_33" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(33); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_34" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 34}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 34-2fcaee8094 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_34"); pageParams.contentUrl = "http://html4.scribdassets.com/48m0bl17r4wsixv /pages/34-2fcaee8094.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_34"

class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(34); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_35" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 35}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 35-9c6fb2401f // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_35"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/35-9c6fb2401f.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_35" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(35); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_36" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 36}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 36-fbecbd9ed1 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_36"); pageParams.contentUrl = "http://html2.scribdassets.com/48m0bl17r4wsixv /pages/36-fbecbd9ed1.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_36" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(36); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_37" style="width:902px; height:1276px; "> <div class="b_tl"></div> <div class="b_tr"></div> <div class="b_br"></div>

<div <div <div <div <div

class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 0, 2, 3], "pageNum": 37}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 37-846157af53 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_37"); pageParams.contentUrl = "http://html2.scribdassets.com/48m0bl17r4wsixv /pages/37-846157af53.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_37" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(37); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_38" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2,

0], "pageNum": 38}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 38-dedb2d2644 // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_38"); pageParams.contentUrl = "http://html1.scribdassets.com/48m0bl17r4wsixv /pages/38-dedb2d2644.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_38" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(38); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_39" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0], "pageNum": 39}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 39-da4e19bc8b // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_39"); pageParams.contentUrl = "http://html2.scribdassets.com/48m0bl17r4wsixv /pages/39-da4e19bc8b.jsonp"; var page = docManager.addPage(pageParams);

})(); </script> <div id="between_page_ads_39" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(39); </script> </div>

<div class="outer_page only_ie6_border" id="outer_page_40" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4, 2, 0, 3], "pageNum": 40}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 40-ce98052eed // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_40"); pageParams.contentUrl = "http://html4.scribdassets.com/48m0bl17r4wsixv /pages/40-ce98052eed.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_40" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(40); </script>

</div>

<div class="outer_page only_ie6_border" id="outer_page_41" style="width:902px; height:1276px; "> <div <div <div <div <div <div <div <div class="b_tl"></div> class="b_tr"></div> class="b_br"></div> class="b_bl"></div> class="b_t"></div> class="b_r"></div> class="b_b"></div> class="b_l"></div>

</div> <script type='text/javascript'> (function() { var pageParams = {"origHeight": 1276, "origWidth": 902, "fonts": [4], "p ageNum": 41}; // page.uuid : 48m0bl17r4wsixv // page.page_request.cdn_path('html') : http://127 .0.0.1:3128 // page.page_name : 41-30fc90340c // 'request_host': genserve pageParams.containerElem = document.getElementById("outer_page_41"); pageParams.contentUrl = "http://html3.scribdassets.com/48m0bl17r4wsixv /pages/41-30fc90340c.jsonp"; var page = docManager.addPage(pageParams); })(); </script> <div id="between_page_ads_41" class='between_page_ads' style="display: block;"> <script type="text/javascript"> Scribd.Ads.addAttribute('FourGen', 'True'); Scribd.Ads.addBetweenPageUnit(41); </script> </div>

<!--[if IE]> <script type='text/javascript'> window.docManagerIEAdded = true;

if (document.observe) { document.observe('dom:loaded', function () { docManager.allPagesAdded(); }); } else { window.attachEvent('onload', function () { docManager.allPagesAdded(); }); } </script> <![endif]--> <script type='text/javascript'> if (window.docManagerIEAdded != true) { docManager.allPagesAdded(); } </script> </div>

</span><div class="autogen_class_views_documents_fourgen_exit_full_screen_button " id="autogen_id_962008878"><div id="exit_fs_button" style="display:none"><a cla ss="ctl_button exit_fullscreen" id="button_exit_fullscreen" title="Exit Fullscre en"></a></div></div></div></div></div><div aptureNoHighlight="true" class="new_v iew_bar" id="view_bar"><div class="autogen_class_views_documents_language_notifi cation" id="autogen_id_962015986"><div class="autogen_class_views_language_docvi ew_notify" id="autogen_id_389911466"></div></div><div class="autogen_class_views _documents_fourgen_metadata" id="autogen_id_962014356"><div class="clearfix publ ic" id="doc_metadata"><div class="summary"><h1 class="notranslate">A Crash Cours e on the Depths of Win32</h1></div><div class="buttons clearfix"><a class="ctr_b utton download" onclick="javascript: $rat('analytics.search.document.download',{ 'title' : 'A Crash Course on the Depths of Win32'})" title="Download">Download t his Document for Free</a><a class="ctr_button print" onclick="javascript: $rat(' analytics.search.document.print',{'title' : 'A Crash Course on the Depths of Win 32'})" title="Print">Print</a><a class="ctr_button mobile login_required" title= "Mobile">Mobile</a><a class="ctr_button collections login_required" title="Colle ctions">Collections</a><a class="ctr_button report" id="flag_document_link" titl e="Report Document">Report Document</a><div id="flag_document_container" style=" display:none"> <div class="text"> <h4 class="first">Report this document?</h4> <p>Please tell us reason(s) for reporting this document</p> <form action="/user_flags/create/52270399" method="post" onsubmit="new A jax.Request('/user_flags/create/52270399', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;"><div style="margin:0;padding:

0"><input name="authenticity_token" type="hidden" value="212c27c7903f706e2aecfc0 ba6824434c91ebe8e" /></div> <input type="hidden" name="type" value="doc"> <div id="flag_select" class="form"> <p><input class="checkbox" id="flag_1" name="flag[1]" type=" checkbox" value="1" /> <label for="flag_1">Spam or junk</label></p> <p><input class="checkbox" id="flag_3" name="flag[3]" type=" checkbox" value="3" /> <label for="flag_3">Porn adult content</label></p> <p><input class="checkbox" id="flag_4" name="flag[4]" type=" checkbox" value="4" /> <label for="flag_4">Hateful or offensive</label></p> <p class="copyright">If you are the copyright owner of this docu ment and want to report it, please follow <a href="http://support.scribd.com/for ums/33563/entries/22981">these directions</a> to submit a copyright infringement notice.</p> <p><button class="standard_submit standard_submit_brn" type="sub mit"><span class="inner">Report</span></button> <a href="javascript:void(0)" cla ss="cancel">Cancel</a> </p> </div> <div id='err_msg'> </div> </form> </div> </div>

</div><div class="privacy_indicator" id="private_doc_indicator"><div class="mess age">This is a private document. <a href="/static/help?type=private", onclick="w indow.open(this.href,'new_window','height=300, width=400, scrollbars=yes');retur n false;"><div class="help_dot"></div></a> </div></div><div class="info_section closed"><h3>Info and Rating</h3><div class= "section_content clearfix" style="display: none;"><div class="stats"><div class= "row"><div class="label">Reads:</div><div class="value notranslate" id="doc_view s">1,021</div></div><div class="row"><div class="label">Uploaded:</div><div clas s="value notranslate">04/04/2011</div></div><div class="row"><div class="label"> Category:</div><div class="value"><em>Uncategorized.</em></div></div><div class= "row"><div class="label">Rated:</div><div class="value" id="rating"><span id="ra ting_52270399"></span></div></div><div class="row"><div class="label">Copyright: </div><div class="value copyright"><div>Attribution Non-commercial</div><div><a href="http://creativecommons.org/licenses/by-nc/3.0/" target="_blank"><img alt=" Attribution_noncommercial" src="http://s6.scribdassets.com/images/attribution_no ncommercial.png?1320178242" /></a></div></div></div></div><p class="description notranslate"></p></div></div><div class="user clearfix"><div style="float: right ;"><div class="follow_buttons"><a class="follow" href="#" id="follow_button_6699 6607" onclick="$('follow_button_66996607').hide(); $('unfollow_button_66996607') .show(); trackEvent('Follow', 'Follow', 'document_page - Logged, In'); new Ajax. Request('http://www.scribd.com/friends?followship%5Bpublisher_id%5D=66996607&amp ;followship%5Bsource%5D=document_page', {asynchronous:true, evalScripts:true, on Complete:function(request){}, parameters:'authenticity_token=' + encodeURICompon ent('212c27c7903f706e2aecfc0ba6824434c91ebe8e')}); return false;"></a><a class=" unfollow" href="#" id="unfollow_button_66996607" onclick="$('follow_button_66996 607').show(); $('unfollow_button_66996607').hide();; new Ajax.Request('http://ww

w.scribd.com/friends/66996607-yu-chi-huang', {asynchronous:true, evalScripts:tru e, method:'delete', onComplete:function(request){}, parameters:'authenticity_tok en=' + encodeURIComponent('212c27c7903f706e2aecfc0ba6824434c91ebe8e')}); return false;" style="display: none;"></a></div></div><div class="fbml_thumb view_page_ thumbnail thumbnail_outer"><a href="http://www.scribd.com/yuh_16" class="notrans late"><fb:profile-pic uid='1514466143' facebook-logo='false' linked='false' size ='square' width='18' height='18'></fb:profile-pic></a></div><a href="http://www. scribd.com/yuh_16" class="username notranslate">Yu Chi Huang</a></div></div></di v><div class="autogen_class_views_premium_research_accounts_promo" id="autogen_i d_962013108"></div><div class="autogen_class_views_documents_fourgen_float_butto n" id="autogen_id_962012246"><div id="float_button" style="display:none;"><div c lass="float_button_wrap"><a href="javascript:(function(){var%20url='http://www.f loat.com/read/article/';var%20scriptTag=document.createElement('scr'+'ipt');scri ptTag.setAttribute('src',url);scriptTag.setAttribute('async','true');scriptTag.s etAttribute('charset','utf-8');scriptTag.setAttribute('type','text/javascript'); var%20de=document.documentElement;try{if(!de){throw(0);}de.children[0].appendChi ld(scriptTag);}catch(e){alert('Please%20let%20the%20page%20load%20first.');}})() " class="float_button"></a><a class="float_button_close" onclick="Scribd.FloatBu tton.hideButton();"></a></div></div></div> <div class="fb_like_container"> <div class="fb_like"> <div class="autogen_class_views_shared_facebook_like_button" id="aut ogen_id_961987331"><div id="facebook_like_button" style="display:none"></div></d iv> </div> </div> <div id="rightcolumn_ad_gam" style="clear: both; margin-bottom: 15px;"><div id=" Doc_Sideboard_MediumRectangle_ATF_300x250"></div><script type="text/javascript"> Scribd.Ads.addUnit('Doc_Sideboard_MediumRectangle_ATF_300x250');</script></div>< div class="autogen_class_views_documents_fourgen_toc" id="autogen_id_961986956"> <div id="sectionlist"><span class="toc_header"><span class="sections_icon"></spa n><span class="toc_title"><h3>Sections</h3></span><span class="toc_control"><spa n class="expand_collapse"><a class="toc_show_all" href="#" onclick="if (!Scribd. TOC) $$('#sectionlist li').each(Element.show);" rel="nofollow">show all</a><a cl ass="toc_collapse" href="#" rel="nofollow" style="display:none;">collapse</a></s pan><span class="toc_prev_next"><a class="toc_prev grey" href="#" rel="nofollow" >&laquo; prev</a> <a class="toc_next " href="#" rel="nofollow">next &raquo;</a ></span></span></span><ul class="notranslate" data-page-count="3"><li class="toc _section toc_section_1 " data-first-page="2" data-section="1"><a href="http://ww w.scribd.com/doc/52270399/1/SEH-in-the-Buff" class="toc_section_link" data-first -page="2" data-section="1">SEH in the Buff</a></li><li class="toc_section toc_se ction_1 " data-first-page="5" data-section="2"><a href="http://www.scribd.com/do c/52270399/2/Moving-In-a-Little-Deeper" class="toc_section_link" data-first-page ="5" data-section="2">Moving In a Little Deeper</a></li><li class="toc_section t oc_section_1 " data-first-page="8" data-section="3"><a href="http://www.scribd.c om/doc/52270399/3/Help-Nobody-Handled-It" class="toc_section_link" data-first-pa ge="8" data-section="3">Help! Nobody Handled It!</a></li><li class="toc_section toc_section_1 " data-first-page="10" data-section="4"><a href="http://www.scribd .com/doc/52270399/4/Compiler-level-SEH" class="toc_section_link" data-first-page ="10" data-section="4">Compiler-level SEH</a></li><li class="toc_section toc_sec tion_1 " data-first-page="12" data-section="5"><a href="http://www.scribd.com/do c/52270399/5/The-Extended-Exception-Handling-Frame" class="toc_section_link" dat a-first-page="12" data-section="5">The Extended Exception Handling Frame</a></li ><li class="toc_section toc_section_1 " data-first-page="13" data-section="6"><a href="http://www.scribd.com/doc/52270399/6/-except-handler3-and-the-scopetable" class="toc_section_link" data-first-page="13" data-section="6">__except_handler 3 and the scopetable</a></li><li class="toc_section toc_section_1 " data-first-p age="15" data-section="7"><a href="http://www.scribd.com/doc/52270399/7/The-Show SEHFrames-Program" class="toc_section_link" data-first-page="15" data-section="7 ">The ShowSEHFrames Program</a></li><li class="toc_section toc_section_1 " datafirst-page="16" data-section="8"><a href="http://www.scribd.com/doc/52270399/8/U

nwinding" class="toc_section_link" data-first-page="16" data-section="8">Unwindi ng</a></li><li class="toc_section toc_section_1 " data-first-page="17" data-sect ion="9"><a href="http://www.scribd.com/doc/52270399/9/Unhandled-Exceptions" clas s="toc_section_link" data-first-page="17" data-section="9">Unhandled Exceptions< /a></li><li class="toc_section toc_section_2 not_first_page" data-first-page="19 " data-section="10"><a href="http://www.scribd.com/doc/52270399/10/Into-the-Infe rno" class="toc_section_link" data-first-page="19" data-section="10">Into the In ferno</a></li><li class="toc_section toc_section_2 not_first_page" data-first-pa ge="20" data-section="11"><a href="http://www.scribd.com/doc/52270399/11/Conclus ion" class="toc_section_link" data-first-page="20" data-section="11">Conclusion< /a></li><li class="toc_section toc_section_2 not_first_page" data-first-page="20 " data-section="12"><a href="http://www.scribd.com/doc/52270399/12/Figure-1-CONT EXT-Structure" class="toc_section_link" data-first-page="20" data-section="12">F igure 1 CONTEXT Structure</a></li><li class="toc_section toc_section_2 not_fir st_page" data-first-page="21" data-section="13"><a href="http://www.scribd.com/d oc/52270399/13/Figure-3-MYSEH-CPP" class="toc_section_link" data-first-page="21" data-section="13">Figure 3 MYSEH.CPP</a></li><li class="toc_section toc_secti on_2 not_first_page" data-first-page="22" data-section="14"><a href="http://www. scribd.com/doc/52270399/14/Figure-5-MYSEH2-CPP" class="toc_section_link" data-fi rst-page="22" data-section="14">Figure 5 MYSEH2.CPP</a></li><li class="toc_sec tion toc_section_2 not_first_page" data-first-page="24" data-section="15"><a hre f="http://www.scribd.com/doc/52270399/15/Figure-7-BaseProcessStart-Pseudocode" c lass="toc_section_link" data-first-page="24" data-section="15">Figure 7 BasePr ocessStart Pseudocode</a></li><li class="toc_section toc_section_2 not_first_pag e" data-first-page="24" data-section="16"><a href="http://www.scribd.com/doc/522 70399/16/Figure-9-except-handler3-Pseudocode" class="toc_section_link" data-firs t-page="24" data-section="16">Figure 9 __except_handler3 Pseudocode</a></li><l i class="toc_section toc_section_2 not_first_page" data-first-page="27" data-sec tion="17"><a href="http://www.scribd.com/doc/52270399/17/Figure-10-ShowSEHFrames -CPP" class="toc_section_link" data-first-page="27" data-section="17">Figure 10 ShowSEHFrames.CPP</a></li><li class="toc_section toc_section_2 not_first_page" data-first-page="30" data-section="18"><a href="http://www.scribd.com/doc/52270 399/18/Figure-12-RtlUnwind-Pseudocode" class="toc_section_link" data-first-page= "30" data-section="18">Figure 12 RtlUnwind Pseudocode</a></li><li class="toc_s ection toc_section_2 not_first_page" data-first-page="33" data-section="19"><a h ref="http://www.scribd.com/doc/52270399/19/Figure-13-UnHandledExceptionFilter-Ps eudocode" class="toc_section_link" data-first-page="33" data-section="19">Figure 13 UnHandledExceptionFilter Pseudocode</a></li><li class="toc_section toc_sec tion_3 not_first_page" data-first-page="37" data-section="20"><a href="http://ww w.scribd.com/doc/52270399/20/Figure-14-KiUserExceptionDispatcher-Pseudocode" cla ss="toc_section_link" data-first-page="37" data-section="20">Figure 14 KiUserE xceptionDispatcher Pseudocode</a></li><li class="toc_section toc_section_3 not_f irst_page" data-first-page="40" data-section="21"><a href="http://www.scribd.com /doc/52270399/21/Figure-15-Who-Calls-Who-in-SEH" class="toc_section_link" data-f irst-page="40" data-section="21">Figure 15 Who Calls Who in SEH</a></li></ul>< /div><script>$$('#sectionlist li.not_first_page').each(function(el){el.hide()}); </script></div><div id="exposed_share_panel"><h3>Share &amp; Embed</h3><div clas s="share_button_container"><a class="fb_btn " href="http://www.facebook.com/shar er.php?u=http%3A%2F%2Fwww.scribd.com%2Fdoc%2F52270399%2FA-Crash-Course-on-the-De pths-of-Win32%23source%3Afacebook" rel="nofollow"></a><a class="twtr_btn " href= "http://twitter.com/home?source=scribd.com&amp;status=Reading%20%22A%20Crash%20C ourse%20on%20the%20Depths%20of%20Win32%22%20on%20Scribd%20http%3A%2F%2Fwww.scrib d.com%2Fdoc%2F52270399%20%23Readcast" rel="nofollow"></a><a class="bz_btn " href ="http://www.google.com/buzz/post?url=http%3A%2F%2Fwww.scribd.com%2Fdoc%2F522703 99%2FA-Crash-Course-on-the-Depths-of-Win32&amp;message=" rel="nofollow"></a><div class="more_share_options"><a class="pseudoLink embed_btn" href="#"></a></div>< /div></div> <div id="other_documents"> <div id="related_docs_outer_container">

</div>

<div id="user_docs_holder"> <div id="latest_user_docs"> <h3>More from this user</h3> <div class="side_doc_list"> <div class="small_shelf autogen_id_530388082 "><div class="shelf_edg e shelf_outer_left arrows"><div class="arrow_aligner"><a class="carousel-control arrow left_arrow" rel="prev" src="#" title="Previous">Previous</a><a class="car ousel-control arrow right_arrow" rel="next" src="#" title="Next">Next</a></div>< /div><div class="shelf_container" id="autogen_id_530388082_carousel" style="widt h: 248px"><div class="carousel_content gainlayout"><ol class="document_slider">< li class="shelf_segment" style="width: 248px"><div class="shelf_document" data-t ip-bottom="A Crash Course on the Depths of Win32" style="width: 78px; margin: 0 2px"><div class="shelf_small_thumbnail_shadow gainlayout"><a class="notranslate" href="http://www.scribd.com/doc/52270399/A-Crash-Course-on-the-Depths-of-Win32" rel="nofollow"><div class="thumbnail"><img src="http://imgv2-2.scribdassets.com /img/word_document/52270399/72x93/b32d09ffea/1319060131" /><span class="no_of_pa ges notranslate">41 p.</span></div></a></div></div></li></ol></div></div><div cl ass="shelf_edge shelf_outer_right"></div><div class="clearfix"></div></div><scri pt type="text/javascript"> //<![CDATA[ Scribd['autogen_id_530388082_carousel'] = new Scribd.carousel('autogen_id_ 530388082_carousel', $$('.autogen_id_530388082 li'), $$('.autogen_id_530388082 a .arrow'), { circular: false, duration: 0.5, wheel: false, initial: $$('.autogen_id_530388082 li')[0], afterMove: function() { Scribd.carouselUtil.disableButton('autogen_id_530388082_carousel'); } }); //]]> </script> </div> </div> <!-- Served by app07 in 0.516 secs. cpu: 0.010 --> </div>

</div> <div class="autogen_class_views_documents_fourgen_readcasters" id="autogen_id_96 1985967"></div><div class="autogen_class_views_documents_fourgen_comments" id="a utogen_id_961984485"><div id="comments_section"><h3>Add a Comment</h3><div class

="add_a_comment"><form action="http://www.scribd.com/documents/52270399/comments ?context=r3" class="new_event_status_base" id="document_comment" method="post">< div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" va lue="212c27c7903f706e2aecfc0ba6824434c91ebe8e" /></div><textarea cols="40" id="s cribble_input" name="event_status_base[text]" rows="20"></textarea><div class="c ontrols"><button class="standard_submit standard_submit_dkgry" id="submit_commen t" type="submit"><span class="inner">Submit</span></button><span class="share_co nfirmations"><div class="autogen_class_views_shared_sharing_scribble_readcast_co nfirmations autogen_class_views_shared_sharing_readcast_confirmations"><span cla ss="confirm_checkboxes" style="display: block; float: left;"></span></div></span ><span class="count">Characters: <span class="number">...</span></span><div id=" document_comment_errors"></div><input id="errors_container" name="errors_contain er" type="hidden" value="document_comment_errors" /></div></form></div><div clas s="comments other"><div class="events"><div id="document_activity"></div></div>< /div></div></div><div class="autogen_class_views_documents_ads_below_sideboard" id="autogen_id_961990879"><div id="pinned_ad_container"><div id="pinned_ad"><scr ipt type="text/javascript">Scribd.Ads.addRefreshUnit('Doc_Sideboard_HalfPage_Pin ned_300x600');</script></div></div></div></div></div></div></div><div class="too lbar_lightboxes"><div><div class="lightbox " id="toolbar_download_lightbox" styl e="display:none;"><div class="content"></div><div class="footer"></div></div></d iv><div><div class="lightbox " id="toolbar_share_lightbox" style="display:none;" ><div class="content"></div><div class="footer"></div></div></div><div><div clas s="lightbox " id="toolbar_mobile_lightbox" style="display:none;"><div class="con tent"></div><div class="footer"></div></div></div><div><div class="lightbox" id= "lightbox_print" style="display: none;"><div class="content"><a class="close_but ton" href="javascript:void(0)" onclick="Scribd.Lightbox.close('lightbox_print'); "></a><h3>Print this document</h3><div class="print_block" id="high_quality_prin t"><h3>High Quality</h3><p>Open the downloaded document, and select print from t he file menu (PDF reader required).</p><button class="standard_submit standard_s ubmit_brn" type="submit"><span class="inner">Download and Print</span></button>< /div></div><div class="footer"></div></div></div><div><div class="lightbox " id= "credits_lightbox" style="display:none;"><div class="content"></div><div class=" footer"></div></div></div><div class="autogen_class_views_shared_document_collec tions_lightbox"><div class="autogen_class_views_shared_document_collections_ligh tbox" id="autogen_id_961989502"><div class="lightbox " id="lightbox_document_col lections" style="display:none;"><div class="close_button"></div><div class="cont ent"><div class="lightbox_document_collections_content clearfix"><h5>Add this do cument to your Collections</h5><div class="document_container clearfix"></div><d iv class="private" style="display: none;">This is a private document, so it may only be added to private collections.</div><div class="autogen_class_views_share d_document_collections_form" id="autogen_id_961988215"><div class="document_coll ection_form_container"><div class="clearfix"><button class="standard_submit form _header standard_submit_gry" type="submit"><span class="inner">+ Create a New Co llection</span></button><form action="/users/asdf112233zx/document_collections" class="clearfix" id="new_document_collection" method="post"><div style="margin:0 ;padding:0"><input name="authenticity_token" type="hidden" value="212c27c7903f70 6e2aecfc0ba6824434c91ebe8e" /></div><div class="error"></div><div class="name se ction"><label for="document_collection_name">Name:</label><input class="text_fie ld" id="document_collection_name" name="document_collection[name]" size="30" typ e="text" /></div><div class="detail"><div class="description section"><label for ="document_collection_description">Description:</label><textarea class="text_fie ld" cols="40" id="document_collection_description" name="document_collection[des cription]" rows="20"></textarea></div><div class="combined_privacy_type section" ><label for="document_collection_combined_privacy_type">Collection Type:</label> <select id="document_collection_combined_privacy_type" name="document_collection [combined_privacy_type]"><option value="public - locked" selected="selected">pub lic - locked</option> <option value="public - moderated">public - moderated</option> <option value="private">private</option></select></div><div class="privacy_expla nation"><b>public locked: </b>only you can add to this collection, but others ca

n view it<br /><b>public moderated: </b>others can add to this collection, but y ou approve or reject additions<br /><b>private: </b>only you can add to this col lection, and only you will be able to view it</div><div class="buttons_container section"><button class="standard_submit standard_submit_brn" onclick="javascrip t: $rat(&quot;analytics.search.document.add_to_collection&quot;, {})" type="subm it"><span class="inner">Save collection</span></button><img class="spinner" src= "http://s7.scribdassets.com/images/spinner_mac_transparent_blue.gif?1320178242" style="display:none" /><a href="#" class="cancel">Cancel</a></div></div></form>< /div></div></div><div class="manage_collection"><div class="document_collections _container"></div><img class="spinner" src="http://s6.scribdassets.com/images/sp inner_mac_white.gif?1320178242" style="display:none" /></div><div class="back" s tyle="margin: 5px">Finished? <a href="javascript:void(0)" onclick="Scribd.Lightb ox.close('lightbox_document_collections');">Back to Document</a></div></div></di v><div class="footer"></div></div></div></div></div><script type="text/javascrip t"> document.observe("dom:loaded", function() { var doc_data = {"thumbnail_url":"http://imgv2-1.scribdassets.com/i mg/word_document/52270399/54x70/825b224e70/1319060131","url":"http://www.scribd. com/doc/52270399/A-Crash-Course-on-the-Depths-of-Win32","description":"1\n\nA Cr ash Course on the Depths of Win32\u2122 Structured Exception Handling\nAt its he art, Win32 structured exception handling is an operating system-provided service . All the docs you're likely to find about SEH describe one particular com-piler 's runtime library wrapping around the operating system implementation. I'll str ip SEH to its most fundamental concepts. Matt Pietrek This article assumes you'r e familiar with C++, Win32 Code for this article: Exception.exe (33KB) Matt Piet rek is the author o","title":"A Crash Course on the Depths of Win32","page_count ":41,"author":{"url":"http://www.scribd.com/yuh_16","name":"Yu Chi Huang"},"id": 52270399}; (new Scribd.Readcast.Event.AutoShare({ doc: doc_data, auto_submit: false, service_type: 'scribd', event_type: 'read' })).start(); (new Scribd.Readcast.Event.AutoShare({ doc: doc_data, auto_submit: false, service_type: 'twitter', event_type: 'read' })).start(); (new Scribd.Readcast.Event.FacebookAutoShare({ doc: doc_data, auto_submit: false, event_type: 'read' })).start(); }); </script><script type="text/javascript">document.observe("dom:loaded", f unction(){trackEvent('FourGen','Sectionized','DocView');});document.observe("dom :loaded", function(){trackEvent('FourGen','Sectionized','DocURL');});</script> </div>

<div id="lightboxes"> </div>

<div aptureNoHighlight="true" id="footer"><div id="content"><div id="upl oad_search"><a href="/upload-document" class="upload_button" id="global_footer_u pload_button" onclick="trackEvent('upload','click','footer_navbar_docview')" tit le="Upload &amp; share documents.">Upload a Document</a> <form action="/search" autocomplete="off" class="global_search" method="get"> <input class="search_input" id="query_footer" name="query" type="text" /> <a href="#" class="search_button">Search Documents</a> </form> </div><ul id="follow_us"><li><span>Follow Us!</span></li><li><a class="scribd" h ref="/scribd" title="Subscribe to Scribd's Scribd profile">scribd.com/scribd</a> </li><li><a class="twitter" href="http://twitter.com/scribd" rel="nofollow" titl e="Follow Scribd on Twitter">twitter.com/scribd</a></li><li class="last"><a clas s="facebook" href="http://www.facebook.com/pages/Scribd/6978454082" rel="nofollo w" title="Fan Scribd on Facebook">facebook.com/scribd</a></li></ul><ul class="cl earfix" id="links"><li><a href="/about" rel="nofollow">About</a></li><li><a href ="/static/press" rel="nofollow">Press</a></li><li><a href="http://blog.scribd.co m/">Blog</a></li><li><a href="/partners" rel="nofollow">Partners</a></li><li><a href="/scribd101" rel="nofollow">Scribd 101</a></li><li><a href="/webstuff" rel= "nofollow">Web Stuff</a></li><li><a href="http://support.scribd.com" rel="nofoll ow">Support</a></li><li><a href="/faq" rel="nofollow">FAQ</a></li><li><a href="/ developers" rel="nofollow">Developers / API</a></li><li><a href="/jobs" rel="nof ollow">Jobs</a></li><li><a href="/terms" rel="nofollow">Terms</a></li><li><a hre f="/copyright" rel="nofollow">Copyright</a></li><li class="last"><a href="/priva cy" rel="nofollow">Privacy</a></li></ul><div class="autogen_class_views_layouts_ footer_language_selector autogen_class_views_shared_javascript_widget" id="autog en_id_961993099"><div class="top_row clearfix"><div class="copyright">Copyright &copy; 2011 Scribd Inc.</div><div class="language_label">Language:</div><div cla ss="language notranslate"><a href="#" onclick="trackEvent('smartling','lang_sele ctor_open');"></a></div></div><div class="language_selector SL_norewrite clearfi x" style="display:none"><div>Choose the language in which you want to experience Scribd:</div><ul class="notranslate"><li data-id="en" onclick="trackEvent('smar tling','lang_click','en');"><a href="/language?destination=http%3A%2F%2Fwww.scri bd.com%2Fdoc%2F52270399%2FA-Crash-Course-on-the-Depths-of-Win32&amp;id=en" class ="change_language" rel="nofollow">English</a></li><li data-id="es" onclick="trac kEvent('smartling','lang_click','es');"><a href="/language?destination=http%3A%2 F%2Fwww.scribd.com%2Fdoc%2F52270399%2FA-Crash-Course-on-the-Depths-of-Win32&amp; id=es" class="change_language" rel="nofollow">Espaol</a></li><li data-id="pt" onc lick="trackEvent('smartling','lang_click','pt-br');"><a href="/language?destinat ion=http%3A%2F%2Fwww.scribd.com%2Fdoc%2F52270399%2FA-Crash-Course-on-the-Depthsof-Win32&amp;id=pt" class="change_language" rel="nofollow">Portugus (Brasil)</a>< /li></ul></div></div></div></div> </div>

<script type="text/javascript"> if (typeof(_gaq) != 'undefined') { _gaq.push(function() { _gaq._createAsyncTracker('UA-443684-17', 'pageTrackerPerf'); }); _gaq.push(['pageTrackerPerf._trackPageview']); } else { console.warn('_gaq undefined'); } document.observe('dom:loaded', function() {

if (typeof(perfStart) != 'undefined') { trackPerfAnalytics(null, perfStart, new Date(), false); } }); Event.observe(window, 'load', function() { if (typeof(perfStart) != 'undefined') { trackPerfAnalytics(null, perfStart, new Date(), true); } }); </script>

<!-- Quantcast Tag --> <script type="text/javascript"> var _qevents = _qevents []; (function() { var elem = document.createElement('script'); elem.src = (document.location.protocol == "https:" ? "https://secure" : "http ://edge") + ".quantserve.com/quant.js"; elem.async = true; elem.type = "text/javascript"; var scpt = document.getElementsByTagName('script')[0]; scpt.parentNode.insertBefore(elem, scpt); })(); </script> <script type="text/javascript"> _qevents.push( { qacct:"p-13DPpb-yg8ofc"} ); </script> <noscript> <div style="display: none;"><img src="//pixel.quantserve.com/pixel/p-13DPpb-yg8o fc.gif" height="1" width="1" alt="Quantcast"/></div> </noscript> <!-- End Quantcast tag --> <!-- Begin comScore Tag --> <script> var _comscore = _comscore []; _comscore.push({ c1: "2", c2: "9304646" }); (function() { var s = document.createElement("script"), el = document.getElementsByTagName ("script")[0]; s.async = true; s.src = (document.location.protocol == "https:" ? "https://sb" : "http://b") + ".scorecardresearch.com/beacon.js"; el.parentNode.insertBefore(s, el); })(); </script> <noscript> <img src="http://b.scorecardresearch.com/p?c1=2&c2=9304646&cv=2.0&cj=1" /> </noscript> <!-- End comScore Tag --> <!-- Begin Gravity Tag --> <script type="text/javascript"> var gravityInsightsParams = {type:'content', site_guid:'6e1ea1b081dc6743bbe35377 28eca43d'}; document.write(unescape('%3Cscript src=\'http://cdn.insights.gravity.com/moth-mi n.js\' async=true type=\'text/javascript\'%3E%3C/script%3E')); </script>

<!-- End Gravity Tag -->

<script style="text/javascript"> Scribd.Facebook.scribdSessionActive = true; Scribd.Facebook.serverEnableInstantConnect = Scribd.getOption("FBAutoLoginEn abled", false); Scribd.Facebook.sessionEnableInstantConnect = true; Scribd.Facebook.requestEnableInstantConnect = true; Scribd.Facebook.beforeFacebookInitialize(); Scribd.Request = { referrer: 'http://www.scribd.com/doc/52270399/A-Crash-Course-onthe-Depths-of-Win32', controller: 'word', action: 'show' }; // This calls the initialization once Facebook libraries are loaded window.fbAsyncInit = Scribd.Facebook.initializeConnect.bind(Scribd.Facebook) ; </script> <div id="fb-root"></div>

<script>(function(){var d=document;var e=d.createElement("script");e.async=t rue;e.src="https://d1ros97qkrwjf5.cloudfront.net/21/eum/rum.js";var s=d.getEleme ntsByTagName("script")[0];s.parentNode.insertBefore(e,s);})();NREUMQ.push(["nrf2 ","beacon-1.newrelic.com","a3dc4ea499",16587,"clZeFxYOCQhTQhhSCVNcVBBLBQQQVw==", 0,536,new Date().getTime()])</script> <script type="text/javascript"> Scribd.Scrubber.num_pages = 41; (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("page_control_top"); }); })(); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("page_control_up"); }); })(); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("page_control_down"); }); })(); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("toolbar_sectionlist"); }); })();

if (Scribd.Toolbar.SectionPopup){ Scribd.Toolbar.SectionPopup.initialize(); }else{ document.observe("dom:loaded", function(){Scribd.Toolbar.SectionPopup.in itialize();}); } (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("toolbar_zoom_out"); }); })(); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("toolbar_zoom_in"); }); })(); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("toolbar_enter_fullscreen"); }); })(); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("toolbar_exit_fullscreen"); }); })(); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("viewmode_selector"); }); })(); Scribd.fourgenDocSearchUI = null; document.observe('dom:loaded', function() { if ( Scribd.getOption('FourgenSearchEnabled') && true) { var searcher = new Scribd.Fourgen.DocSearcher({ doc_id: 52270399, upload_id: 55078627, secret_password: null }); Scribd.fourgenDocSearchUI = new Scribd.Fourgen.DocSearcher.UI('#auto gen_id_962000659', searcher); } else { var search_form = $('doc_search'); search_form.disable(); /*!<sl:translate>*/ search_form.down('.query').setValue('Search is disabled...'); /*!</sl:translate>*/ } }); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("toolbar_readcast"); }); })(); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("toolbar_comment"); });

})(); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("toolbar_embed"); }); })(); if(!Scribd.Readcast) Scribd.Readcast = {}; Scribd.Readcast.sharingPrefs = {"facebook":"ask","scribd":"ask","twitter": "ask"}; Scribd.Readcast = Scribd.Readcast {}; Scribd.Readcast.Dialog = Scribd.Readcast.Dialog Scribd.Readcast.Dialog.animation = 'fourgen'; (function() { function instantiate() { new Scribd.ScribbleReadCaster({ doc: {"thumbnail_url":"http://imgv2-1.scribdassets.com/img/word_ document/52270399/54x70/825b224e70/1319060131","url":"http://www.scribd.com/doc/ 52270399/A-Crash-Course-on-the-Depths-of-Win32","description":"1\n\nA Crash Cour se on the Depths of Win32\u2122 Structured Exception Handling\nAt its heart, Win 32 structured exception handling is an operating system-provided service. All th e docs you're likely to find about SEH describe one particular com-piler's runti me library wrapping around the operating system implementation. I'll strip SEH t o its most fundamental concepts. Matt Pietrek This article assumes you're famili ar with C++, Win32 Code for this article: Exception.exe (33KB) Matt Pietrek is t he author o","title":"A Crash Course on the Depths of Win32","page_count":41,"au thor":{"url":"http://www.scribd.com/yuh_16","name":"Yu Chi Huang"},"id":52270399 }, submit_button: $$('#submit_document_comment_button').first(), confirm_checkboxes: $$('#document_comment_form .confirm_checkbox es input'), event_type : 'scribble', permissions: {"facebook":"ask","scribd":"on","twitter":"ask"}, linked_sites: [], scribble_text_field: $('comment_input'), doc_reload: null, errors_container_selector: $$('#document_comment_errors').first( ) }); $$('span.confirmation_container input').each(function(element) { ele ment.checked = false; }); Scribd.ReadCaster.observeConfirmations(); } if (Scribd.Facebook.isSessionTransitioned()) {instantiate();} document.observe('dom:loaded', instantiate); })(); Scribd.comment = new Scribd.commentManager(); Event.observe('document_comment_form', 'submit', Scribd.comment.submitCo mmentEvent.bindAsEventListener(Scribd.comment)); Scribd.scribbleComment($('comment_input')); Scribd.enforceMaxLength($("autogen_id_962005987").down('textarea'), $("a utogen_id_962005987").down('.number'), 400); {};

var closeButton = $('autogen_id_962005987').down('.close_button'); if(closeButton) closeButton.observe('click', function(e) { Scribd.Toolbar.actions.comm ent(e) }); $('toolbar_exposed_share_panel').down('.more_share_options').down('.pseudo Link').observe('click', function(e){ e.stop(); Scribd.Lightbox.remoteOpen('toolbar_share_lightbox', '/word/toolbar_shar e', Scribd.Toolbar.toolbarParams(), {close: true}); $rat('sharebox.toolbar.more_share_options'); }); $$('#toolbar_exposed_share_panel a.disabled').invoke('observe', 'click', f unction(e) { e.stop(); Scribd.Alerts.error('flashes_placeholder', "Sharing is disabled for this document."); }); var closeButton = $('autogen_id_962011539').down('.close_button'); if(closeButton) closeButton.observe('click', function(e) { Scribd.Toolbar.actions.embed(e) }); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("add_to_collections"); }); })(); (function() { document.observe('dom:loaded', function() { new Scribd.Toolbar.Tooltips.Tooltip("hide_switch"); }); })(); Scribd.HotSpot.initialize(); $('flag_document_link').observe('click', function(e) { e.stop(); if (!$('flag_document_link').hasClassName('disabled')){ $('flag_document_container').toggle(); } }); $$('#flag_document_container .cancel').each(function(el) { el.observe('click', function(e) { e.stop(); $('flag_document_container').hide(); }); }); document.observe('dom:loaded', function() { function ratingLogin(event) { Scribd.login.open({"next_url":"http://www.scribd.com/doc/52270399/ACrash-Course-on-the-Depths-of-Win32","fallback_url":"/","context":"rate"}); } function saveRating(event) { new Ajax.Request(["/", "r", "a", "t", "i", "n", "g", "s", "?", "w", "o", "r", "d", "_", "d", "o", "c", "u", "m", "e", "n", "t", "_", "i", "d", "=", "5", "2", "2", "7", "0", "3", "9", "9"].join(''), { parameters: event.memo });

} function enableRating() { var rating = $('rating'); if(rating) { var save = saveRating; var login = ratingLogin; $('rating').observe('starbox:rated', function(event){ save(event); }); } } try { new Starbox("rating_52270399", 0, { className: 'pointy', locked: false, effect: { mouseout: false } }); } catch(e) {} enableRating(); var tag_list = $('tag_list'); if(tag_list) { var fullList = $('tags_all'); var truncatedList = $('tags_truncated'); tag_list.select('.control_btn').invoke('observe', 'click', function(e) { e.stop(); fullList.toggle(); truncatedList.toggle(); }); } }); document.observe('dom:loaded', Scribd.FloatButton.load); new Scribd.LikeButtonManager(null, 'facebook_like_button', "http://www.scribd.c om/doc/52270399/A-Crash-Course-on-the-Depths-of-Win32", 300, "standard", "show_f aces=\"true\""); if (Scribd.TOC){ Scribd.TOC.initialize(); }else{ document.observe("dom:loaded", function() { Scribd.TOC.initialize(); }); } $('exposed_share_panel').down('.more_share_options').down('.pseudoLink').o bserve('click', function(e){ e.stop(); Scribd.Lightbox.remoteOpen('toolbar_share_lightbox', '/word/toolbar_shar e', Scribd.Toolbar.toolbarParams(), {close: true}); $rat('sharebox.viewbar.more_share_options'); }); $$('#exposed_share_panel a.disabled').invoke('observe', 'click', function( e) { e.stop(); Scribd.Alerts.error('flashes_placeholder', "Sharing is disabled for this document."); });

(function() { function instantiate() { new Scribd.ScribbleReadCaster({ doc: {"thumbnail_url":"http://imgv2-1.scribdassets.com/img/word_ document/52270399/54x70/825b224e70/1319060131","url":"http://www.scribd.com/doc/ 52270399/A-Crash-Course-on-the-Depths-of-Win32","description":"1\n\nA Crash Cour se on the Depths of Win32\u2122 Structured Exception Handling\nAt its heart, Win 32 structured exception handling is an operating system-provided service. All th e docs you're likely to find about SEH describe one particular com-piler's runti me library wrapping around the operating system implementation. I'll strip SEH t o its most fundamental concepts. Matt Pietrek This article assumes you're famili ar with C++, Win32 Code for this article: Exception.exe (33KB) Matt Pietrek is t he author o","title":"A Crash Course on the Depths of Win32","page_count":41,"au thor":{"url":"http://www.scribd.com/yuh_16","name":"Yu Chi Huang"},"id":52270399 }, submit_button: $$('#submit_comment').first(), confirm_checkboxes: $$('#comments_section .add_a_comment .confir m_checkboxes input'), event_type : 'scribble', permissions: {"facebook":"ask","scribd":"on","twitter":"ask"}, linked_sites: [], scribble_text_field: $('scribble_input'), doc_reload: null, errors_container_selector: $$('#document_comment_errors').first( ) }); $$('span.confirmation_container input').each(function(element) { ele ment.checked = false; }); Scribd.ReadCaster.observeConfirmations(); } if (Scribd.Facebook.isSessionTransitioned()) {instantiate();} document.observe('dom:loaded', instantiate); })(); var activate_scribble = function(){ var toggler = function(comments_selector) { var top = $$(comments_selector); if(top.length > 0 && top[0].down('.toggle')) { var toggle = top[0].down('.toggle'); var panel = top[0].down('.events'); var open = panel.visible(); var animationScope = 'comments:' + comments_selector; var switchFunc = function(e) { if(e) e.stop(); if(open) { animation = new Effect.BlindUp(panel, { duration: 0.5, beforeSetup: function() { toggle.removeClassName('open'); }, queue: { scope: animationScope, limit: 2 } }); } else { toggle.addClassName('open'); animation = new Effect.BlindDown(panel, {

duration: 0.5, beforeSetup: function() { toggle.addClassName('open'); }, queue: { scope: animationScope, limit: 2 } }); } open ^= true; }; toggle.observe('click', switchFunc); return switchFunc; } else { return function(e) { if(e) e.stop(); }; } } var toggleFriends = toggler('.comments.friends'); var toggleOther = toggler('.comments.other'); // Toggle comment form document.observe('click', function(e) { var clicker = e.findElement(); var textElement = $$('#document_comment textarea').first(); if (clicker === textElement) { clicker.up('.add_a_comment').addClassName('on'); document.fire('scribd:dom_height_changed'); return; } // we only close the textarea if the user click outside of the form var formElement = clicker.up('#document_comment'); if (!formElement) { if(textElement.getValue().blank()) { textElement.up('.add_a_comment').removeClassName('on'); document.fire('scribd:dom_height_changed'); } } }); $('document_comment').observe('submit', Scribd.comment.submitCommentEven t.bindAsEventListener(Scribd.comment)); $('document_comment').observe('submit', function(e) { var other = e.element().up('#comments_section').down('.comments.other .events'); var friends = e.element().up('#comments_section').down('.comments.frie nds .events'); if(other && !other.visible()) toggleOther(); if(friends && friends.visible()) toggleFriends(); document.fire('scribd:dom_height_changed'); }); var revealer = $('document_activity').down('.revealer'); if(revealer) revealer.observe('click', Scribd.getMoreComments.bindAsEventListener(r evealer, "52270399", 2, { per_page: 5, context: 'r3' })); };

document.observe('dom:loaded', activate_scribble); document.observe(Scribd.Facebook.EVENTS.transition, activate_scribble); Scribd.enforceMaxLength($("autogen_id_961984485").down('textarea'), $("aut ogen_id_961984485").down('.number'), 400); document.observe("dom:loaded", function() { Scribd.Pingback.run(["/", "d", "o", "c", "u", "m", "e", "n", "t", "s", " /", "5", "2", "2", "7", "0", "3", "9", "9", "/", "p", "i", "n", "g", "b", "a", " c", "k"].join('')); }); new Scribd.printLightboxManager4Gen({ container: $('lightbox_print'), logged_in: true, document_id: 52270399, autodown_base_url: '/doc/52270399/A-Crash-Course-on-the-Depths-of-Win32' , base_url: 'http://www.scribd.com/document_downloads/52270399', page_count: 41, show_gate: true}); document.observe('dom:loaded', Scribd.enableDocumentCollectionForm); Scribd.Facebook.isReadPage = true;document.observe('dom:loaded', Scribd.enableDo cumentCollectionForm);Scribd.Premium.ReadPage.initialize({logged_in:true, show_gate: true, extension: 'pdf', document_id: 52270399, secret_password: ""});Scribd.SharedLink.trackD ocumentLink('52270399');document.observe('dom:loaded', Scribd.processHash); document.observe(Scribd.Facebook.EVENTS.loaded, function() { FB.Event.subscribe('edge.create', function() { $rat('fb.like'); }); }); Scribd.Tracker.run(52270399, "html"); document.observe('dom:loaded', function() { $$('.facebook_notice a.no_thanks').invoke('observe', 'click', function(e ) { e.stop(); Scribd.blueBarUtil.noThanks(); }); }); Scribd.Lightbox.initialize(); // Load the FB JS API Asychronously document.observe('dom:loaded', function() { var e = document.createElement('script'); e.async = true; e.src = document.location.protocol + '//connect.facebook.net/en_ US/all.js'; document.getElementById('fb-root').appendChild(e); if (document.cookie.match('user_forced_logout=true')) { $$('.facepile_wrap').invoke('hide'); }

}); // Handle DOM updates to re-parse FBML tags document.observe('Scribd:dom_updated', function(e){ var el = e.element(); if(window.FB && FB.XFBML) FB.XFBML.parse(el); }); document.observe(Scribd.Facebook.EVENTS.loaded, Scribd.blueBarUtil.onLoadHan dler); var facebookUser = false; Event.observe(window, 'load', function() { new Scribd.AdHider(); }); Scribd.Smartling = new Scribd.SmartlingManager(); </script>

<script type="text/javascript"> Event.observe(document, 'dom:loaded', function(event) { (new Scribd.Layouts.Footer.LanguageSelector({"widget_dom_id":"autoge n_id_961993099"})).onDomLoaded(event); Event.fire(document, 'Scribd:widgets_loaded', event); }); </script>

<!-- Start xGraph --> <script type="text/javascript"> var xgJsHost = (("https:" == document.location.protocol) ? "https://sxcdn." : "http://xcdn."); var refValue = ""; try {refValue = top.document.referrer;} catch (xgErr) {refValue = "";} var params = "pid=14345&sid=83112&pcid=site&type=us&ref="+escape(refValue)+"&d ref="+escape(document.referrer); var var var var browser_id = '85084db0-dc7d-012e-eada-00259005cdaa'; scribd_user_id = 105583139; hashed_facebook_id = null; search_query = null;

if (browser_id) params += '&p_bid=' + escape(browser_id); if (scribd_user_id) params += '&p_lid=' + escape(scribd_user_id); if (hashed_facebook_id) params += '&hfid=' + escape(hashed_facebook_id); if (search_query) params += '&p_qry=' + escape(search_query);

document.write(unescape("%3Cimg src='"+xgJsHost+"xgraph.net/14345/us/xg.gif?") +params+unescape("' class='ad_img' width='0' height='0'%3E%3C/img%3E")); </script> <!-- End xGraph --> <!-- Begin BlueKai Tag --> <iframe name="__bkframe" height="0" width="0" frameborder="0" src="javascript:vo id(0)"></iframe> <script type="text/javascript" src="http://www.bkrtx.com/js/bk-static.js"></scri pt> <script type="text/javascript"> // INSERT DATA HERE IN THE FORM: // bk_addPageCtx("SOMEKEY", "SOMEVALUE"); bk_doJSTag(4072, 4); </script> <!-- End BlueKai Tag -->

<script type="text/javascript"> Scribd.start_trial = function(runs) { var j = new CookieJar; j.put("last_seen", +Date.now()); j.put("time_trial", { remaining_runs: runs, results: [], results2: [] }); window.location.reload(); }; Event.observe(window, 'load', function() { var load_end = +Date.now(); var j = new CookieJar; var trial = j.get("time_trial"); if (trial) { var elapsed = load_end - window.timer_start; var last_seen = j.get("last_seen"); var elapsed2 = load_end - last_seen; trial.results.push(elapsed); trial.results2.push(elapsed2); trial.remaining_runs -= 1; if (trial.remaining_runs == 0) { var r = trial.results; var r2 = trial.results2; document.write(" first script to end of onload: <br>"); for (var i = 0; i < r.length; i++) { document.write("t- "+r[i]+"<br>"); } document.write("AVG: " + r.mean() + "ms; STDDEV: "+r.std dev()+"ms <br>"); document.write(" from initial location reload call: <br> "); for (var i = 0; i < r.length; i++) { document.write("t- "+r2[i]+"<br>"); } document.write("AVG: " + r2.mean() + "ms; STDDEV: "+r2.s

tddev()+"ms <br>"); j.remove("time_trial"); } else { j.put("time_trial", trial); console.log("+++++ Remaining runs: " + trial.remaining_r uns); j.put("last_seen", +Date.now()); window.location.reload(); } } }); Array.prototype.sum = function(){ return(this.inject(0, function(acc, n) { return acc + n; })); }; Array.prototype.mean = function(){ return(this.sum() / this.length); }; Array.prototype.variance = function(){ var mean = this.mean(); return this.inject(0, function(acc, n) { return acc + Math.pow((mean - n ), 2)})/this.length; }; Array.prototype.stddev = function(){ return Math.sqrt(this.variance()); } </script> </body> </html> <!-- Served by app06 in 0.470 secs. cpu: 0.390 -->

Anda mungkin juga menyukai