public override void LoadDevicePartitions() { if (this.Device.HasPartition) { return; } var partlink = new DISK_INFO(); var result = FileServiceCoreDll.GetDiskInfo(ref partlink, this.Device.DiskNumber); if (result != 0) { //LogHelper.Error(string.Format(LanguageHelper.Get("LANGKEY_HuoQuCiPanFenQuXinXiShiBaiDiCe_01591"), this.Device.Name, result)); return; } if (partlink.part_counts == 0) { //LogHelper.Info(string.Format(LanguageHelper.Get("LANGKEY_CiPanFenQuGeShuWei_01592"), this.Device.Name)); return; } for (int i = 0; i < partlink.part_counts; i++) { var part = partlink.pt[i]; var partition = new FileSystemPartition(); partition.Name = part.driver_letter.ToString(); partition.Discription = part.vol_name; partition.FileSystem = part.file_system; partition.SerialNumber = string.Format("{0:X}", part.serial_num); partition.Size = (ulong)part.sectors.ToSafeInt64() * 512; partition.SectorOffset = (ulong)part.start_lba.ToSafeInt64(); partition.TotalSectors = (ulong)part.sectors.ToSafeInt64(); this.Device.Parts.Add(partition); } }
private FNodeX ScanFileSystem(IFileSystemDevice device, FileSystemPartition partition) { ScanCallBack callBack = (ref ScanCallBackData pdi) => { }; LINK_DIR_FILE_NODE_INFO link = new LINK_DIR_FILE_NODE_INFO(); LIST_FILE_RAW_TYPE_INFO raw = CreatRawLink(); try { var result = FileServiceCoreDll.ScanFiles(partition.Mount, callBack, ref link, device.ScanModel, ref raw, 0); if (result != 0) { LoggerManagerSingle.Instance.Error(string.Format("获取文件系统(名称:{ 0},描述: { 1},大小: { 2})失败,错误码: { 3}", partition.Name, partition.Discription, partition.Size, result)); return(null); } partition.NodeLinkList = link; } catch (Exception ex) { LoggerManagerSingle.Instance.Error(string.Format("获取文件系统(名称:{0},描述:{1},大小:{2},Mount:{3})时底层dll出错", partition.Name, partition.Discription, partition.Size, partition.Mount), ex); return(null); } // 构建当前分区节点 var treeNode = new FNodeX { Source = link.NodeDataInfo, FileName = partition.VolName, IsRoot = true, IsPartition = true, Key = link.NodeDataInfo.FileId, ParentKey = link.NodeDataInfo.ParentFileId }; // 加载树结构; var source = BuildDataDictionary(link); BuildTree(treeNode, source); return(treeNode); }
/// <summary> /// 分层扫描接口 扫描分区 /// </summary> /// <param name="partition">分区</param> /// <returns></returns> public List <FNodeX> GetFileSystemByDir(FileSystemPartition partition) { RunPartition = partition; MountDevice(); VOL_BPB_INFO vol = new VOL_BPB_INFO(); var result = FileServiceCoreDll.GetPartInfo(partition.Mount, ref vol); if (0 != result) { } LINK_DIR_FILE_NODE_INFO link = new LINK_DIR_FILE_NODE_INFO(); result = FileServiceCoreDll.ScanFilesByDir(partition.Mount, GetFileSystemByDirScanCallBack, vol.root_ino, ref link); if (0 != result) { } // 构建当前分区节点 var treeNode = new FNodeX { Source = link.NodeDataInfo, FileName = partition.VolName, IsRoot = true, IsPartition = true, Key = link.NodeDataInfo.FileId, ParentKey = link.NodeDataInfo.ParentFileId }; // 加载树结构; var source = BuildDataDictionary(link); BuildTree(treeNode, source); return(treeNode.Collection); }
/// <summary> /// 创建磁盘分区 /// </summary> /// <param name="link"></param> /// <returns></returns> protected List <FileSystemPartition> CreatePartition(DSK_PART_TABLE link) { var parts = new List <FileSystemPartition>(); var index = 0; while (link.next != IntPtr.Zero) { link = link.next.ToStruct <DSK_PART_TABLE>(); if (link.disk_part_info.file_system != 0x00) { var partition = new FileSystemPartition(); partition.Name = LanguageHelperSingle.Instance.GetLanguageByKey(Languagekeys.FileServiceLanguage_File_FenQu) + ++index; partition.VolName = link.disk_part_info.vol_name == "userdata" ? "data" : link.disk_part_info.vol_name; partition.FileSystem = link.disk_part_info.file_system; partition.SerialNumber = String.Format("{0:X}", link.disk_part_info.serial_num); partition.Size = link.disk_part_info.sectors * 512; partition.SectorOffset = link.disk_part_info.start_lba; partition.TotalSectors = link.disk_part_info.sectors; //partition.PartType = link.disk_part_info.vol_type; parts.Add(partition); } } return(parts); }