<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Crashpad: crashpad::MemoryMapRegionSnapshot Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="crashpad_doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Crashpad
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespacecrashpad.html">crashpad</a></li><li class="navelem"><a class="el" href="classcrashpad_1_1MemoryMapRegionSnapshot.html">MemoryMapRegionSnapshot</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classcrashpad_1_1MemoryMapRegionSnapshot-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">crashpad::MemoryMapRegionSnapshot Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
</div><!--header-->
<div class="contents">

<p>An abstract interface to a snapshot representing a region of the memory map present in the snapshot process.  
 <a href="classcrashpad_1_1MemoryMapRegionSnapshot.html#details">More...</a></p>

<p><code>#include &quot;snapshot/memory_map_region_snapshot.h&quot;</code></p>
<div class="dynheader">
Inheritance diagram for crashpad::MemoryMapRegionSnapshot:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classcrashpad_1_1MemoryMapRegionSnapshot.png" usemap="#crashpad::MemoryMapRegionSnapshot_map" alt=""/>
  <map id="crashpad::MemoryMapRegionSnapshot_map" name="crashpad::MemoryMapRegionSnapshot_map">
<area href="classcrashpad_1_1internal_1_1MemoryMapRegionSnapshotFuchsia.html" alt="crashpad::internal::MemoryMapRegionSnapshotFuchsia" shape="rect" coords="0,56,335,80"/>
<area href="classcrashpad_1_1internal_1_1MemoryMapRegionSnapshotMinidump.html" alt="crashpad::internal::MemoryMapRegionSnapshotMinidump" shape="rect" coords="345,56,680,80"/>
<area href="classcrashpad_1_1internal_1_1MemoryMapRegionSnapshotWin.html" alt="crashpad::internal::MemoryMapRegionSnapshotWin" shape="rect" coords="690,56,1025,80"/>
<area href="classcrashpad_1_1test_1_1TestMemoryMapRegionSnapshot.html" title="A test MemoryMapRegionSnapshot that can carry arbitrary data for testing purposes." alt="crashpad::test::TestMemoryMapRegionSnapshot" shape="rect" coords="1035,56,1370,80"/>
  </map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aa778d0acd581f8532000119ac45745fd"><td class="memItemLeft" align="right" valign="top"><a id="aa778d0acd581f8532000119ac45745fd"></a>
virtual const <a class="el" href="structMINIDUMP__MEMORY__INFO.html">MINIDUMP_MEMORY_INFO</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1MemoryMapRegionSnapshot.html#aa778d0acd581f8532000119ac45745fd">AsMinidumpMemoryInfo</a> () const =0</td></tr>
<tr class="memdesc:aa778d0acd581f8532000119ac45745fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets a <a class="el" href="structMINIDUMP__MEMORY__INFO.html" title="Describes a region of memory.">MINIDUMP_MEMORY_INFO</a> representing the region. <br /></td></tr>
<tr class="separator:aa778d0acd581f8532000119ac45745fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>An abstract interface to a snapshot representing a region of the memory map present in the snapshot process. </p>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>snapshot/memory_map_region_snapshot.h</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.18
</small></address>
</body>
</html>
