/// <summary> /// Reads sctructure form given handle if possible /// </summary> /// <param name="pObjectInfo">object info struct</param> /// <param name="handle">context handle</param> /// <param name="address">calculate rva address</param> /// <param name="baseOfView">base of mapped minidump file</param> /// <returns>Information structure or default value if no info detected</returns> public static unsafe MINIDUMP_HANDLE_OBJECT_INFORMATION DealWithHandleInfo(MINIDUMP_HANDLE_OBJECT_INFORMATION pObjectInfo, MiniDumpHandle handle, IntPtr address, IntPtr baseOfView) { switch (pObjectInfo.InfoType) { case MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE.MiniHandleObjectInformationNone: SetMiniHandleObjectInformationNone(handle, address); break; case MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE.MiniThreadInformation1: SetMiniThreadInformation1(handle, address); break; case MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE.MiniMutantInformation1: SetMiniMutantInformation1(handle, address); break; case MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE.MiniMutantInformation2: SetMiniMutantInformation2(handle, address); break; case MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE.MiniProcessInformation1: SetMiniProcessInformation1(handle, address); break; case MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE.MiniProcessInformation2: SetMiniProcessInformation2(handle, address); break; case MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE.MiniEventInformation1: SetMiniEventInformation1(handle, address); break; case MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE.MiniSectionInformation1: SetMiniSectionInformation1(handle, address); break; case MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE.MiniHandleObjectInformationTypeMax: SetMiniHandleObjectInformationTypeMax(handle, address); break; default: break; } if (pObjectInfo.NextInfoRva == 0) { return default(MINIDUMP_HANDLE_OBJECT_INFORMATION); } else { pObjectInfo = SafeMemoryMappedViewStreamHandler .ReadStruct<MINIDUMP_HANDLE_OBJECT_INFORMATION>(IntPtr.Add(baseOfView, (int)pObjectInfo.NextInfoRva)); } return pObjectInfo; }
public MiniDumpHandleInfo(MINIDUMP_HANDLE_OBJECT_INFORMATION info) { this.NextInfoRva = info.NextInfoRva; this.SizeOfInfo = info.SizeOfInfo; this.InfoType = info.InfoType; }
internal void AddInfo(MINIDUMP_HANDLE_OBJECT_INFORMATION info, string infoName) { HandleInfo = new MiniDumpHandleInfo(info); }