diff --git a/src/sys/fileinfo.c b/src/sys/fileinfo.c index 648d3a36..5f8c43c0 100644 --- a/src/sys/fileinfo.c +++ b/src/sys/fileinfo.c @@ -896,6 +896,9 @@ static NTSTATUS FspFsvolSetAllocationInformation(PFILE_OBJECT FileObject, FspFileNodeSetFileInfo(FileNode, FileObject, &Response->Rsp.SetInformation.FileInfo); FileNode->TruncateOnClose = TRUE; + /* mark the file object as modified */ + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + FspFileNodeNotifyChange(FileNode, FILE_NOTIFY_CHANGE_SIZE, FILE_ACTION_MODIFIED); } @@ -996,6 +999,9 @@ static NTSTATUS FspFsvolSetEndOfFileInformation(PFILE_OBJECT FileObject, FspFileNodeSetFileInfo(FileNode, FileObject, &Response->Rsp.SetInformation.FileInfo); FileNode->TruncateOnClose = TRUE; + /* mark the file object as modified -- FastFat does this only for Allocation though! */ + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + FspFileNodeNotifyChange(FileNode, FILE_NOTIFY_CHANGE_SIZE, FILE_ACTION_MODIFIED); } diff --git a/src/sys/write.c b/src/sys/write.c index 550f4a11..24e5e8df 100644 --- a/src/sys/write.c +++ b/src/sys/write.c @@ -229,6 +229,9 @@ static NTSTATUS FspFsvolWriteCached( if (SynchronousIo) FileObject->CurrentByteOffset.QuadPart = WriteEndOffset; + /* mark the file object as modified (if not paging I/O) */ + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + FspFileNodeRelease(FileNode, Main); return STATUS_SUCCESS; @@ -432,6 +435,10 @@ NTSTATUS FspFsvolWriteComplete( Response->Rsp.Write.FileInfo.FileSize : WriteOffset.QuadPart + Response->IoStatus.Information; + /* mark the file object as modified (if not paging I/O) */ + if (!PagingIo) + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + FspIopResetRequest(Request, 0); } else diff --git a/tst/memfs/memfs.cpp b/tst/memfs/memfs.cpp index bd257acc..0f66c110 100644 --- a/tst/memfs/memfs.cpp +++ b/tst/memfs/memfs.cpp @@ -634,7 +634,8 @@ static NTSTATUS Open(FSP_FILE_SYSTEM *FileSystem, * To properly implement this we should maintain some state of whether * we modified the file or not. Alternatively we could have the driver * report to us at Cleanup time whether the file was modified. [The - * driver does not currently maintain the FO_FILE_MODIFIED bit however.] + * FSD does maintain the FO_FILE_MODIFIED bit, but does not send it + * to us.] * * TBD. */