mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-24 09:23:37 -05:00
dll: FspFileSystemOpenCheck
This commit is contained in:
parent
e8cba8dd81
commit
29bb7f2195
@ -257,8 +257,19 @@ NTSTATUS FspFileSystemOpenCheck(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
FSP_FSCTL_TRANSACT_REQ *Request,
|
FSP_FSCTL_TRANSACT_REQ *Request,
|
||||||
BOOLEAN AllowTraverseCheck, PDWORD PGrantedAccess)
|
BOOLEAN AllowTraverseCheck, PDWORD PGrantedAccess)
|
||||||
{
|
{
|
||||||
return FspAccessCheck(FileSystem, Request, FALSE, AllowTraverseCheck,
|
NTSTATUS Result;
|
||||||
Request->Req.Create.DesiredAccess, PGrantedAccess);
|
|
||||||
|
Result = FspAccessCheck(FileSystem, Request, FALSE, AllowTraverseCheck,
|
||||||
|
Request->Req.Create.DesiredAccess |
|
||||||
|
((Request->Req.Create.CreateOptions & FILE_DELETE_ON_CLOSE) ? DELETE : 0),
|
||||||
|
PGrantedAccess);
|
||||||
|
if (NT_SUCCESS(Result))
|
||||||
|
{
|
||||||
|
if (0 == (Request->Req.Create.DesiredAccess & MAXIMUM_ALLOWED))
|
||||||
|
*PGrantedAccess &= ~DELETE | (Request->Req.Create.DesiredAccess & DELETE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
@ -270,14 +281,15 @@ NTSTATUS FspFileSystemOverwriteCheck(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
BOOLEAN Supersede = FILE_SUPERSEDE == ((Request->Req.Create.CreateOptions >> 24) & 0xff);
|
BOOLEAN Supersede = FILE_SUPERSEDE == ((Request->Req.Create.CreateOptions >> 24) & 0xff);
|
||||||
|
|
||||||
Result = FspAccessCheck(FileSystem, Request, FALSE, AllowTraverseCheck,
|
Result = FspAccessCheck(FileSystem, Request, FALSE, AllowTraverseCheck,
|
||||||
Request->Req.Create.DesiredAccess | (Supersede ? DELETE : FILE_WRITE_DATA),
|
Request->Req.Create.DesiredAccess |
|
||||||
|
(Supersede ? DELETE : FILE_WRITE_DATA) |
|
||||||
|
((Request->Req.Create.CreateOptions & FILE_DELETE_ON_CLOSE) ? DELETE : 0),
|
||||||
PGrantedAccess);
|
PGrantedAccess);
|
||||||
if (NT_SUCCESS(Result))
|
if (NT_SUCCESS(Result))
|
||||||
{
|
{
|
||||||
if (0 == (Request->Req.Create.DesiredAccess & MAXIMUM_ALLOWED))
|
if (0 == (Request->Req.Create.DesiredAccess & MAXIMUM_ALLOWED))
|
||||||
*PGrantedAccess &= Supersede ?
|
*PGrantedAccess &= ~(DELETE | FILE_WRITE_DATA) |
|
||||||
(~DELETE | (Request->Req.Create.DesiredAccess & DELETE)) :
|
(Request->Req.Create.DesiredAccess & (DELETE | FILE_WRITE_DATA));
|
||||||
(~FILE_WRITE_DATA | (Request->Req.Create.DesiredAccess & FILE_WRITE_DATA));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Result;
|
return Result;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user