sys: IRP_MJ_SET_INFORMATION: FileEndOfFileInformation: ignore calls with the AdvanceOnly parameter

This commit is contained in:
Bill Zissimopoulos 2016-03-03 11:35:32 -08:00
parent 6f3f57366a
commit bc9f983285
5 changed files with 11 additions and 15 deletions

View File

@ -226,7 +226,6 @@ typedef struct
struct
{
UINT64 FileSize;
UINT32 AdvanceOnly:1;
} EndOfFile;
struct
{

View File

@ -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,

View File

@ -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*/:

View File

@ -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);

View File

@ -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;