mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 08:53:01 -05:00
sys: IRP_MJ_CREATE
This commit is contained in:
parent
f32db0ed2e
commit
6fcab43120
@ -106,7 +106,8 @@ typedef struct
|
|||||||
UINT32 UserMode:1; /* request originated in user mode */
|
UINT32 UserMode:1; /* request originated in user mode */
|
||||||
UINT32 HasTraversePrivilege:1; /* requestor has TOKEN_HAS_TRAVERSE_PRIVILEGE */
|
UINT32 HasTraversePrivilege:1; /* requestor has TOKEN_HAS_TRAVERSE_PRIVILEGE */
|
||||||
UINT32 OpenTargetDirectory:1; /* open target dir and report FILE_{EXISTS,DOES_NOT_EXIST} */
|
UINT32 OpenTargetDirectory:1; /* open target dir and report FILE_{EXISTS,DOES_NOT_EXIST} */
|
||||||
UINT32 CaseSensitive:1; /* filename comparisons should be case-sensitive */
|
UINT32 HasTrailingBackslash:1; /* original FileName (sent by CreateFile) has trailing backslash */
|
||||||
|
UINT32 CaseSensitive:1; /* FileName comparisons should be case-sensitive */
|
||||||
} Create;
|
} Create;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -268,6 +268,7 @@ static NTSTATUS FspFsvolCreate(
|
|||||||
Request->Req.Create.UserMode = UserMode == RequestorMode;
|
Request->Req.Create.UserMode = UserMode == RequestorMode;
|
||||||
Request->Req.Create.HasTraversePrivilege = HasTraversePrivilege;
|
Request->Req.Create.HasTraversePrivilege = HasTraversePrivilege;
|
||||||
Request->Req.Create.OpenTargetDirectory = BooleanFlagOn(Flags, SL_OPEN_TARGET_DIRECTORY);
|
Request->Req.Create.OpenTargetDirectory = BooleanFlagOn(Flags, SL_OPEN_TARGET_DIRECTORY);
|
||||||
|
Request->Req.Create.HasTrailingBackslash = HasTrailingBackslash;
|
||||||
Request->Req.Create.CaseSensitive = BooleanFlagOn(Flags, SL_CASE_SENSITIVE);
|
Request->Req.Create.CaseSensitive = BooleanFlagOn(Flags, SL_CASE_SENSITIVE);
|
||||||
|
|
||||||
/* copy the security descriptor into the request */
|
/* copy the security descriptor into the request */
|
||||||
@ -387,6 +388,8 @@ VOID FspFsvolCreateComplete(
|
|||||||
ULONG Flags = IrpSp->Flags;
|
ULONG Flags = IrpSp->Flags;
|
||||||
KPROCESSOR_MODE RequestorMode =
|
KPROCESSOR_MODE RequestorMode =
|
||||||
FlagOn(Flags, SL_FORCE_ACCESS_CHECK) ? UserMode : Irp->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;
|
FSP_FILE_CONTEXT *FsContext = FileObject->FsContext;
|
||||||
ACCESS_MASK GrantedAccess;
|
ACCESS_MASK GrantedAccess;
|
||||||
BOOLEAN Inserted = FALSE;
|
BOOLEAN Inserted = FALSE;
|
||||||
@ -511,6 +514,12 @@ VOID FspFsvolCreateComplete(
|
|||||||
FspFsvolCreateClose(Irp, Response);
|
FspFsvolCreateClose(Irp, Response);
|
||||||
FSP_RETURN(Result = STATUS_FILE_IS_A_DIRECTORY);
|
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 */
|
/* record the user-mode file system contexts */
|
||||||
FsContext->UserContext = Response->Rsp.Create.Opened.UserContext;
|
FsContext->UserContext = Response->Rsp.Create.Opened.UserContext;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user