/// <summary> /// 编辑Dos设备的Stoken; /// </summary> /// <param name="deviceStoken"></param> /// <param name="xElem">案件文件相关Xml元素</param> private static void EditStokenOnDos( DeviceStoken deviceStoken, IUnmanagedBasicDeviceManager entity) { if (deviceStoken == null) { throw new ArgumentNullException(nameof(deviceStoken)); } var dosDeviceInfo = new DOSDeviceInfo(); try { deviceStoken.TypeGuid = Constants.DeviceType_DOS; deviceStoken.PartsType = Constants.PartsType_DOS; //获取Dos链表; var partPtr = Partition_Get_DosPTable(entity.BasicDevicePtr); var partNode = partPtr; var infoDiskIndex = 0; while (partNode != IntPtr.Zero) { var dosPTable = partNode.GetStructure <StDosPTable>(); var dosPartInfo = new DOSPartInfo { DosPTable = new DosPTable(dosPTable) }; if (dosPTable.Info != IntPtr.Zero) { var stInfoDisk = dosPTable.Info.GetStructure <StInFoDisk>(); dosPartInfo.InfoDisk = new InfoDisk(stInfoDisk) { InternalDisplayName = $"{LanguageService.FindResourceString(Constants.DisplayName_InfoDisk)}{++infoDiskIndex}" }; } dosDeviceInfo.DosPartInfos.Add(dosPartInfo); partNode = dosPTable.next; } EditDosPartEntries(dosDeviceInfo, deviceStoken); //编辑拓展; deviceStoken.SetInstance(dosDeviceInfo, Constants.DeviceStokenTag_DOSDeviceInfo); } catch (Exception ex) { LoggerService.WriteCallerLine(ex.Message); } }
/// <summary> /// 获取分区表类型; /// </summary> /// <param name="stream">流</param> /// <returns></returns> private static InnerPartsType?GetPartsType(Stream stream) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } InnerPartsType?pType = null; IUnmanagedBasicDeviceManager unManagedManager = null; try { unManagedManager = UnMgdBasicDeviceManagerFactory.Create(stream); } catch (Exception ex) { LoggerService.WriteCallerLine(ex.Message); } if (unManagedManager == null) { LoggerService.WriteCallerLine($"{nameof(unManagedManager)} can't be null."); pType = null; } //判断是否是符合"签名"; try { if (unManagedManager.BasicDevicePtr == IntPtr.Zero) { LoggerService.WriteCallerLine($"{nameof(unManagedManager.BasicDevicePtr)} can't be nullptr."); } else if (Partition_B_Dos(unManagedManager.BasicDevicePtr)) { pType = InnerPartsType.DOS; } else if (Partition_B_Gpt(unManagedManager.BasicDevicePtr)) { pType = InnerPartsType.GPT; } } catch (Exception ex) { LoggerService.WriteCallerLine(ex.Message); } unManagedManager?.Dispose(); return(pType); }
/// <summary> /// 编辑GPT设备的Stoken; /// </summary> /// <param name="stream"></param> /// <param name="name"></param> /// <param name="xElem"></param> /// <param name="reporter"></param> /// <returns></returns> private static void EditStokenOnGpt(DeviceStoken deviceStoken, IUnmanagedBasicDeviceManager entity) { if (deviceStoken == null) { throw new ArgumentNullException(nameof(deviceStoken)); } var gptDeviceInfo = new GPTDeviceInfo(); try { deviceStoken.TypeGuid = Constants.DeviceType_GPT; deviceStoken.PartsType = Constants.PartsType_GPT; //获取GPT链表; var partPtr = Partition_Get_GptPTable(entity.BasicDevicePtr); var partNode = partPtr; var infoDiskIndex = 0; var efiInfoIndex = 0; var efiPTableIndex = 0; while (partNode != IntPtr.Zero) { var gptPTable = partNode.GetStructure <StGptPTable>(); var gptPartInfo = new GPTPartInfo { StGptPTable = gptPTable }; if (gptPTable.InfoDisk != IntPtr.Zero) { var stInfoDisk = gptPTable.InfoDisk.GetStructure <StInFoDisk>(); gptPartInfo.InfoDisk = new InfoDisk(stInfoDisk) { InternalDisplayName = $"{LanguageService.FindResourceString(Constants.DisplayName_InfoDisk)}{++infoDiskIndex}" }; } if (gptPTable.EFIInfo != IntPtr.Zero) { var stEFIInfo = gptPTable.EFIInfo.GetStructure <StEFIInfo>(); gptPartInfo.EFIInfo = new EFIInfo(stEFIInfo) { InternalDisplayName = $"{LanguageService.FindResourceString(Constants.DisplayName_EFIInfo)}{++efiInfoIndex}" }; } if (gptPTable.EFIPTable != IntPtr.Zero) { var stEFITable = gptPTable.EFIPTable.GetStructure <StEFIPTable>(); gptPartInfo.EFIPTable = new EFIPTable(stEFITable) { InternalDisplayName = $"{LanguageService.FindResourceString(Constants.DisplayName_EFIPTable)}{++efiPTableIndex}" }; } gptDeviceInfo.GptPartInfos.Add(gptPartInfo); partNode = gptPTable.next; } EditGptPartEntries(gptDeviceInfo, deviceStoken); //编辑拓展; deviceStoken.SetInstance(gptDeviceInfo, Constants.DeviceStokenTag_GPTDeviceInfo); } catch (Exception ex) { LoggerService.WriteCallerLine(ex.Message); } }