public void ParseXml(StringBuilder Win32AppOutput)
        {
            try
            {
                stream = new StringReader(Win32AppOutput.ToString());
                reader = new XmlTextReader(stream);

                reader.MoveToContent();
                while (reader.ReadState == ReadState.Interactive && reader.ReadToFollowing("item"))
                {
                    MemoryRegion region = new MemoryRegion();
                    XmlReader SubReader = reader.ReadSubtree();
                    ParseRegion(ref region, ref SubReader);
                    MemoryData.Add(region);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Cannot parse memory data XML.", ex);
            }
        }
 private void ParseRegion(ref MemoryRegion region, ref XmlReader reader)
 {
     reader.ReadToDescendant("m_region_base_addr");
     region.RegionAddress = (UInt64)reader.ReadElementContentAs(typeof(UInt64), null);
     reader.ReadToNextSibling("m_region_protection");
     region.RegionProtection = (UInt32)reader.ReadElementContentAs(typeof(UInt32), null);
     reader.ReadToNextSibling("region_size");
     region.RegionSize = (UInt64)reader.ReadElementContentAs(typeof(UInt64), null);
     reader.ReadToNextSibling("m_storage_type");
     region.RegionStorageType = (UInt32)reader.ReadElementContentAs(typeof(UInt32), null);
     reader.ReadToNextSibling("m_region_blocks");
     region.NumberOfBlocks = (UInt32)reader.ReadElementContentAs(typeof(UInt32), null);
     reader.ReadToNextSibling("m_guard_blocks");
     region.NumberOfGuardBlocks = (UInt32)reader.ReadElementContentAs(typeof(UInt32), null);
     reader.ReadToNextSibling("m_is_stack");
     region.IsAStack = (Boolean)reader.ReadElementContentAs(typeof(Boolean), null);
     reader.ReadToFollowing("m_blocks");
     XmlReader SubReader = reader.ReadSubtree();
     ParseBlocks(ref region.MemoryBlocks, ref SubReader);
 }