예제 #1
0
        /// <summary>
        /// 添加卷;
        /// </summary>
        /// <param name="path">卷实体</param>
        public void AddVolume(LocalVolume volume)
        {
            if (volume == null)
            {
                throw new ArgumentNullException(nameof(volume));
            }

            var csEvidence = CaseService.Current.
                             CreateNewCaseEvidence(
                new string[] {
                EvidenceType_LocalVolume
            },
                volume.Sign.ToString(),
                volume.Sign.ToString()
                );

            csEvidence[nameof(volume.Sign)] = volume.Sign.ToString();
            csEvidence[nameof(volume.Size)] = volume.Size.ToString();

            CaseService.Current.CurrentCase.AddNewCaseEvidence(csEvidence);
            CaseService.Current.CurrentCase.LoadCaseEvidence(csEvidence);
        }
예제 #2
0
        //初始化本地盘符;
        private void InitilizeVolumes()
        {
            var partitionPtr  = cdfc_devices_patitionlist();
            var partitionNode = partitionPtr;

            while (partitionNode != IntPtr.Zero)
            {
                var ptList = partitionNode.GetStructure <PartitonListStruct>();
                //为避免编写重复的continue代码,此处编写一个循环内方法,进行判断,分区添加工作;
                //return 即为continue;
                void CheckAndAdd()
                {
                    //判断_mThisPartition是否为空;
                    if (ptList.m_ThisPartition == IntPtr.Zero)
                    {
                        LoggerService.Current.WriteCallerLine($"{nameof(ptList.m_ThisPartition)} is null.");
                        return;
                    }

                    var partitionStruct = ptList.m_ThisPartition.GetStructure <VolumeStruct>();

                    //若挂载号不是有效的盘标号,则不可用,需跳过;
                    var sign = Convert.ToChar(partitionStruct.m_Sign);

                    if (!char.IsLetter(sign))
                    {
                        LoggerService.Current.WriteCallerLine($"{nameof(partitionStruct.m_Sign)} is not a valid volume sign-{sign}");
                        return;
                    }

                    var device = _localHdds.FirstOrDefault(p => p.DeviceID == partitionStruct.m_LoGo);

                    if (device == null)
                    {
                        LoggerService.Current?.WriteCallerLine(
                            $"Matched Hdd not found:{nameof(partitionStruct.m_LoGo)}-{partitionStruct.m_LoGo}"
                            );
                        return;
                    }

                    if (device != null)
                    {
                        var partition = new LocalVolume(partitionStruct)
                        {
                            InternalSecSize = device.SectorSize
                        };
                        device.InternalVolumes.Add(partition);

                        LoggerService.Current?.WriteCallerLine(
                            $"Partition aquired:{Convert.ToChar(partitionStruct.m_Sign)}" +
                            $"Size:{partitionStruct.m_Size}"
                            );
                    }
                }

                CheckAndAdd();
                partitionNode = ptList.m_next;
            }

            //附载分区到硬盘上;
            _localHdds.ForEach(p => {
                if (p.Volumes == null)
                {
                    return;
                }
                foreach (var volume in p.Volumes)
                {
                    var devName           = @"\\.\" + volume.Sign + ":";
                    var partitionInDevice = _partitionInDeviceStructs.FirstOrDefault(t => t.Value.DevName == devName);
                    if ((partitionInDevice?.Handle ?? IntPtr.Zero) != IntPtr.Zero)
                    {
                        volume.InternalHandle = new SafeFileHandle(partitionInDevice.Value.Handle, false);
                    }
                }
            });
        }