Moved helper methods to NTFileStoreHelper, Moved IOExceptionHelper

This commit is contained in:
Tal Aloni 2017-02-10 19:53:54 +02:00
parent 54c8a6fa1f
commit 36353c9d08
6 changed files with 111 additions and 94 deletions

View file

@ -22,7 +22,7 @@ namespace SMBLibrary.Server
public static NTStatus CreateFile(out FileSystemEntry entry, IFileSystem fileSystem, string path, AccessMask desiredAccess, CreateDisposition createDisposition, CreateOptions createOptions, ConnectionState state)
{
FileAccess createAccess = ToCreateFileAccess(desiredAccess, createDisposition);
FileAccess createAccess = NTFileStoreHelper.ToCreateFileAccess(desiredAccess, createDisposition);
bool requestedWriteAccess = (createAccess & FileAccess.Write) > 0;
bool forceDirectory = (createOptions & CreateOptions.FILE_DIRECTORY_FILE) > 0;
@ -216,7 +216,7 @@ namespace SMBLibrary.Server
public static NTStatus OpenFile(out Stream stream, IFileSystem fileSystem, string path, FileAccess fileAccess, ShareAccess shareAccess, bool buffered, ConnectionState state)
{
stream = null;
FileShare fileShare = NTFileSystemHelper.ToFileShare(shareAccess);
FileShare fileShare = NTFileStoreHelper.ToFileShare(shareAccess);
state.LogToServer(Severity.Verbose, "OpenFile: Opening '{0}', Access={1}, Share={2}, Buffered={3}", path, fileAccess, fileShare, buffered);
try
{
@ -364,92 +364,6 @@ namespace SMBLibrary.Server
}
}
public static FileAccess ToCreateFileAccess(AccessMask desiredAccess, CreateDisposition createDisposition)
{
FileAccess result = 0;
if ((desiredAccess.File & FileAccessMask.FILE_READ_DATA) > 0 ||
(desiredAccess.File & FileAccessMask.FILE_READ_EA) > 0 ||
(desiredAccess.File & FileAccessMask.FILE_READ_ATTRIBUTES) > 0 ||
(desiredAccess.File & FileAccessMask.MAXIMUM_ALLOWED) > 0 ||
(desiredAccess.File & FileAccessMask.GENERIC_ALL) > 0 ||
(desiredAccess.File & FileAccessMask.GENERIC_READ) > 0)
{
result |= FileAccess.Read;
}
if ((desiredAccess.File & FileAccessMask.FILE_WRITE_DATA) > 0 ||
(desiredAccess.File & FileAccessMask.FILE_APPEND_DATA) > 0 ||
(desiredAccess.File & FileAccessMask.FILE_WRITE_EA) > 0 ||
(desiredAccess.File & FileAccessMask.FILE_WRITE_ATTRIBUTES) > 0 ||
(desiredAccess.File & FileAccessMask.DELETE) > 0 ||
(desiredAccess.File & FileAccessMask.WRITE_DAC) > 0 ||
(desiredAccess.File & FileAccessMask.WRITE_OWNER) > 0 ||
(desiredAccess.File & FileAccessMask.MAXIMUM_ALLOWED) > 0 ||
(desiredAccess.File & FileAccessMask.GENERIC_ALL) > 0 ||
(desiredAccess.File & FileAccessMask.GENERIC_WRITE) > 0)
{
result |= FileAccess.Write;
}
if ((desiredAccess.Directory & DirectoryAccessMask.FILE_DELETE_CHILD) > 0)
{
result |= FileAccess.Write;
}
if (createDisposition == CreateDisposition.FILE_CREATE ||
createDisposition == CreateDisposition.FILE_SUPERSEDE)
{
result |= FileAccess.Write;
}
return result;
}
public static FileAccess ToFileAccess(FileAccessMask desiredAccess)
{
FileAccess result = 0;
if ((desiredAccess & FileAccessMask.FILE_READ_DATA) > 0 ||
(desiredAccess & FileAccessMask.MAXIMUM_ALLOWED) > 0 ||
(desiredAccess & FileAccessMask.GENERIC_ALL) > 0 ||
(desiredAccess & FileAccessMask.GENERIC_READ) > 0)
{
result |= FileAccess.Read;
}
if ((desiredAccess & FileAccessMask.FILE_WRITE_DATA) > 0 ||
(desiredAccess & FileAccessMask.FILE_APPEND_DATA) > 0 ||
(desiredAccess & FileAccessMask.MAXIMUM_ALLOWED) > 0 ||
(desiredAccess & FileAccessMask.GENERIC_ALL) > 0 ||
(desiredAccess & FileAccessMask.GENERIC_WRITE) > 0)
{
result |= FileAccess.Write;
}
return result;
}
public static FileShare ToFileShare(ShareAccess shareAccess)
{
FileShare result = FileShare.None;
if ((shareAccess & ShareAccess.FILE_SHARE_READ) > 0)
{
result |= FileShare.Read;
}
if ((shareAccess & ShareAccess.FILE_SHARE_WRITE) > 0)
{
result |= FileShare.Write;
}
if ((shareAccess & ShareAccess.FILE_SHARE_DELETE) > 0)
{
result |= FileShare.Delete;
}
return result;
}
/// <summary>
/// Will return a virtual allocation size, assuming 4096 bytes per cluster
/// </summary>