From a9b4fd4634653d17145ca25adb715355bc1c258e Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 11 Nov 2016 10:54:21 -0800 Subject: [PATCH] sys: FspFileNodeClose --- src/sys/close.c | 2 +- src/sys/create.c | 10 +++++----- src/sys/driver.h | 5 +++-- src/sys/file.c | 12 +++++++----- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/sys/close.c b/src/sys/close.c index d7b4821d..44a65782 100644 --- a/src/sys/close.c +++ b/src/sys/close.c @@ -74,7 +74,7 @@ static NTSTATUS FspFsvolClose( Request->Req.Close.UserContext = FileNode->UserContext; Request->Req.Close.UserContext2 = FileDesc->UserContext2; - FspFileNodeClose(FileNode, FileObject, FALSE, FALSE); + FspFileNodeClose(FileNode, 0, FALSE); /* delete the FileDesc and deref the FileNode; order is important (FileDesc has FileNode ref) */ FspFileDescDelete(FileDesc); /* this will also close the MainFileObject if any */ diff --git a/src/sys/create.c b/src/sys/create.c index 80854e82..bb816e14 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -851,7 +851,7 @@ NTSTATUS FspFsvolCreateComplete( Result = FspFsvolCreateSharingViolation(Irp, Response, OpenedFileNode); if (STATUS_PENDING != Result) { - FspFileNodeClose(OpenedFileNode, FileObject, FALSE, TRUE); + FspFileNodeClose(OpenedFileNode, 0, TRUE); FspFileNodeDereference(OpenedFileNode); Result = STATUS_SHARING_VIOLATION; } @@ -1057,7 +1057,7 @@ static NTSTATUS FspFsvolCreateTryOpen(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Re if (0 == Request) { FspFsvolCreatePostClose(FileDesc); - FspFileNodeClose(FileNode, FileObject, TRUE, TRUE); + FspFileNodeClose(FileNode, FileObject, TRUE); } return DeleteOnClose ? STATUS_CANNOT_DELETE : STATUS_SHARING_VIOLATION; @@ -1163,7 +1163,7 @@ static VOID FspFsvolCreateTryOpenRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PV ASSERT(0 != FileObject); FspFsvolCreatePostClose(FileDesc); - FspFileNodeClose(FileDesc->FileNode, FileObject, TRUE, TRUE); + FspFileNodeClose(FileDesc->FileNode, FileObject, TRUE); FspFileNodeDereference(FileDesc->FileNode); FspFileDescDelete(FileDesc); } @@ -1190,7 +1190,7 @@ static VOID FspFsvolCreateOverwriteRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, else if (RequestProcessing == State) FspFileNodeReleaseOwner(FileDesc->FileNode, Full, Request); - FspFileNodeClose(FileDesc->FileNode, FileObject, TRUE, TRUE); + FspFileNodeClose(FileDesc->FileNode, FileObject, TRUE); FspFileNodeDereference(FileDesc->FileNode); FspFileDescDelete(FileDesc); } @@ -1298,7 +1298,7 @@ static NTSTATUS FspFsvolCreateSharingViolationWork( exit: FspFileNodeRelease(FileNode, Main); - FspFileNodeClose(FileNode, IrpSp->FileObject, FALSE, TRUE); + FspFileNodeClose(FileNode, 0, TRUE); FspFileNodeDereference(FileNode); FspIopRequestContext(Request, FspIopRequestExtraContext) = 0; diff --git a/src/sys/driver.h b/src/sys/driver.h index 7bf2bfc4..fd4db509 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -1107,8 +1107,9 @@ NTSTATUS FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, VOID FspFileNodeCleanup(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, PBOOLEAN PDeletePending); VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject); -VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, - BOOLEAN RemoveShareAccess, BOOLEAN HandleCleanup); +VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, + PFILE_OBJECT FileObject, /* non-0 to remove share access */ + BOOLEAN HandleCleanup); /* TRUE to decrement handle count */ NTSTATUS FspFileNodeFlushAndPurgeCache(FSP_FILE_NODE *FileNode, UINT64 FlushOffset64, ULONG FlushLength, BOOLEAN FlushAndPurge); VOID FspFileNodeRename(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName); diff --git a/src/sys/file.c b/src/sys/file.c index 3721b542..9f3d3504 100644 --- a/src/sys/file.c +++ b/src/sys/file.c @@ -36,8 +36,9 @@ NTSTATUS FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, VOID FspFileNodeCleanup(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, PBOOLEAN PDeletePending); VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject); -VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, - BOOLEAN RemoveShareAccess, BOOLEAN HandleCleanup); +VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, + PFILE_OBJECT FileObject, /* non-0 to remove share access */ + BOOLEAN HandleCleanup); /* TRUE to decrement handle count */ NTSTATUS FspFileNodeFlushAndPurgeCache(FSP_FILE_NODE *FileNode, UINT64 FlushOffset64, ULONG FlushLength, BOOLEAN FlushAndPurge); VOID FspFileNodeRename(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName); @@ -720,8 +721,9 @@ VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject FspFileNodeDereference(FileNode); } -VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, - BOOLEAN RemoveShareAccess, BOOLEAN HandleCleanup) +VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, + PFILE_OBJECT FileObject, /* non-0 to remove share access */ + BOOLEAN HandleCleanup) /* TRUE to decrement handle count */ { /* * Close the FileNode. If the OpenCount becomes zero remove it @@ -737,7 +739,7 @@ VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, FspFsvolDeviceLockContextTable(FsvolDeviceObject); - if (RemoveShareAccess) + if (0 != FileObject) { /* * Sharing violations between main file and streams were determined