Changeset 1859
- Timestamp:
- 3/1/2010 2:57:41 AM (3 years ago)
- Location:
- trunk/eraser6
- Files:
-
- 3 edited
-
Eraser.DefaultPlugins/FileSystems/Ntfs.cs (modified) (1 diff)
-
Eraser.Util/NativeMethods/Kernel.cs (modified) (1 diff)
-
Eraser.Util/NtfsApi.cs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/eraser6/Eraser.DefaultPlugins/FileSystems/Ntfs.cs
r1802 r1859 165 165 //TODO: any more deterministic way of finding out? 166 166 VolumeInfo volume = VolumeInfo.FromMountPoint(info.DirectoryName); 167 if (info.Length < Math.Max(volume.ClusterSize, 1024))167 if (info.Length < NtfsApi.GetMftRecordSegmentSize(volume)) 168 168 { 169 169 //Yes it does, erase exactly to the file length -
trunk/eraser6/Eraser.Util/NativeMethods/Kernel.cs
r1841 r1859 383 383 } 384 384 385 [DllImport("Kernel32.dll", CharSet = CharSet.Unicode )]385 [DllImport("Kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] 386 386 [return: MarshalAs(UnmanagedType.Bool)] 387 387 public static extern bool DeviceIoControl(SafeFileHandle hDevice, -
trunk/eraser6/Eraser.Util/NtfsApi.cs
r1843 r1859 48 48 public static long GetMftRecordSegmentSize(VolumeInfo volume) 49 49 { 50 return GetNtfsVolumeData(volume).BytesPerFileRecordSegment; 50 try 51 { 52 return GetNtfsVolumeData(volume).BytesPerFileRecordSegment; 53 } 54 catch (UnauthorizedAccessException) 55 { 56 return Math.Min(volume.ClusterSize, 1024); 57 } 51 58 } 52 59 … … 58 65 /// <returns>The NTFS_VOLUME_DATA_BUFFER structure representing the data 59 66 /// file systme structures for the volume.</returns> 67 /// <exception cref="UnauthorizedAccessException">Thrown when the current user 68 /// does not have the permissions required to obtain the volume information.</exception> 60 69 internal static NativeMethods.NTFS_VOLUME_DATA_BUFFER GetNtfsVolumeData(VolumeInfo volume) 61 70 { 62 71 using (SafeFileHandle volumeHandle = volume.OpenHandle( 63 NativeMethods.FILE_READ_ATTRIBUTES, FileShare.ReadWrite, FileOptions.None))72 FileAccess.Read, FileShare.ReadWrite, FileOptions.None)) 64 73 { 65 74 uint resultSize = 0;
Note: See TracChangeset
for help on using the changeset viewer.
