mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-08-15 19:53:46 +02:00
Moved helper methods to NTFileStoreHelper, Moved IOExceptionHelper
This commit is contained in:
parent
54c8a6fa1f
commit
36353c9d08
6 changed files with 111 additions and 94 deletions
|
@ -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>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue