sys: IRP_MJ_CREATE

This commit is contained in:
Bill Zissimopoulos 2015-12-03 11:38:04 -08:00
parent 171c8eff04
commit a29506341c
3 changed files with 18 additions and 9 deletions

View File

@ -57,17 +57,17 @@ static NTSTATUS FspFsvolCreate(
PFILE_OBJECT RelatedFileObject = FileObject->RelatedFileObject;
UNICODE_STRING FileName = FileObject->FileName;
ULONG Flags = IrpSp->Flags;
KPROCESSOR_MODE RequestorMode = FlagOn(Flags, SL_FORCE_ACCESS_CHECK) ? UserMode : Irp->RequestorMode;
PACCESS_STATE AccessState = IrpSp->Parameters.Create.SecurityContext->AccessState;
ACCESS_MASK DesiredAccess = IrpSp->Parameters.Create.SecurityContext->DesiredAccess;
USHORT ShareAccess = IrpSp->Parameters.Create.ShareAccess;
ULONG CreateDisposition = IrpSp->Parameters.Create.Options >> 24;
//KPROCESSOR_MODE RequestorMode = FlagOn(Flags, SL_FORCE_ACCESS_CHECK) ? UserMode : Irp->RequestorMode;
//PACCESS_STATE AccessState = IrpSp->Parameters.Create.SecurityContext->AccessState;
//ACCESS_MASK DesiredAccess = IrpSp->Parameters.Create.SecurityContext->DesiredAccess;
//USHORT ShareAccess = IrpSp->Parameters.Create.ShareAccess;
//ULONG CreateDisposition = IrpSp->Parameters.Create.Options >> 24;
ULONG CreateOptions = IrpSp->Parameters.Create.Options & 0xffffff;
USHORT FileAttributes = IrpSp->Parameters.Create.FileAttributes;
LARGE_INTEGER AllocationSize = Irp->Overlay.AllocationSize;
//USHORT FileAttributes = IrpSp->Parameters.Create.FileAttributes;
//LARGE_INTEGER AllocationSize = Irp->Overlay.AllocationSize;
PFILE_FULL_EA_INFORMATION EaBuffer = Irp->AssociatedIrp.SystemBuffer;
ULONG EaLength = IrpSp->Parameters.Create.EaLength;
BOOLEAN HasTraversePrivilege = BooleanFlagOn(AccessState->Flags, TOKEN_HAS_TRAVERSE_PRIVILEGE);
//ULONG EaLength = IrpSp->Parameters.Create.EaLength;
//BOOLEAN HasTraversePrivilege = BooleanFlagOn(AccessState->Flags, TOKEN_HAS_TRAVERSE_PRIVILEGE);
BOOLEAN HasTrailingBackslash = FALSE;
FSP_FILE_CONTEXT *FsContext = 0;
FSP_FSCTL_TRANSACT_REQ *Request;

View File

@ -330,6 +330,8 @@ VOID FspDeviceDeleteAll(VOID);
/* file objects */
typedef struct
{
ERESOURCE Resource;
ERESOURCE PagingIoResource;
FAST_MUTEX HeaderFastMutex;
} FSP_FILE_CONTEXT_NONPAGED;
typedef struct

View File

@ -34,9 +34,16 @@ NTSTATUS FspFileContextCreate(ULONG ExtraSize, FSP_FILE_CONTEXT **PFsContext)
}
RtlZeroMemory(NonPaged, sizeof *NonPaged);
ExInitializeResourceLite(&NonPaged->Resource);
ExInitializeResourceLite(&NonPaged->PagingIoResource);
ExInitializeFastMutex(&NonPaged->HeaderFastMutex);
RtlZeroMemory(FsContext, sizeof *FsContext);
FsContext->Header.NodeTypeCode = 'F';
FsContext->Header.NodeByteSize = sizeof *FsContext;
FsContext->Header.IsFastIoPossible = FastIoIsQuestionable;
FsContext->Header.Resource = &NonPaged->Resource;
FsContext->Header.PagingIoResource = &NonPaged->PagingIoResource;
FsRtlSetupAdvancedHeader(&FsContext->Header, &NonPaged->HeaderFastMutex);
FsContext->NonPaged = NonPaged;
RtlInitEmptyUnicodeString(&FsContext->FileName, FsContext->FileNameBuf, (USHORT)ExtraSize);