GetRuns() public method

Gets a list of the on-disk runs of this NTFSFile. Returns null if resident.
public GetRuns ( ) : IEnumerable
return IEnumerable
Ejemplo n.º 1
0
        internal override FileRecoveryStatus GetChanceOfRecovery(FileSystemNode node)
        {
            FileNTFS file = node as FileNTFS;

            if (file == null)
            {
                return(FileRecoveryStatus.Unknown);
            }
            else
            {
                IEnumerable <IRun> runs = file.GetRuns();
                if (runs == null)
                {
                    // The data stream is resident, so recovery is trivial.
                    return(FileRecoveryStatus.Resident);
                }
                else
                {
                    ulong totalClusters = 0;
                    ulong usedClusters  = 0;
                    // Check the status of each cluster in the runs.
                    foreach (IRun run in runs)
                    {
                        if (run.HasRealClusters)
                        {
                            totalClusters += run.LengthInClusters;
                            for (ulong i = run.LCN; i < run.LengthInClusters; i++)
                            {
                                if (GetClusterStatus(run.LCN + i) == SectorStatus.Used ||
                                    GetClusterStatus(run.LCN + i) == SectorStatus.Bad)
                                {
                                    usedClusters++;
                                }
                            }
                        }
                    }
                    if (usedClusters == 0)
                    {
                        return(FileRecoveryStatus.MaybeOverwritten);
                    }
                    else if (usedClusters < totalClusters)
                    {
                        return(FileRecoveryStatus.PartiallyOverwritten);
                    }
                    else
                    {
                        return(FileRecoveryStatus.Overwritten);
                    }
                }
            }
        }