From 9739554b73d84a4f33cd82ba81b1fc91fa4b67de Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sun, 3 Jan 2016 20:46:29 -0800 Subject: [PATCH] dll: WIP --- src/dll/create.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/dll/create.c b/src/dll/create.c index 9182c7e3..4aed004c 100644 --- a/src/dll/create.c +++ b/src/dll/create.c @@ -6,6 +6,24 @@ #include +static inline +NTSTATUS FspCreateCheck(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN AllowTraverseCheck, + PDWORD PGrantedAccess) +{ + NTSTATUS Result; + PWSTR Path, Suffix; + + FspPathSuffix((PWSTR)Request->Buffer, &Path, &Suffix); + Result = FspAccessCheck(FileSystem, Request, TRUE, + (Request->Req.Create.CreateOptions & FILE_DIRECTORY_FILE) ? + FILE_ADD_SUBDIRECTORY : FILE_ADD_FILE, + PGrantedAccess); + FspPathCombine((PWSTR)Request->Buffer, Suffix); + + return Result; +} + static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem, FSP_FSCTL_TRANSACT_REQ *Request) { @@ -14,10 +32,7 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem, FSP_FILE_NODE *FileNode; FSP_FSCTL_TRANSACT_RSP Response; - Result = FspAccessCheck(FileSystem, Request, TRUE, - (Request->Req.Create.CreateOptions & FILE_DIRECTORY_FILE) ? - FILE_ADD_SUBDIRECTORY : FILE_ADD_FILE, - &GrantedAccess); + Result = FspCreateCheck(FileSystem, Request, TRUE, &GrantedAccess); if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); @@ -106,10 +121,7 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem, if (Create) { - Result = FspAccessCheck(FileSystem, Request, FALSE, - (Request->Req.Create.CreateOptions & FILE_DIRECTORY_FILE) ? - FILE_ADD_SUBDIRECTORY : FILE_ADD_FILE, - &GrantedAccess); + Result = FspCreateCheck(FileSystem, Request, TRUE, &GrantedAccess); if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);