sys: FspFsvolFileSystemControlReparsePoint: STATUS_ACCESS_DENIED

This commit is contained in:
Bill Zissimopoulos 2016-12-31 23:01:40 -08:00
parent 6b37e2ef12
commit 830985d331
3 changed files with 7 additions and 0 deletions

View File

@ -897,6 +897,7 @@ NTSTATUS FspFsvolCreateComplete(
/* set up the AccessState */ /* set up the AccessState */
AccessState->RemainingDesiredAccess = 0; AccessState->RemainingDesiredAccess = 0;
AccessState->PreviouslyGrantedAccess = Response->Rsp.Create.Opened.GrantedAccess; AccessState->PreviouslyGrantedAccess = Response->Rsp.Create.Opened.GrantedAccess;
FileDesc->GrantedAccess = Response->Rsp.Create.Opened.GrantedAccess;
/* set up the FileObject */ /* set up the FileObject */
if (0 != FsvolDeviceExtension->FsvrtDeviceObject) if (0 != FsvolDeviceExtension->FsvrtDeviceObject)

View File

@ -1218,6 +1218,7 @@ typedef struct
{ {
FSP_FILE_NODE *FileNode; FSP_FILE_NODE *FileNode;
UINT64 UserContext2; UINT64 UserContext2;
UINT32 GrantedAccess;
UINT32 UINT32
CaseSensitive:1, HasTraversePrivilege:1, DeleteOnClose:1, CaseSensitive:1, HasTraversePrivilege:1, DeleteOnClose:1,
DidSetMetadata:1, DidSetMetadata:1,

View File

@ -148,6 +148,11 @@ static NTSTATUS FspFsvolFileSystemControlReparsePoint(
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
return Result; return Result;
/* NTFS seems to require one of these rights to allow FSCTL_SET_REPARSE_POINT */
if (!FlagOn(FileDesc->GrantedAccess,
FILE_WRITE_DATA | FILE_APPEND_DATA | FILE_WRITE_ATTRIBUTES))
return STATUS_ACCESS_DENIED;
ReparseData = (PREPARSE_DATA_BUFFER)InputBuffer; ReparseData = (PREPARSE_DATA_BUFFER)InputBuffer;
if (IO_REPARSE_TAG_SYMLINK == ReparseData->ReparseTag) if (IO_REPARSE_TAG_SYMLINK == ReparseData->ReparseTag)