From d96d33557f3904d7c6f88453d3ab9723149b89c8 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Mon, 4 Jan 2016 21:57:23 -0800 Subject: [PATCH] dll: create --- src/dll/create.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/dll/create.c b/src/dll/create.c index 8b98f8ea..908e3852 100644 --- a/src/dll/create.c +++ b/src/dll/create.c @@ -242,6 +242,9 @@ FSP_API VOID FspFileSystemPostCreateCheck(FSP_FILE_SYSTEM *FileSystem, memset(&FileNode->ShareAccess, 0, sizeof FileNode->ShareAccess); FspShareCheck(FileSystem, Request, GrantedAccess, FileNode); + + if (Request->Req.Create.CreateOptions & FILE_DELETE_ON_CLOSE) + FileNode->Flags.DeleteOnClose = TRUE; } FSP_API NTSTATUS FspFileSystemPreOpenCheck(FSP_FILE_SYSTEM *FileSystem, @@ -254,7 +257,17 @@ FSP_API NTSTATUS FspFileSystemPreOpenCheck(FSP_FILE_SYSTEM *FileSystem, FSP_API NTSTATUS FspFileSystemPostOpenCheck(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request, DWORD GrantedAccess, FSP_FILE_NODE *FileNode) { - return FspShareCheck(FileSystem, Request, GrantedAccess, FileNode); + NTSTATUS Result; + + if (FileNode->Flags.DeletePending) + return STATUS_DELETE_PENDING; + + Result = FspShareCheck(FileSystem, Request, GrantedAccess, FileNode); + if (!NT_SUCCESS(Result)) + return Result; + + if (Request->Req.Create.CreateOptions & FILE_DELETE_ON_CLOSE) + FileNode->Flags.DeleteOnClose = TRUE; } FSP_API NTSTATUS FspFileSystemPreOverwriteCheck(FSP_FILE_SYSTEM *FileSystem, @@ -280,7 +293,7 @@ FSP_API NTSTATUS FspFileSystemPreOverwriteCheck(FSP_FILE_SYSTEM *FileSystem, FSP_API NTSTATUS FspFileSystemPostOverwriteCheck(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request, DWORD GrantedAccess, FSP_FILE_NODE *FileNode) { - return FspShareCheck(FileSystem, Request, GrantedAccess, FileNode); + return FspFileSystemPostOpenCheck(FileSystem, Request, GrantedAccess, FileNode); } static BOOLEAN FspIsRootDirectory(PWSTR FileName)