public MiniDumpHandle(MINIDUMP_HANDLE_DESCRIPTOR_2 handleDescriptor)
 {
     Handle = handleDescriptor.Handle;
     HandleCount = handleDescriptor.HandleCount;
     ObjectNameRva = handleDescriptor.ObjectNameRva;
     PointerCount = handleDescriptor.PointerCount;
     TypeNameRva = handleDescriptor.TypeNameRva;
     Attributes = handleDescriptor.Attributes;
     GrantedAccess = handleDescriptor.GrantedAccess;
     ObjectInfoRva = handleDescriptor.ObjectInfoRva;
 }
        /// <summary>
        /// Constructs handles wrapped class with MINIDUMP_HANDLE_DESCRIPTOR_2 struct data
        /// </summary>
        /// <param name="handle">minidump struct descriptor</param>
        /// <param name="streamPointer">stream pointer</param>
        /// <returns></returns>
        private async Task<MiniDumpHandle > GetHandleData(MINIDUMP_HANDLE_DESCRIPTOR_2 handle, IntPtr streamPointer)
        {
            string objectName, typeName;
            typeName = objectName = null;
            if (handle.ObjectNameRva != 0)
            {
                objectName = await GetMiniDumpString(handle.ObjectNameRva, streamPointer);
            }
            if (handle.TypeNameRva != 0)
            {
                typeName = await GetMiniDumpString(handle.TypeNameRva, streamPointer);
            }

            var result = new MiniDumpHandle (handle, objectName, typeName);

            if (handle.HandleCount > 0)
            {
                if (handle.ObjectInfoRva > 0)
                {
                    var info = await SafeMemoryMappedViewStreamHandler.ReadStruct<MINIDUMP_HANDLE_OBJECT_INFORMATION>(handle.ObjectInfoRva, streamPointer, _safeMemoryMappedViewHandle);
                    if (info.NextInfoRva != 0)
                    {
                        IntPtr address = IntPtr.Add(_baseOfView, handle.ObjectInfoRva);
                        MINIDUMP_HANDLE_OBJECT_INFORMATION pObjectInfo = SafeMemoryMappedViewStreamHandler.ReadStruct<MINIDUMP_HANDLE_OBJECT_INFORMATION>(address);

                        do
                        {
                            pObjectInfo = ObjectInformationHandler
                                .DealWithHandleInfo(pObjectInfo, result, address, _baseOfView);

                        }
                        while (pObjectInfo.NextInfoRva != 0 && pObjectInfo.SizeOfInfo != 0);
                    }

                }

            }

            if (handle.PointerCount > 0)
            {
                //TODO: The meaning of this member depends on the handle type and the operating system.
                //This is the number kernel references to the object that this handle refers to. 
            }

            if (handle.GrantedAccess > 0)
            {
                //TODO: The meaning of this member depends on the handle type and the operating system.
            }

            if (handle.Attributes > 0)
            {
                //TODO: 
                //The attributes for the handle, this corresponds to OBJ_INHERIT, OBJ_CASE_INSENSITIVE, etc. 
            }

            return result;
        }
 public MiniDumpHandle(MINIDUMP_HANDLE_DESCRIPTOR_2 handleDescriptor, string objectName, string typeName)
     : this(handleDescriptor)
 {
     this.ObjectName = objectName;
     this.TypeName = typeName;
 }