Exemplo n.º 1
0
        private VssSnapshotProperties GetVssSnapshotFromTime(DateTime selectedCreationTime)
        {
            Debug.WriteLine(string.Format("Selected creation time: {0}", selectedCreationTime.ToLongTimeString()));

            // Get selected restore point
            SystemRestoreItem selectedSystemRestoreItem = null;

            foreach (SystemRestoreItem sri in systemRestorePoints)
            {
                if (sri.CreationTime.ToLocalTime().CompareTo(selectedCreationTime) == 0)
                {
                    selectedSystemRestoreItem = sri;
                    break;
                }
            }

            // Enumerate snapshots using VSS API
            IVssImplementation vssImplmentation = VssUtils.LoadImplementation();
            ////VssBackupComponents vss = new VssBackupComponents();
            IVssBackupComponents vssBackup = vssImplmentation.CreateVssBackupComponents();

            vssBackup.InitializeForBackup(null);
            vssBackup.SetContext(VssSnapshotContext.All);

            List <VssSnapshotProperties> snapshotHourMatches   = new List <VssSnapshotProperties>();
            List <VssSnapshotProperties> snapshotMinuteMatches = new List <VssSnapshotProperties>();

            foreach (VssSnapshotProperties snapshot in vssBackup.QuerySnapshots())
            {
                DateTime truncatedSelectedRestoreItemTime = TruncateToHour(selectedSystemRestoreItem.CreationTime.ToLocalTime());
                DateTime truncatedSnapshotTime            = TruncateToHour(snapshot.CreationTimestamp);

                if (truncatedSelectedRestoreItemTime.CompareTo(truncatedSnapshotTime) == 0)
                {
                    snapshotHourMatches.Add(snapshot);
                }
            }

            if (snapshotHourMatches.Count == 1)
            {
                Debug.WriteLine(string.Format("Snapshot creation time: {0}", snapshotHourMatches[0].CreationTimestamp.ToLongTimeString()));
                return(snapshotHourMatches[0]);
            }
            else if (snapshotHourMatches.Count > 1)
            {
                foreach (VssSnapshotProperties snapshot in snapshotHourMatches)
                {
                    DateTime truncatedSelectedRestoreItemTime = TruncateToMinute(selectedSystemRestoreItem.CreationTime.ToLocalTime());
                    DateTime truncatedSnapshotTime            = TruncateToMinute(snapshot.CreationTimestamp);

                    if (truncatedSelectedRestoreItemTime.CompareTo(truncatedSnapshotTime) == 0)
                    {
                        snapshotMinuteMatches.Add(snapshot);
                    }
                }

                if (snapshotMinuteMatches.Count == 1)
                {
                    Debug.WriteLine(string.Format("Snapshot creation time: {0}", snapshotMinuteMatches[0].CreationTimestamp.ToLongTimeString()));
                    return(snapshotMinuteMatches[0]);
                }
                else if (snapshotMinuteMatches.Count > 1)
                {
                    Debug.WriteLine(string.Format("Found {0} potential matches", snapshotMinuteMatches.Count.ToString()));

                    // Find closest match
                    foreach (VssSnapshotProperties snapshot in snapshotMinuteMatches)
                    {
                        if (selectedSystemRestoreItem.CreationTime.ToLocalTime().CompareTo(snapshot.CreationTimestamp) < 0)
                        {
                            Debug.WriteLine(string.Format("Snapshot creation time: {0}", snapshot.CreationTimestamp.ToLongTimeString()));
                            return(snapshot);
                        }
                    }
                }
            }

            return(null);
        }
Exemplo n.º 2
0
        private void btnDelete_Click(object sender, EventArgs e)
        {
            // Get selected restore point
            SystemRestoreItem selectedSystemRestoreItem = null;
            string            time = lvRestorePoints.Items[lvRestorePoints.SelectedIndices[0]].Text;
            DateTime          selectedCreationTime = DateTime.Parse(time);

            foreach (SystemRestoreItem sri in systemRestorePoints)
            {
                if (sri.CreationTime.ToLocalTime().CompareTo(selectedCreationTime) == 0)
                {
                    selectedSystemRestoreItem = sri;
                    break;
                }
            }

            if (selectedSystemRestoreItem.SequenceNumber > 0)
            {
                // Need to display are you sure dialog!
                string           prompt = "Are you sure you want to remove system restore point?";
                TaskDialogResult tdr    = TaskDialog.Show(this, selectedSystemRestoreItem.CreationTime.ToString() + "\n" + selectedSystemRestoreItem.Description, prompt, this.Text, TaskDialogButtons.Yes | TaskDialogButtons.No, TaskDialogIcon.Warning);

                // If the user is sure
                if (tdr == TaskDialogResult.Yes)
                {
                    // Remove the restore point
                    uint result = VolumeNativeMethods.SRRemoveRestorePoint(selectedSystemRestoreItem.SequenceNumber);

                    // If success
                    if (result == 0)
                    {
                        // Update internal data on system restore points and shadow storage
                        systemRestorePoints = new SystemRestorePoints();
                        shadowStorage       = new ShadowStorage();

                        lblDiskSpace.Text = shadowStorage.UsedSpaceString;
                        UpdateListView(sender, e);

                        // Only show chkOlder if there are older restore points
                        int olderCount = 0;

                        foreach (SystemRestoreItem sri in systemRestorePoints)
                        {
                            if (sri.CreationTime.ToLocalTime().CompareTo(DateTime.Now.Subtract(TimeSpan.FromDays(5))) < 0)
                            {
                                olderCount++;
                            }
                        }

                        if (olderCount > 0)
                        {
                            chkHideNewest.Visible = true;
                        }
                        else
                        {
                            chkHideNewest.Visible = false;
                        }
                    }
                    else
                    {
                        MessageBox.Show("Error deleting restore point");
                    }
                }
            }
        }