Changeset 1745


Ignore:
Timestamp:
2/3/2010 3:37:13 AM (5 years ago)
Author:
lowjoel
Message:

Forward ported changes from trunk to r1743

Location:
branches/eraser6/CodeReview
Files:
1 added
25 edited

Legend:

Unmodified
Added
Removed
  • branches/eraser6/CodeReview

  • branches/eraser6/CodeReview/Eraser.DefaultPlugins/ErasureMethods/FirstLast16KB.cs

    r1681 r1745  
    113113                    "limited, since this is a self-limiting erasure method.")); 
    114114 
    115             //If the target stream is shorter than 16kb, just forward it to the default 
    116             //function. 
    117             if (strm.Length < dataSize) 
     115            //If the target stream is shorter than or equal to 32kb, just forward it to 
     116            //the default function. 
     117            if (strm.Length < dataSize * 2) 
    118118            { 
    119119                method.Erase(strm, erasureLength, prng, callback); 
     
    121121            } 
    122122 
     123            //We need to intercept the callback function as we run the erasure method 
     124            //twice on two parts of the file. 
     125            ErasureMethodProgressFunction customCallback = 
     126                delegate(long lastWritten, long totalData, int currentPass) 
     127                { 
     128                    callback(lastWritten, dataSize * 2, currentPass); 
     129                }; 
     130 
    123131            //Seek to the beginning and write 16kb. 
    124132            strm.Seek(0, SeekOrigin.Begin); 
    125             method.Erase(strm, dataSize, prng, callback); 
     133            method.Erase(strm, dataSize, prng, callback == null ? null: customCallback); 
    126134 
    127135            //Seek to the end - 16kb, and write. 
    128136            strm.Seek(-dataSize, SeekOrigin.End); 
    129             method.Erase(strm, long.MaxValue, prng, callback); 
     137            method.Erase(strm, long.MaxValue, prng, callback == null ? null : customCallback); 
    130138        } 
    131139 
  • branches/eraser6/CodeReview/Eraser.DefaultPlugins/FileSystems/Windows.cs

    r1709 r1745  
    7272        private void DeleteFileSystemInfo(FileSystemInfo info) 
    7373        { 
     74            //If the file/directory doesn't exist, pass. 
     75            if (!info.Exists) 
     76                return; 
     77 
    7478            //Set the date of the file to be invalid to prevent forensic 
    7579            //detection 
     80            info.Attributes = FileAttributes.NotContentIndexed; 
    7681            info.CreationTime = info.LastWriteTime = info.LastAccessTime = MinTimestamp; 
    77             info.Attributes = FileAttributes.Normal; 
    78             info.Attributes = FileAttributes.NotContentIndexed; 
    7982 
    8083            //Rename the file a few times to erase the entry from the file system 
  • branches/eraser6/CodeReview/Eraser.Manager/DirectExecutor.cs

    r1709 r1745  
    275275                                throw; 
    276276                            } 
     277                            catch (ThreadAbortException) 
     278                            { 
     279                            } 
    277280                            catch (Exception e) 
    278281                            { 
     
    417420                fsManager.EraseClusterTips(VolumeInfo.FromMountPoint(target.Drive), 
    418421                    method, task.Log, searchProgress, eraseProgress); 
    419             } 
    420  
     422                tipProgress.MarkComplete(); 
     423            } 
     424 
     425            bool lowDiskSpaceNotifications = Shell.LowDiskSpaceNotificationsEnabled; 
    421426            info = info.CreateSubdirectory(Path.GetFileName( 
    422427                FileSystem.GenerateRandomFileName(info, 18))); 
     
    427432                if (info.IsCompressed()) 
    428433                    info.Uncompress(); 
     434 
     435                //Disable the low disk space notifications 
     436                Shell.LowDiskSpaceNotificationsEnabled = false; 
    429437 
    430438                ProgressManager mainProgress = new ProgressManager(); 
     
    515523                fsManager.DeleteFolder(info); 
    516524                tempFiles.Completed = tempFiles.Total; 
     525 
     526                //Reset the low disk space notifications 
     527                Shell.LowDiskSpaceNotificationsEnabled = lowDiskSpaceNotifications; 
    517528            } 
    518529 
  • branches/eraser6/CodeReview/Eraser.Manager/FileSystem.cs

    r1711 r1745  
    114114            { 
    115115                string shadowFile = null; 
    116                 IList<string> entries = ManagerLibrary.Settings.PlausibleDeniabilityFiles; 
     116                List<string> entries = new List<string>( 
     117                    ManagerLibrary.Settings.PlausibleDeniabilityFiles); 
    117118                Prng prng = PrngManager.GetInstance(ManagerLibrary.Settings.ActivePrng); 
    118119                do 
     
    136137                    entries.RemoveAt(index); 
    137138                } 
    138                 while (shadowFile == null || shadowFile.Length == 0); 
     139                while (shadowFile == null || shadowFile.Length == 0 || !File.Exists(shadowFile)); 
    139140                shadowFileInfo = new FileInfo(shadowFile); 
    140141            } 
  • branches/eraser6/CodeReview/Eraser.Manager/RemoteExecutor.cs

    r1681 r1745  
    100100            thread = new Thread(Main); 
    101101            serverLock = new Semaphore(maxServerInstances, maxServerInstances); 
    102  
    103             thread.Start(); 
    104             Thread.Sleep(0); 
    105102        } 
    106103 
     
    125122 
    126123            base.Dispose(disposing); 
     124        } 
     125 
     126        public override void Run() 
     127        { 
     128            thread.Start(); 
     129            Thread.Sleep(0); 
     130            base.Run(); 
    127131        } 
    128132 
  • branches/eraser6/CodeReview/Eraser.Manager/Task.cs

    r1709 r1745  
    456456                    string adsPath = file + ':' + adsName; 
    457457                    list.Add(adsPath); 
    458                     Util.StreamInfo info = new Util.StreamInfo(adsPath); 
     458                    StreamInfo info = new StreamInfo(adsPath); 
    459459                    totalSize += info.Length; 
    460460                } 
     
    693693                Regex excludePattern = new Regex(regex, RegexOptions.IgnoreCase); 
    694694                foreach (FileInfo file in files) 
    695                     if ((file.Attributes & FileAttributes.ReparsePoint) == 0 && 
     695                    if (file.Exists && 
     696                        (file.Attributes & FileAttributes.ReparsePoint) == 0 && 
    696697                        excludePattern.Matches(file.FullName).Count == 0) 
    697698                    { 
     
    704705                foreach (FileInfo file in files) 
    705706                { 
    706                     if ((file.Attributes & FileAttributes.ReparsePoint) != 0) 
     707                    if (!file.Exists || (file.Attributes & FileAttributes.ReparsePoint) != 0) 
    707708                        continue; 
    708709 
     
    807808                        continue; 
    808809 
    809                     GetRecyclerFiles(dir, ref result, ref totalSize); 
     810                    GetRecyclerFiles(dir, result, ref totalSize); 
    810811                } 
    811812            } 
     
    820821        /// <param name="paths">The list of files to store path information in.</param> 
    821822        /// <param name="totalSize">Receives the total size of the files.</param> 
    822         private void GetRecyclerFiles(DirectoryInfo info, ref List<string> paths, 
     823        private void GetRecyclerFiles(DirectoryInfo info, List<string> paths, 
    823824            ref long totalSize) 
    824825        { 
    825826            try 
    826827            { 
    827                 foreach (FileSystemInfo fsInfo in info.GetFileSystemInfos()) 
     828                foreach (FileInfo fileInfo in info.GetFiles()) 
    828829                { 
    829                     FileInfo fileInfo = fsInfo as FileInfo; 
    830                     if (fileInfo != null) 
    831                     { 
    832                         totalSize += fileInfo.Length; 
    833                         GetPathADSes(paths, out totalSize, fileInfo.FullName); 
    834                         paths.Add(fileInfo.FullName); 
    835                     } 
    836                     else 
    837                         GetRecyclerFiles((DirectoryInfo)fsInfo, ref paths, ref totalSize); 
     830                    if (!fileInfo.Exists || (fileInfo.Attributes & FileAttributes.ReparsePoint) != 0) 
     831                        continue; 
     832 
     833                    totalSize += fileInfo.Length; 
     834                    GetPathADSes(paths, out totalSize, fileInfo.FullName); 
     835                    paths.Add(fileInfo.FullName); 
    838836                } 
     837 
     838                foreach (DirectoryInfo directoryInfo in info.GetDirectories()) 
     839                    if ((directoryInfo.Attributes & FileAttributes.ReparsePoint) == 0) 
     840                        GetRecyclerFiles(directoryInfo, paths, ref totalSize); 
    839841            } 
    840842            catch (UnauthorizedAccessException e) 
  • branches/eraser6/CodeReview/Eraser.Util.Native/OpenHandle.NameResolver.cpp

    r1686 r1745  
    8888} 
    8989 
    90 #pragma managed(pop) 
    91  
    9290void CreateNameThread(HANDLE& handle, NameResolutionThreadParams& params) 
    9391{ 
  • branches/eraser6/CodeReview/Eraser.Util/BlackBox.cs

    r1709 r1745  
    408408            { 
    409409                return new FileStream(System.IO.Path.Combine(Path, BlackBox.DebugLogFileName), 
    410                     FileMode.Open, FileAccess.Read); 
     410                    FileMode.Open, FileAccess.Read, FileShare.Read); 
    411411            } 
    412412        } 
  • branches/eraser6/CodeReview/Eraser.Util/Eraser.Util.csproj

    r1710 r1745  
    109109    <Compile Include="NativeMethods\Sfc.cs" /> 
    110110    <Compile Include="ProgressManager.cs" /> 
     111    <Compile Include="Shell.cs" /> 
    111112    <Compile Include="Win32ErrorCodes.cs" /> 
    112113  </ItemGroup> 
  • branches/eraser6/CodeReview/Eraser.Util/Security.cs

    r1687 r1745  
    117117 
    118118            handle = new SafeCryptHandle(); 
    119             if (NativeMethods.CryptAcquireContext(out handle, string.Empty, 
     119            if (NativeMethods.CryptAcquireContext(out handle, null, 
    120120                IntelDefaultProvider, NativeMethods.PROV_INTEL_SEC, 0)) 
    121121            { 
    122122                return; 
    123123            } 
    124             else if (NativeMethods.CryptAcquireContext(out handle, string.Empty, 
    125                 string.Empty, NativeMethods.PROV_RSA_FULL, 0)) 
     124            else if (NativeMethods.CryptAcquireContext(out handle, null, 
     125                null, NativeMethods.PROV_RSA_FULL, 0)) 
    126126            { 
    127127                return; 
     
    130130            { 
    131131                //Default keyset doesn't exist, attempt to create a new one 
    132                 if (NativeMethods.CryptAcquireContext(out handle, string.Empty, string.Empty, 
     132                if (NativeMethods.CryptAcquireContext(out handle, null, null, 
    133133                    NativeMethods.PROV_RSA_FULL, NativeMethods.CRYPT_NEWKEYSET)) 
    134134                { 
  • branches/eraser6/CodeReview/Eraser.Util/VolumeInfo.cs

    r1711 r1745  
    5858                fileSystemName = new StringBuilder(NativeMethods.MaxPath * sizeof(char)); 
    5959            uint serialNumber, maxComponentLength, filesystemFlags; 
    60             if (!NativeMethods.GetVolumeInformation(volumeId, volumeName, NativeMethods.MaxPath, 
     60            if (NativeMethods.GetVolumeInformation(volumeId, volumeName, NativeMethods.MaxPath, 
    6161                out serialNumber, out maxComponentLength, out filesystemFlags, fileSystemName, 
    6262                NativeMethods.MaxPath)) 
    6363            { 
    64                 int lastError = Marshal.GetLastWin32Error(); 
    65                 switch (lastError) 
    66                 { 
    67                     case Win32ErrorCode.Success: 
    68                     case Win32ErrorCode.NotReady: 
    69                     case Win32ErrorCode.InvalidParameter:   //when the volume given is not mounted. 
    70                     case Win32ErrorCode.UnrecognizedVolume: 
    71                         break; 
    72  
    73                     default: 
    74                         throw Win32ErrorCode.GetExceptionForWin32Error(lastError); 
    75                 } 
    76             } 
    77             else 
    78             { 
    7964                IsReady = true; 
    80                 VolumeLabel = volumeName.ToString(); 
    81                 VolumeFormat = fileSystemName.ToString(); 
    82  
    83                 //Determine whether it is FAT12 or FAT16 
    84                 if (VolumeFormat == "FAT") 
    85                 { 
    86                     uint clusterSize, sectorSize, freeClusters, totalClusters; 
    87                     if (NativeMethods.GetDiskFreeSpace(VolumeId, out clusterSize, 
    88                         out sectorSize, out freeClusters, out totalClusters)) 
    89                     { 
    90                         if (totalClusters <= 0xFF0) 
    91                             VolumeFormat += "12"; 
    92                         else 
    93                             VolumeFormat += "16"; 
    94                     } 
     65            } 
     66 
     67            //If GetVolumeInformation returns zero some of the information may 
     68            //have been stored, so we just try to extract it. 
     69            VolumeLabel = volumeName.Length == 0 ? null : volumeName.ToString(); 
     70            VolumeFormat = fileSystemName.Length == 0 ? null : fileSystemName.ToString(); 
     71 
     72            //Determine whether it is FAT12 or FAT16 
     73            if (VolumeFormat == "FAT") 
     74            { 
     75                uint clusterSize, sectorSize, freeClusters, totalClusters; 
     76                if (NativeMethods.GetDiskFreeSpace(VolumeId, out clusterSize, 
     77                    out sectorSize, out freeClusters, out totalClusters)) 
     78                { 
     79                    if (totalClusters <= 0xFF0) 
     80                        VolumeFormat += "12"; 
     81                    else 
     82                        VolumeFormat += "16"; 
    9583                } 
    9684            } 
  • branches/eraser6/CodeReview/Eraser.msbuild

  • branches/eraser6/CodeReview/Eraser/BlackBoxMainForm.it.resx

  • branches/eraser6/CodeReview/Eraser/BlackBoxUploadForm.it.resx

  • branches/eraser6/CodeReview/Eraser/LogForm.cs

    r1681 r1745  
    7878        private void task_NewSession(object sender, EventArgs e) 
    7979        { 
    80             if (!IsHandleCreated) 
     80            if (IsDisposed || !IsHandleCreated) 
    8181                return; 
    8282            if (InvokeRequired) 
     
    9191        private void task_Logged(object sender, LogEventArgs e) 
    9292        { 
    93             if (!IsHandleCreated) 
     93            if (IsDisposed || !IsHandleCreated) 
    9494                return; 
    9595            if (InvokeRequired) 
  • branches/eraser6/CodeReview/Eraser/MainForm.cs

    r1681 r1745  
    4848            contentPanel.Controls.Add(SchedulerPage); 
    4949            contentPanel.Controls.Add(SettingsPage); 
     50            if (!IsHandleCreated) 
     51                CreateHandle(); 
    5052 
    5153            Theming.ApplyTheme(this); 
  • branches/eraser6/CodeReview/Eraser/Program.GuiProgram.cs

    r1521 r1745  
    158158                            S.IsRightToLeft(null) ? MessageBoxOptions.RtlReading : 0); 
    159159                    } 
     160                    catch (IOException ex) 
     161                    { 
     162                        MessageBox.Show(S._("Another instance of Eraser is already running but " + 
     163                            "cannot be connected to.\n\nThe error returned was: {0}", ex.Message, 
     164                            S._("Eraser"), MessageBoxButtons.OK, MessageBoxIcon.Error, 
     165                            MessageBoxDefaultButton.Button1, 
     166                            S.IsRightToLeft(null) ? MessageBoxOptions.RtlReading : 0)); 
     167                    } 
    160168                    catch (TimeoutException) 
    161169                    { 
  • branches/eraser6/CodeReview/Eraser/ProgressForm.cs

    r1681 r1745  
    6565        private void task_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    6666        { 
    67             if (!IsHandleCreated) 
     67            if (IsDisposed || !IsHandleCreated) 
    6868                return; 
    6969            if (InvokeRequired) 
     
    9191        private void task_TaskFinished(object sender, TaskEventArgs e) 
    9292        { 
    93             if (!IsHandleCreated) 
     93            if (IsDisposed || !IsHandleCreated) 
    9494                return; 
    9595            if (InvokeRequired) 
  • branches/eraser6/CodeReview/Eraser/SchedulerPanel.cs

    r1701 r1745  
    4545            InitializeComponent(); 
    4646            Theming.ApplyTheme(schedulerDefaultMenu); 
    47             CreateHandle(); 
     47            if (!IsHandleCreated) 
     48                CreateHandle(); 
    4849 
    4950            //Populate the scheduler list-view with the current task list 
     
    187188        void task_TaskStarted(object sender, TaskEventArgs e) 
    188189        { 
    189             if (scheduler.InvokeRequired) 
     190            if (InvokeRequired) 
    190191            { 
    191192                Invoke((EventHandler<TaskEventArgs>)task_TaskStarted, sender, e); 
     
    213214            //Make sure we handle the event in the main thread as this requires 
    214215            //GUI calls. 
    215             if (scheduler.InvokeRequired) 
     216            if (InvokeRequired) 
    216217            { 
    217218                Invoke((EventHandler<ProgressChangedEventArgs>)task_ProgressChanged, sender, e); 
  • branches/eraser6/CodeReview/Eraser/Strings.NL.resx

    r1681 r1745  
    175175    <value>(Untranslated)</value> 
    176176  </data> 
     177  <data name="Another instance of Eraser is already running but cannot be connected to.\n\nThe error returned was: {0}Eraser" xml:space="preserve"> 
     178    <value>(Untranslated)</value> 
     179  </data> 
    177180  <data name="Total: {0,2:#0.00%}" xml:space="preserve"> 
    178181    <value>(Untranslated)</value> 
  • branches/eraser6/CodeReview/Eraser/Strings.en.resx

    r1681 r1745  
    175175    <value>Another instance of Eraser is already running but it is running with higher privileges than this instance of Eraser.\n\nEraser will now exit.</value> 
    176176  </data> 
     177  <data name="Another instance of Eraser is already running but cannot be connected to.\n\nThe error returned was: {0}Eraser" xml:space="preserve"> 
     178    <value>(Untranslated)</value> 
     179  </data> 
    177180  <data name="Total: {0,2:#0.00%}" xml:space="preserve"> 
    178181    <value>Total: {0,2:#0.00%}</value> 
  • branches/eraser6/CodeReview/Eraser/Strings.it.resx

    r1681 r1745  
    175175    <value>Un'altra occorrenza di Eraser è già in esecuzione, ma con privilegi più elevati di questa.\n\nEraser adesso si chiuderà.</value> 
    176176  </data> 
     177  <data name="Another instance of Eraser is already running but cannot be connected to.\n\nThe error returned was: {0}Eraser" xml:space="preserve"> 
     178    <value>(Untranslated)</value> 
     179  </data> 
    177180  <data name="Total: {0,2:#0.00%}" xml:space="preserve"> 
    178181    <value>Totale: {0,2:#0.00%}</value> 
  • branches/eraser6/CodeReview/Eraser/Strings.resx

    r1681 r1745  
    175175    <value>Another instance of Eraser is already running but it is running with higher privileges than this instance of Eraser.\n\nEraser will now exit.</value> 
    176176  </data> 
     177  <data name="Another instance of Eraser is already running but cannot be connected to.\n\nThe error returned was: {0}Eraser" xml:space="preserve"> 
     178    <value>Another instance of Eraser is already running but cannot be connected to.\n\nThe error returned was: {0}Eraser</value> 
     179  </data> 
    177180  <data name="Total: {0,2:#0.00%}" xml:space="preserve"> 
    178181    <value>Total: {0,2:#0.00%}</value> 
  • branches/eraser6/CodeReview/ShellExt/CtxMenu.cpp

    r1681 r1745  
    954954                NULL, NULL, &startupInfo, &processInfo)) 
    955955            { 
     956                //Why did we fail? Is it because we have too many files 
    956957                if (GetLastError() == ERROR_FILENAME_EXCED_RANGE) 
    957958                    throw FormatString(LoadString(IDS_ERROR_TOO_MANY_FILES)); 
     959                 
     960                //Or if elevation is required for this operation 
     961                else if (GetLastError() == ERROR_ELEVATION_REQUIRED) 
     962                    return RunEraser(action, parameters, true, parent, show); 
     963 
     964                //Or otherwise? 
    958965                else 
    959966                    throw FormatString(LoadString(IDS_ERROR_MISC), FormatError().c_str()); 
Note: See TracChangeset for help on using the changeset viewer.