mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: IRP_MJ_SET_INFORMATION: FileEndOfFileInformation: ignore calls with the AdvanceOnly parameter
This commit is contained in:
parent
6f3f57366a
commit
bc9f983285
@ -226,7 +226,6 @@ typedef struct
|
||||
struct
|
||||
{
|
||||
UINT64 FileSize;
|
||||
UINT32 AdvanceOnly:1;
|
||||
} EndOfFile;
|
||||
struct
|
||||
{
|
||||
|
@ -79,7 +79,7 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
||||
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||
NTSTATUS (*SetFileSize)(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||
PVOID FileNode, UINT64 FileSize, BOOLEAN AdvanceOnly,
|
||||
PVOID FileNode, UINT64 FileSize,
|
||||
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||
NTSTATUS (*CanDelete)(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||
|
@ -459,7 +459,6 @@ FSP_API NTSTATUS FspFileSystemOpSetInformation(FSP_FILE_SYSTEM *FileSystem,
|
||||
Result = FileSystem->Interface->SetFileSize(FileSystem, Request,
|
||||
(PVOID)Request->Req.SetInformation.UserContext,
|
||||
Request->Req.SetInformation.Info.Allocation.AllocationSize,
|
||||
FALSE,
|
||||
&FileInfo);
|
||||
}
|
||||
}
|
||||
@ -469,7 +468,6 @@ FSP_API NTSTATUS FspFileSystemOpSetInformation(FSP_FILE_SYSTEM *FileSystem,
|
||||
Result = FileSystem->Interface->SetFileSize(FileSystem, Request,
|
||||
(PVOID)Request->Req.SetInformation.UserContext,
|
||||
Request->Req.SetInformation.Info.EndOfFile.FileSize,
|
||||
Request->Req.SetInformation.Info.EndOfFile.AdvanceOnly,
|
||||
&FileInfo);
|
||||
break;
|
||||
case 13/*FileDispositionInformation*/:
|
||||
|
@ -38,7 +38,7 @@ static NTSTATUS FspFsvolSetBasicInformation(PFILE_OBJECT FileObject,
|
||||
PVOID Buffer, ULONG Length,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_TRANSACT_RSP *Response);
|
||||
static NTSTATUS FspFsvolSetEndOfFileInformation(PFILE_OBJECT FileObject,
|
||||
PVOID Buffer, ULONG Length, BOOLEAN AdvanceOnly,
|
||||
PVOID Buffer, ULONG Length,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_TRANSACT_RSP *Response);
|
||||
static NTSTATUS FspFsvolSetPositionInformation(PFILE_OBJECT FileObject,
|
||||
PVOID Buffer, ULONG Length);
|
||||
@ -640,7 +640,7 @@ static NTSTATUS FspFsvolSetBasicInformation(PFILE_OBJECT FileObject,
|
||||
}
|
||||
|
||||
static NTSTATUS FspFsvolSetEndOfFileInformation(PFILE_OBJECT FileObject,
|
||||
PVOID Buffer, ULONG Length, BOOLEAN AdvanceOnly,
|
||||
PVOID Buffer, ULONG Length,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_TRANSACT_RSP *Response)
|
||||
{
|
||||
PAGED_CODE();
|
||||
@ -656,9 +656,7 @@ static NTSTATUS FspFsvolSetEndOfFileInformation(PFILE_OBJECT FileObject,
|
||||
BOOLEAN Success;
|
||||
|
||||
Request->Req.SetInformation.Info.EndOfFile.FileSize = Info->EndOfFile.QuadPart;
|
||||
Request->Req.SetInformation.Info.EndOfFile.AdvanceOnly = AdvanceOnly;
|
||||
|
||||
// !!!: REVISIT after better understanding relationship between AllocationSize and FileSize
|
||||
Success = MmCanFileBeTruncated(FileObject->SectionObjectPointer, &Info->EndOfFile);
|
||||
if (!Success)
|
||||
return STATUS_USER_MAPPED_FILE;
|
||||
@ -964,8 +962,11 @@ static NTSTATUS FspFsvolSetInformation(
|
||||
Result = FspFsvolSetBasicInformation(FileObject, Buffer, Length, 0, 0);
|
||||
break;
|
||||
case FileEndOfFileInformation:
|
||||
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length,
|
||||
IrpSp->Parameters.SetFile.AdvanceOnly, 0, 0);
|
||||
if (IrpSp->Parameters.SetFile.AdvanceOnly)
|
||||
/* we do not support ValidDataLength currently! */
|
||||
Result = STATUS_INVALID_PARAMETER;
|
||||
else
|
||||
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length, 0, 0);
|
||||
break;
|
||||
case FileLinkInformation:
|
||||
Result = STATUS_INVALID_PARAMETER; /* no hard link support */
|
||||
@ -1012,8 +1013,7 @@ static NTSTATUS FspFsvolSetInformation(
|
||||
Result = FspFsvolSetBasicInformation(FileObject, Buffer, Length, Request, 0);
|
||||
break;
|
||||
case FileEndOfFileInformation:
|
||||
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length,
|
||||
IrpSp->Parameters.SetFile.AdvanceOnly, Request, 0);
|
||||
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length, Request, 0);
|
||||
break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
@ -1062,8 +1062,7 @@ NTSTATUS FspFsvolSetInformationComplete(
|
||||
Result = FspFsvolSetBasicInformation(FileObject, Buffer, Length, Request, Response);
|
||||
break;
|
||||
case FileEndOfFileInformation:
|
||||
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length,
|
||||
IrpSp->Parameters.SetFile.AdvanceOnly, Request, Response);
|
||||
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length, Request, Response);
|
||||
break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
|
@ -470,7 +470,7 @@ NTSTATUS SetAllocationSize(FSP_FILE_SYSTEM *FileSystem,
|
||||
|
||||
NTSTATUS SetFileSize(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||
PVOID FileNode0, UINT64 FileSize, BOOLEAN AdvanceOnly,
|
||||
PVOID FileNode0, UINT64 FileSize,
|
||||
FSP_FSCTL_FILE_INFO *FileInfo)
|
||||
{
|
||||
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user