mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-07-23 17:55:55 +02:00
INTFileStore: CreateFile: Added FileAttributes parameter
This commit is contained in:
parent
1fbd003b0d
commit
2f39e9072c
10 changed files with 30 additions and 15 deletions
|
@ -25,7 +25,7 @@ namespace SMBLibrary
|
|||
m_fileSystem = fileSystem;
|
||||
}
|
||||
|
||||
public NTStatus CreateFile(out object handle, out FileStatus fileStatus, string path, AccessMask desiredAccess, ShareAccess shareAccess, CreateDisposition createDisposition, CreateOptions createOptions, SecurityContext securityContext)
|
||||
public NTStatus CreateFile(out object handle, out FileStatus fileStatus, string path, AccessMask desiredAccess, FileAttributes fileAttributes, ShareAccess shareAccess, CreateDisposition createDisposition, CreateOptions createOptions, SecurityContext securityContext)
|
||||
{
|
||||
handle = null;
|
||||
fileStatus = FileStatus.FILE_DOES_NOT_EXIST;
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace SMBLibrary
|
|||
/// </summary>
|
||||
public interface INTFileStore
|
||||
{
|
||||
NTStatus CreateFile(out object handle, out FileStatus fileStatus, string path, AccessMask desiredAccess, ShareAccess shareAccess, CreateDisposition createDisposition, CreateOptions createOptions, SecurityContext securityContext);
|
||||
NTStatus CreateFile(out object handle, out FileStatus fileStatus, string path, AccessMask desiredAccess, FileAttributes fileAttributes, ShareAccess shareAccess, CreateDisposition createDisposition, CreateOptions createOptions, SecurityContext securityContext);
|
||||
|
||||
NTStatus CloseFile(object handle);
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ namespace SMBLibrary
|
|||
{
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, FileAccessMask.FILE_READ_ATTRIBUTES, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, 0, securityContext);
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, FileAccessMask.FILE_READ_ATTRIBUTES, 0, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, 0, securityContext);
|
||||
if (openStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
return null;
|
||||
|
|
|
@ -22,7 +22,7 @@ namespace SMBLibrary
|
|||
m_services = services;
|
||||
}
|
||||
|
||||
public NTStatus CreateFile(out object handle, out FileStatus fileStatus, string path, AccessMask desiredAccess, ShareAccess shareAccess, CreateDisposition createDisposition, CreateOptions createOptions, SecurityContext securityContext)
|
||||
public NTStatus CreateFile(out object handle, out FileStatus fileStatus, string path, AccessMask desiredAccess, FileAttributes fileAttributes, ShareAccess shareAccess, CreateDisposition createDisposition, CreateOptions createOptions, SecurityContext securityContext)
|
||||
{
|
||||
fileStatus = FileStatus.FILE_DOES_NOT_EXIST;
|
||||
// It is possible to have a named pipe that does not use RPC (e.g. MS-WSP),
|
||||
|
|
|
@ -39,7 +39,8 @@ namespace SMBLibrary.Server.SMB1
|
|||
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
NTStatus createStatus = share.FileStore.CreateFile(out handle, out fileStatus, path, request.DesiredAccess, request.ShareAccess, request.CreateDisposition, request.CreateOptions, session.SecurityContext);
|
||||
FileAttributes fileAttributes = ToFileAttributes(request.ExtFileAttributes);
|
||||
NTStatus createStatus = share.FileStore.CreateFile(out handle, out fileStatus, path, request.DesiredAccess, fileAttributes, request.ShareAccess, request.CreateDisposition, request.CreateOptions, session.SecurityContext);
|
||||
if (createStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
state.LogToServer(Severity.Verbose, "Create: Opening '{0}{1}' failed. NTStatus: {2}.", share.Name, path, createStatus);
|
||||
|
@ -191,5 +192,19 @@ namespace SMBLibrary.Server.SMB1
|
|||
return CreateDisposition.FILE_OPEN;
|
||||
}
|
||||
}
|
||||
|
||||
private static FileAttributes ToFileAttributes(ExtendedFileAttributes extendedFileAttributes)
|
||||
{
|
||||
// We only return flags that can be used with NtCreateFile
|
||||
FileAttributes fileAttributes = FileAttributes.ReadOnly |
|
||||
FileAttributes.Hidden |
|
||||
FileAttributes.System |
|
||||
FileAttributes.Archive |
|
||||
FileAttributes.Normal |
|
||||
FileAttributes.Temporary |
|
||||
FileAttributes.Offline |
|
||||
FileAttributes.Encrypted;
|
||||
return (fileAttributes & (FileAttributes)extendedFileAttributes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
header.Status = share.FileStore.CreateFile(out handle, out fileStatus, path, desiredAccess, shareAccess, createDisposition, createOptions, session.SecurityContext);
|
||||
header.Status = share.FileStore.CreateFile(out handle, out fileStatus, path, desiredAccess, 0, shareAccess, createDisposition, createOptions, session.SecurityContext);
|
||||
if (header.Status != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
state.LogToServer(Severity.Verbose, "OpenAndX: Opening '{0}{1}' failed. NTStatus: {2}.", share.Name, path, header.Status);
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
{
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, FileAccessMask.FILE_READ_ATTRIBUTES, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, 0, securityContext);
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, FileAccessMask.FILE_READ_ATTRIBUTES, 0, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, 0, securityContext);
|
||||
if (openStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
result = null;
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
string fileName = fileNamePattern.Substring(separatorIndex + 1);
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
NTStatus createStatus = fileStore.CreateFile(out handle, out fileStatus, path, DirectoryAccessMask.FILE_LIST_DIRECTORY | DirectoryAccessMask.FILE_TRAVERSE, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, CreateOptions.FILE_DIRECTORY_FILE, securityContext);
|
||||
NTStatus createStatus = fileStore.CreateFile(out handle, out fileStatus, path, DirectoryAccessMask.FILE_LIST_DIRECTORY | DirectoryAccessMask.FILE_TRAVERSE, 0, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, CreateOptions.FILE_DIRECTORY_FILE, securityContext);
|
||||
if (createStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
result = null;
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
{
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
NTStatus createStatus = fileStore.CreateFile(out handle, out fileStatus, path, DirectoryAccessMask.FILE_ADD_SUBDIRECTORY, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_CREATE, CreateOptions.FILE_DIRECTORY_FILE, securityContext);
|
||||
NTStatus createStatus = fileStore.CreateFile(out handle, out fileStatus, path, DirectoryAccessMask.FILE_ADD_SUBDIRECTORY, 0, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_CREATE, CreateOptions.FILE_DIRECTORY_FILE, securityContext);
|
||||
if (createStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
return createStatus;
|
||||
|
@ -41,7 +41,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
{
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, DirectoryAccessMask.DELETE, 0, CreateDisposition.FILE_OPEN, createOptions, securityContext);
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, DirectoryAccessMask.DELETE, 0, 0, CreateDisposition.FILE_OPEN, createOptions, securityContext);
|
||||
if (openStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
return openStatus;
|
||||
|
@ -68,7 +68,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
{
|
||||
createOptions = CreateOptions.FILE_NON_DIRECTORY_FILE;
|
||||
}
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, oldName, DirectoryAccessMask.DELETE, 0, CreateDisposition.FILE_OPEN, createOptions, securityContext);
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, oldName, DirectoryAccessMask.DELETE, 0, 0, CreateDisposition.FILE_OPEN, createOptions, securityContext);
|
||||
if (openStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
return openStatus;
|
||||
|
@ -89,7 +89,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
{
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, (AccessMask)0, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, CreateOptions.FILE_DIRECTORY_FILE, securityContext);
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, (AccessMask)0, 0, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, CreateOptions.FILE_DIRECTORY_FILE, securityContext);
|
||||
if (openStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
return openStatus;
|
||||
|
@ -103,7 +103,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
{
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, FileAccessMask.FILE_READ_ATTRIBUTES, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, 0, securityContext);
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, FileAccessMask.FILE_READ_ATTRIBUTES, 0, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, 0, securityContext);
|
||||
if (openStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
fileInfo = null;
|
||||
|
@ -118,7 +118,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
{
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, FileAccessMask.FILE_WRITE_ATTRIBUTES, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, 0, securityContext);
|
||||
NTStatus openStatus = fileStore.CreateFile(out handle, out fileStatus, path, FileAccessMask.FILE_WRITE_ATTRIBUTES, (FileAttributes)0, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.FILE_OPEN, 0, securityContext);
|
||||
if (openStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
return openStatus;
|
||||
|
|
|
@ -35,7 +35,7 @@ namespace SMBLibrary.Server.SMB2
|
|||
|
||||
object handle;
|
||||
FileStatus fileStatus;
|
||||
NTStatus createStatus = share.FileStore.CreateFile(out handle, out fileStatus, path, request.DesiredAccess, request.ShareAccess, request.CreateDisposition, request.CreateOptions, session.SecurityContext);
|
||||
NTStatus createStatus = share.FileStore.CreateFile(out handle, out fileStatus, path, request.DesiredAccess, request.FileAttributes, request.ShareAccess, request.CreateDisposition, request.CreateOptions, session.SecurityContext);
|
||||
if (createStatus != NTStatus.STATUS_SUCCESS)
|
||||
{
|
||||
state.LogToServer(Severity.Verbose, "Create: Opening '{0}{1}' failed. NTStatus: {2}.", share.Name, path, createStatus);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue