mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-14 15:52:47 -05:00
sys: IRP_MJ_CREATE
This commit is contained in:
@ -268,6 +268,7 @@ static NTSTATUS FspFsvolCreate(
|
||||
Request->Req.Create.UserMode = UserMode == RequestorMode;
|
||||
Request->Req.Create.HasTraversePrivilege = HasTraversePrivilege;
|
||||
Request->Req.Create.OpenTargetDirectory = BooleanFlagOn(Flags, SL_OPEN_TARGET_DIRECTORY);
|
||||
Request->Req.Create.HasTrailingBackslash = HasTrailingBackslash;
|
||||
Request->Req.Create.CaseSensitive = BooleanFlagOn(Flags, SL_CASE_SENSITIVE);
|
||||
|
||||
/* copy the security descriptor into the request */
|
||||
@ -387,6 +388,8 @@ VOID FspFsvolCreateComplete(
|
||||
ULONG Flags = IrpSp->Flags;
|
||||
KPROCESSOR_MODE RequestorMode =
|
||||
FlagOn(Flags, SL_FORCE_ACCESS_CHECK) ? UserMode : Irp->RequestorMode;
|
||||
BOOLEAN HasTrailingBackslash =
|
||||
0 != ((FSP_FSCTL_TRANSACT_REQ *)Irp->Tail.Overlay.DriverContext[0])->Req.Create.HasTrailingBackslash;
|
||||
FSP_FILE_CONTEXT *FsContext = FileObject->FsContext;
|
||||
ACCESS_MASK GrantedAccess;
|
||||
BOOLEAN Inserted = FALSE;
|
||||
@ -511,6 +514,12 @@ VOID FspFsvolCreateComplete(
|
||||
FspFsvolCreateClose(Irp, Response);
|
||||
FSP_RETURN(Result = STATUS_FILE_IS_A_DIRECTORY);
|
||||
}
|
||||
if (HasTrailingBackslash &&
|
||||
!FlagOn(ResponseFileAttributes, FILE_ATTRIBUTE_DIRECTORY))
|
||||
{
|
||||
FspFsvolCreateClose(Irp, Response);
|
||||
FSP_RETURN(Result = STATUS_OBJECT_NAME_INVALID);
|
||||
}
|
||||
|
||||
/* record the user-mode file system contexts */
|
||||
FsContext->UserContext = Response->Rsp.Create.Opened.UserContext;
|
||||
|
Reference in New Issue
Block a user