diff --git a/inc/winfsp/winfsp.h b/inc/winfsp/winfsp.h index 4b4deb8e..6dba10f4 100644 --- a/inc/winfsp/winfsp.h +++ b/inc/winfsp/winfsp.h @@ -45,7 +45,8 @@ typedef NTSTATUS FSP_FILE_SYSTEM_OPERATION(FSP_FILE_SYSTEM *, FSP_FSCTL_TRANSACT typedef struct _FSP_FILE_SYSTEM_INTERFACE { NTSTATUS (*AccessCheck)(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, DWORD DesiredAccess, PDWORD PGrantedAccess); + FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN AllowTraverseCheck, DWORD DesiredAccess, + PDWORD PGrantedAccess); NTSTATUS (*GetSecurity)(FSP_FILE_SYSTEM *FileSystem, PWSTR FileName, PDWORD PFileAttributes, PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize); diff --git a/src/dll/access.c b/src/dll/access.c index 16a5a979..e86f6c64 100644 --- a/src/dll/access.c +++ b/src/dll/access.c @@ -42,7 +42,8 @@ FSP_API NTSTATUS FspAccessCheck(FSP_FILE_SYSTEM *FileSystem, PDWORD PGrantedAccess) { if (0 != FileSystem->Interface->AccessCheck) - return FileSystem->Interface->AccessCheck(FileSystem, Request, DesiredAccess, PGrantedAccess); + return FileSystem->Interface->AccessCheck(FileSystem, + Request, AllowTraverseCheck, DesiredAccess, PGrantedAccess); if (0 == FileSystem->Interface->GetSecurity) { diff --git a/src/dll/create.c b/src/dll/create.c index 0888aec0..b6918dfa 100644 --- a/src/dll/create.c +++ b/src/dll/create.c @@ -40,7 +40,9 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem, if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); + FileNode->Flags = 0; memset(&FileNode->ShareAccess, 0, sizeof FileNode->ShareAccess); + FspShareCheck(FileSystem, GrantedAccess, Request->Req.Create.ShareAccess, FileNode); memset(&Response, 0, sizeof Response); @@ -129,6 +131,7 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem, if (!NT_SUCCESS(Result)) return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); + FileNode->Flags = 0; memset(&FileNode->ShareAccess, 0, sizeof FileNode->ShareAccess); }