mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-07-03 00:03:19 +02:00
NTFileSystemHelper: Improved ToFileAccess and ToFileShare implementations
This commit is contained in:
parent
f1965ec7ca
commit
f9ad9f9b5e
1 changed files with 44 additions and 49 deletions
|
@ -217,55 +217,6 @@ namespace SMBLibrary.Server
|
|||
return NTStatus.STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
public static FileAccess ToFileAccess(FileAccessMask desiredAccess)
|
||||
{
|
||||
if ((desiredAccess & FileAccessMask.GENERIC_ALL) > 0 ||
|
||||
(desiredAccess & FileAccessMask.MAXIMUM_ALLOWED) > 0 ||
|
||||
((desiredAccess & FileAccessMask.FILE_READ_DATA) > 0 && (desiredAccess & FileAccessMask.FILE_WRITE_DATA) > 0) ||
|
||||
((desiredAccess & FileAccessMask.FILE_READ_DATA) > 0 && (desiredAccess & FileAccessMask.FILE_APPEND_DATA) > 0))
|
||||
{
|
||||
return FileAccess.ReadWrite;
|
||||
}
|
||||
else if ((desiredAccess & FileAccessMask.GENERIC_WRITE) > 0 ||
|
||||
(desiredAccess & FileAccessMask.FILE_WRITE_DATA) > 0 ||
|
||||
(desiredAccess & FileAccessMask.FILE_APPEND_DATA) > 0)
|
||||
{
|
||||
return FileAccess.Write;
|
||||
}
|
||||
else if ((desiredAccess & FileAccessMask.FILE_READ_DATA) > 0)
|
||||
{
|
||||
return FileAccess.Read;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (FileAccess)0;
|
||||
}
|
||||
}
|
||||
|
||||
public static FileShare ToFileShare(ShareAccess shareAccess)
|
||||
{
|
||||
if ((shareAccess & ShareAccess.FILE_SHARE_READ) > 0 && (shareAccess & ShareAccess.FILE_SHARE_WRITE) > 0)
|
||||
{
|
||||
return FileShare.ReadWrite;
|
||||
}
|
||||
else if ((shareAccess & ShareAccess.FILE_SHARE_WRITE) > 0)
|
||||
{
|
||||
return FileShare.Write;
|
||||
}
|
||||
else if ((shareAccess & ShareAccess.FILE_SHARE_READ) > 0)
|
||||
{
|
||||
return FileShare.Read;
|
||||
}
|
||||
else if ((shareAccess & ShareAccess.FILE_SHARE_DELETE) > 0)
|
||||
{
|
||||
return FileShare.Delete;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FileShare.None;
|
||||
}
|
||||
}
|
||||
|
||||
public static NTStatus OpenFile(out Stream stream, IFileSystem fileSystem, string path, FileAccess fileAccess, ShareAccess shareAccess, bool buffered, ConnectionState state)
|
||||
{
|
||||
stream = null;
|
||||
|
@ -444,6 +395,50 @@ namespace SMBLibrary.Server
|
|||
}
|
||||
}
|
||||
|
||||
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