sys: FspFileNodeClose

This commit is contained in:
Bill Zissimopoulos 2016-11-11 10:54:21 -08:00
parent c6798b3060
commit a9b4fd4634
4 changed files with 16 additions and 13 deletions

View File

@ -74,7 +74,7 @@ static NTSTATUS FspFsvolClose(
Request->Req.Close.UserContext = FileNode->UserContext; Request->Req.Close.UserContext = FileNode->UserContext;
Request->Req.Close.UserContext2 = FileDesc->UserContext2; 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) */ /* delete the FileDesc and deref the FileNode; order is important (FileDesc has FileNode ref) */
FspFileDescDelete(FileDesc); /* this will also close the MainFileObject if any */ FspFileDescDelete(FileDesc); /* this will also close the MainFileObject if any */

View File

@ -851,7 +851,7 @@ NTSTATUS FspFsvolCreateComplete(
Result = FspFsvolCreateSharingViolation(Irp, Response, OpenedFileNode); Result = FspFsvolCreateSharingViolation(Irp, Response, OpenedFileNode);
if (STATUS_PENDING != Result) if (STATUS_PENDING != Result)
{ {
FspFileNodeClose(OpenedFileNode, FileObject, FALSE, TRUE); FspFileNodeClose(OpenedFileNode, 0, TRUE);
FspFileNodeDereference(OpenedFileNode); FspFileNodeDereference(OpenedFileNode);
Result = STATUS_SHARING_VIOLATION; Result = STATUS_SHARING_VIOLATION;
} }
@ -1057,7 +1057,7 @@ static NTSTATUS FspFsvolCreateTryOpen(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Re
if (0 == Request) if (0 == Request)
{ {
FspFsvolCreatePostClose(FileDesc); FspFsvolCreatePostClose(FileDesc);
FspFileNodeClose(FileNode, FileObject, TRUE, TRUE); FspFileNodeClose(FileNode, FileObject, TRUE);
} }
return DeleteOnClose ? STATUS_CANNOT_DELETE : STATUS_SHARING_VIOLATION; return DeleteOnClose ? STATUS_CANNOT_DELETE : STATUS_SHARING_VIOLATION;
@ -1163,7 +1163,7 @@ static VOID FspFsvolCreateTryOpenRequestFini(FSP_FSCTL_TRANSACT_REQ *Request, PV
ASSERT(0 != FileObject); ASSERT(0 != FileObject);
FspFsvolCreatePostClose(FileDesc); FspFsvolCreatePostClose(FileDesc);
FspFileNodeClose(FileDesc->FileNode, FileObject, TRUE, TRUE); FspFileNodeClose(FileDesc->FileNode, FileObject, TRUE);
FspFileNodeDereference(FileDesc->FileNode); FspFileNodeDereference(FileDesc->FileNode);
FspFileDescDelete(FileDesc); FspFileDescDelete(FileDesc);
} }
@ -1190,7 +1190,7 @@ static VOID FspFsvolCreateOverwriteRequestFini(FSP_FSCTL_TRANSACT_REQ *Request,
else if (RequestProcessing == State) else if (RequestProcessing == State)
FspFileNodeReleaseOwner(FileDesc->FileNode, Full, Request); FspFileNodeReleaseOwner(FileDesc->FileNode, Full, Request);
FspFileNodeClose(FileDesc->FileNode, FileObject, TRUE, TRUE); FspFileNodeClose(FileDesc->FileNode, FileObject, TRUE);
FspFileNodeDereference(FileDesc->FileNode); FspFileNodeDereference(FileDesc->FileNode);
FspFileDescDelete(FileDesc); FspFileDescDelete(FileDesc);
} }
@ -1298,7 +1298,7 @@ static NTSTATUS FspFsvolCreateSharingViolationWork(
exit: exit:
FspFileNodeRelease(FileNode, Main); FspFileNodeRelease(FileNode, Main);
FspFileNodeClose(FileNode, IrpSp->FileObject, FALSE, TRUE); FspFileNodeClose(FileNode, 0, TRUE);
FspFileNodeDereference(FileNode); FspFileNodeDereference(FileNode);
FspIopRequestContext(Request, FspIopRequestExtraContext) = 0; FspIopRequestContext(Request, FspIopRequestExtraContext) = 0;

View File

@ -1107,8 +1107,9 @@ NTSTATUS FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
VOID FspFileNodeCleanup(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, VOID FspFileNodeCleanup(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
PBOOLEAN PDeletePending); PBOOLEAN PDeletePending);
VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject); VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject);
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, VOID FspFileNodeClose(FSP_FILE_NODE *FileNode,
BOOLEAN RemoveShareAccess, BOOLEAN HandleCleanup); PFILE_OBJECT FileObject, /* non-0 to remove share access */
BOOLEAN HandleCleanup); /* TRUE to decrement handle count */
NTSTATUS FspFileNodeFlushAndPurgeCache(FSP_FILE_NODE *FileNode, NTSTATUS FspFileNodeFlushAndPurgeCache(FSP_FILE_NODE *FileNode,
UINT64 FlushOffset64, ULONG FlushLength, BOOLEAN FlushAndPurge); UINT64 FlushOffset64, ULONG FlushLength, BOOLEAN FlushAndPurge);
VOID FspFileNodeRename(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName); VOID FspFileNodeRename(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName);

View File

@ -36,8 +36,9 @@ NTSTATUS FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
VOID FspFileNodeCleanup(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, VOID FspFileNodeCleanup(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
PBOOLEAN PDeletePending); PBOOLEAN PDeletePending);
VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject); VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject);
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, VOID FspFileNodeClose(FSP_FILE_NODE *FileNode,
BOOLEAN RemoveShareAccess, BOOLEAN HandleCleanup); PFILE_OBJECT FileObject, /* non-0 to remove share access */
BOOLEAN HandleCleanup); /* TRUE to decrement handle count */
NTSTATUS FspFileNodeFlushAndPurgeCache(FSP_FILE_NODE *FileNode, NTSTATUS FspFileNodeFlushAndPurgeCache(FSP_FILE_NODE *FileNode,
UINT64 FlushOffset64, ULONG FlushLength, BOOLEAN FlushAndPurge); UINT64 FlushOffset64, ULONG FlushLength, BOOLEAN FlushAndPurge);
VOID FspFileNodeRename(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName); VOID FspFileNodeRename(FSP_FILE_NODE *FileNode, PUNICODE_STRING NewFileName);
@ -720,8 +721,9 @@ VOID FspFileNodeCleanupComplete(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject
FspFileNodeDereference(FileNode); FspFileNodeDereference(FileNode);
} }
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject, VOID FspFileNodeClose(FSP_FILE_NODE *FileNode,
BOOLEAN RemoveShareAccess, BOOLEAN HandleCleanup) 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 * 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); FspFsvolDeviceLockContextTable(FsvolDeviceObject);
if (RemoveShareAccess) if (0 != FileObject)
{ {
/* /*
* Sharing violations between main file and streams were determined * Sharing violations between main file and streams were determined