From 0da55d012c3d382fa1040007546b194a494d56da Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sun, 3 Jan 2016 17:26:35 -0800 Subject: [PATCH] dll: WIP --- src/dll/create.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/dll/create.c b/src/dll/create.c index 5f9814d2..8ae6b3d3 100644 --- a/src/dll/create.c +++ b/src/dll/create.c @@ -99,25 +99,34 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem, { if (STATUS_OBJECT_NAME_NOT_FOUND != Result) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); - Create = TRUE; + } + + if (!Create) + { + Result = FileSystem->Interface->FileOpen(FileSystem, Request, &FileNode); + { + if (STATUS_OBJECT_NAME_NOT_FOUND != Result) + return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); + Create = TRUE; + } + } + + if (Create) + { Result = FspAccessCheck(FileSystem, Request, FALSE, (Request->Req.Create.CreateOptions & FILE_DIRECTORY_FILE) ? FILE_ADD_SUBDIRECTORY : FILE_ADD_FILE, &GrantedAccess); if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); - } - if (Create) - { Result = FileSystem->Interface->FileCreate(FileSystem, Request, &FileNode); + if (!NT_SUCCESS(Result)) + return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); + memset(&FileNode->ShareAccess, 0, sizeof FileNode->ShareAccess); } - else - Result = FileSystem->Interface->FileOpen(FileSystem, Request, &FileNode); - if (!NT_SUCCESS(Result)) - return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); Result = FspShareCheck(FileSystem, GrantedAccess, Request->Req.Create.ShareAccess, FileNode); if (!NT_SUCCESS(Result))