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
|
struct
|
||||||
{
|
{
|
||||||
UINT64 FileSize;
|
UINT64 FileSize;
|
||||||
UINT32 AdvanceOnly:1;
|
|
||||||
} EndOfFile;
|
} EndOfFile;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -79,7 +79,7 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
FSP_FSCTL_FILE_INFO *FileInfo);
|
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
NTSTATUS (*SetFileSize)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*SetFileSize)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode, UINT64 FileSize, BOOLEAN AdvanceOnly,
|
PVOID FileNode, UINT64 FileSize,
|
||||||
FSP_FSCTL_FILE_INFO *FileInfo);
|
FSP_FSCTL_FILE_INFO *FileInfo);
|
||||||
NTSTATUS (*CanDelete)(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS (*CanDelete)(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
|
@ -459,7 +459,6 @@ FSP_API NTSTATUS FspFileSystemOpSetInformation(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
Result = FileSystem->Interface->SetFileSize(FileSystem, Request,
|
Result = FileSystem->Interface->SetFileSize(FileSystem, Request,
|
||||||
(PVOID)Request->Req.SetInformation.UserContext,
|
(PVOID)Request->Req.SetInformation.UserContext,
|
||||||
Request->Req.SetInformation.Info.Allocation.AllocationSize,
|
Request->Req.SetInformation.Info.Allocation.AllocationSize,
|
||||||
FALSE,
|
|
||||||
&FileInfo);
|
&FileInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -469,7 +468,6 @@ FSP_API NTSTATUS FspFileSystemOpSetInformation(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
Result = FileSystem->Interface->SetFileSize(FileSystem, Request,
|
Result = FileSystem->Interface->SetFileSize(FileSystem, Request,
|
||||||
(PVOID)Request->Req.SetInformation.UserContext,
|
(PVOID)Request->Req.SetInformation.UserContext,
|
||||||
Request->Req.SetInformation.Info.EndOfFile.FileSize,
|
Request->Req.SetInformation.Info.EndOfFile.FileSize,
|
||||||
Request->Req.SetInformation.Info.EndOfFile.AdvanceOnly,
|
|
||||||
&FileInfo);
|
&FileInfo);
|
||||||
break;
|
break;
|
||||||
case 13/*FileDispositionInformation*/:
|
case 13/*FileDispositionInformation*/:
|
||||||
|
@ -38,7 +38,7 @@ static NTSTATUS FspFsvolSetBasicInformation(PFILE_OBJECT FileObject,
|
|||||||
PVOID Buffer, ULONG Length,
|
PVOID Buffer, ULONG Length,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_TRANSACT_RSP *Response);
|
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
static NTSTATUS FspFsvolSetEndOfFileInformation(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);
|
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_TRANSACT_RSP *Response);
|
||||||
static NTSTATUS FspFsvolSetPositionInformation(PFILE_OBJECT FileObject,
|
static NTSTATUS FspFsvolSetPositionInformation(PFILE_OBJECT FileObject,
|
||||||
PVOID Buffer, ULONG Length);
|
PVOID Buffer, ULONG Length);
|
||||||
@ -640,7 +640,7 @@ static NTSTATUS FspFsvolSetBasicInformation(PFILE_OBJECT FileObject,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS FspFsvolSetEndOfFileInformation(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)
|
FSP_FSCTL_TRANSACT_REQ *Request, const FSP_FSCTL_TRANSACT_RSP *Response)
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
@ -656,9 +656,7 @@ static NTSTATUS FspFsvolSetEndOfFileInformation(PFILE_OBJECT FileObject,
|
|||||||
BOOLEAN Success;
|
BOOLEAN Success;
|
||||||
|
|
||||||
Request->Req.SetInformation.Info.EndOfFile.FileSize = Info->EndOfFile.QuadPart;
|
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);
|
Success = MmCanFileBeTruncated(FileObject->SectionObjectPointer, &Info->EndOfFile);
|
||||||
if (!Success)
|
if (!Success)
|
||||||
return STATUS_USER_MAPPED_FILE;
|
return STATUS_USER_MAPPED_FILE;
|
||||||
@ -964,8 +962,11 @@ static NTSTATUS FspFsvolSetInformation(
|
|||||||
Result = FspFsvolSetBasicInformation(FileObject, Buffer, Length, 0, 0);
|
Result = FspFsvolSetBasicInformation(FileObject, Buffer, Length, 0, 0);
|
||||||
break;
|
break;
|
||||||
case FileEndOfFileInformation:
|
case FileEndOfFileInformation:
|
||||||
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length,
|
if (IrpSp->Parameters.SetFile.AdvanceOnly)
|
||||||
IrpSp->Parameters.SetFile.AdvanceOnly, 0, 0);
|
/* we do not support ValidDataLength currently! */
|
||||||
|
Result = STATUS_INVALID_PARAMETER;
|
||||||
|
else
|
||||||
|
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length, 0, 0);
|
||||||
break;
|
break;
|
||||||
case FileLinkInformation:
|
case FileLinkInformation:
|
||||||
Result = STATUS_INVALID_PARAMETER; /* no hard link support */
|
Result = STATUS_INVALID_PARAMETER; /* no hard link support */
|
||||||
@ -1012,8 +1013,7 @@ static NTSTATUS FspFsvolSetInformation(
|
|||||||
Result = FspFsvolSetBasicInformation(FileObject, Buffer, Length, Request, 0);
|
Result = FspFsvolSetBasicInformation(FileObject, Buffer, Length, Request, 0);
|
||||||
break;
|
break;
|
||||||
case FileEndOfFileInformation:
|
case FileEndOfFileInformation:
|
||||||
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length,
|
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length, Request, 0);
|
||||||
IrpSp->Parameters.SetFile.AdvanceOnly, Request, 0);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
@ -1062,8 +1062,7 @@ NTSTATUS FspFsvolSetInformationComplete(
|
|||||||
Result = FspFsvolSetBasicInformation(FileObject, Buffer, Length, Request, Response);
|
Result = FspFsvolSetBasicInformation(FileObject, Buffer, Length, Request, Response);
|
||||||
break;
|
break;
|
||||||
case FileEndOfFileInformation:
|
case FileEndOfFileInformation:
|
||||||
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length,
|
Result = FspFsvolSetEndOfFileInformation(FileObject, Buffer, Length, Request, Response);
|
||||||
IrpSp->Parameters.SetFile.AdvanceOnly, Request, Response);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
|
@ -470,7 +470,7 @@ NTSTATUS SetAllocationSize(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
|
|
||||||
NTSTATUS SetFileSize(FSP_FILE_SYSTEM *FileSystem,
|
NTSTATUS SetFileSize(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
PVOID FileNode0, UINT64 FileSize, BOOLEAN AdvanceOnly,
|
PVOID FileNode0, UINT64 FileSize,
|
||||||
FSP_FSCTL_FILE_INFO *FileInfo)
|
FSP_FSCTL_FILE_INFO *FileInfo)
|
||||||
{
|
{
|
||||||
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user