Index: /trunk/eraser6/Eraser.DefaultPlugins/FileSystems/Ntfs.cs
===================================================================
--- /trunk/eraser6/Eraser.DefaultPlugins/FileSystems/Ntfs.cs	(revision 1858)
+++ /trunk/eraser6/Eraser.DefaultPlugins/FileSystems/Ntfs.cs	(revision 1859)
@@ -165,5 +165,5 @@
 			//TODO: any more deterministic way of finding out?
 			VolumeInfo volume = VolumeInfo.FromMountPoint(info.DirectoryName);
-			if (info.Length < Math.Max(volume.ClusterSize, 1024))
+			if (info.Length < NtfsApi.GetMftRecordSegmentSize(volume))
 			{
 				//Yes it does, erase exactly to the file length
Index: /trunk/eraser6/Eraser.Util/NtfsApi.cs
===================================================================
--- /trunk/eraser6/Eraser.Util/NtfsApi.cs	(revision 1858)
+++ /trunk/eraser6/Eraser.Util/NtfsApi.cs	(revision 1859)
@@ -48,5 +48,12 @@
 		public static long GetMftRecordSegmentSize(VolumeInfo volume)
 		{
-			return GetNtfsVolumeData(volume).BytesPerFileRecordSegment;
+			try
+			{
+				return GetNtfsVolumeData(volume).BytesPerFileRecordSegment;
+			}
+			catch (UnauthorizedAccessException)
+			{
+				return Math.Min(volume.ClusterSize, 1024);
+			}
 		}
 
@@ -58,8 +65,10 @@
 		/// <returns>The NTFS_VOLUME_DATA_BUFFER structure representing the data
 		/// file systme structures for the volume.</returns>
+		/// <exception cref="UnauthorizedAccessException">Thrown when the current user
+		/// does not have the permissions required to obtain the volume information.</exception>
 		internal static NativeMethods.NTFS_VOLUME_DATA_BUFFER GetNtfsVolumeData(VolumeInfo volume)
 		{
 			using (SafeFileHandle volumeHandle = volume.OpenHandle(
-				NativeMethods.FILE_READ_ATTRIBUTES, FileShare.ReadWrite, FileOptions.None))
+				FileAccess.Read, FileShare.ReadWrite, FileOptions.None))
 			{
 				uint resultSize = 0;
Index: /trunk/eraser6/Eraser.Util/NativeMethods/Kernel.cs
===================================================================
--- /trunk/eraser6/Eraser.Util/NativeMethods/Kernel.cs	(revision 1858)
+++ /trunk/eraser6/Eraser.Util/NativeMethods/Kernel.cs	(revision 1859)
@@ -383,5 +383,5 @@
 		}
 
-		[DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
+		[DllImport("Kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
 		[return: MarshalAs(UnmanagedType.Bool)]
 		public static extern bool DeviceIoControl(SafeFileHandle hDevice,
