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; }