mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: FspFileNodeClose
This commit is contained in:
parent
c6798b3060
commit
a9b4fd4634
@ -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 */
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user