mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-14 15:52:47 -05:00
dll: FspShareAccessRemove in cleanup
This commit is contained in:
@ -6,6 +6,23 @@
|
||||
|
||||
#include <dll/library.h>
|
||||
|
||||
FSP_API VOID FspShareAccessRemove(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request, FSP_FILE_NODE *FileNode)
|
||||
{
|
||||
if (Request->Req.Cleanup.ReadAccess ||
|
||||
Request->Req.Cleanup.WriteAccess ||
|
||||
Request->Req.Cleanup.DeleteAccess)
|
||||
{
|
||||
FileNode->ShareAccess.OpenCount--;
|
||||
FileNode->ShareAccess.Readers -= Request->Req.Cleanup.ReadAccess;
|
||||
FileNode->ShareAccess.Writers -= Request->Req.Cleanup.WriteAccess;
|
||||
FileNode->ShareAccess.Deleters -= Request->Req.Cleanup.DeleteAccess;
|
||||
FileNode->ShareAccess.SharedRead -= Request->Req.Cleanup.SharedRead;
|
||||
FileNode->ShareAccess.SharedWrite -= Request->Req.Cleanup.SharedWrite;
|
||||
FileNode->ShareAccess.SharedDelete -= Request->Req.Cleanup.SharedDelete;
|
||||
}
|
||||
}
|
||||
|
||||
FSP_API NTSTATUS FspFileSystemOpCleanup(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request)
|
||||
{
|
||||
@ -18,6 +35,8 @@ FSP_API NTSTATUS FspFileSystemOpCleanup(FSP_FILE_SYSTEM *FileSystem,
|
||||
|
||||
FspFileNodeLock(FileNode);
|
||||
|
||||
FspShareAccessRemove(FileSystem, Request, FileNode);
|
||||
|
||||
/* propagate the DeleteOnClose flag to DeletePending */
|
||||
if (FileNode->Flags.DeleteOnClose)
|
||||
FileNode->Flags.DeletePending = TRUE;
|
||||
|
@ -166,7 +166,7 @@ exit:
|
||||
return Result;
|
||||
}
|
||||
|
||||
FSP_API NTSTATUS FspShareCheck(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_API NTSTATUS FspShareAccessCheck(FSP_FILE_SYSTEM *FileSystem,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request, DWORD GrantedAccess, FSP_FILE_NODE *FileNode)
|
||||
{
|
||||
DWORD ShareAccess = Request->Req.Create.ShareAccess;
|
||||
@ -240,7 +240,7 @@ FSP_API VOID FspFileSystemPostCreateCheck(FSP_FILE_SYSTEM *FileSystem,
|
||||
{
|
||||
FspFileNodeLock(FileNode);
|
||||
|
||||
FspShareCheck(FileSystem, Request, GrantedAccess, FileNode);
|
||||
FspShareAccessCheck(FileSystem, Request, GrantedAccess, FileNode);
|
||||
|
||||
if (Request->Req.Create.CreateOptions & FILE_DELETE_ON_CLOSE)
|
||||
FileNode->Flags.DeleteOnClose = TRUE;
|
||||
@ -270,7 +270,7 @@ FSP_API NTSTATUS FspFileSystemPostOpenCheck(FSP_FILE_SYSTEM *FileSystem,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
Result = FspShareCheck(FileSystem, Request, GrantedAccess, FileNode);
|
||||
Result = FspShareAccessCheck(FileSystem, Request, GrantedAccess, FileNode);
|
||||
if (!NT_SUCCESS(Result))
|
||||
goto exit;
|
||||
|
||||
|
Reference in New Issue
Block a user