sys: IRP_MJ_CREATE

This commit is contained in:
Bill Zissimopoulos 2015-12-08 00:08:09 -08:00
parent 25154ca7c1
commit 3cbf2986a6

View File

@ -14,7 +14,7 @@ static NTSTATUS FspFsvolCreate(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
FSP_IOPREP_DISPATCH FspFsvolCreatePrepare; FSP_IOPREP_DISPATCH FspFsvolCreatePrepare;
FSP_IOCMPL_DISPATCH FspFsvolCreateComplete; FSP_IOCMPL_DISPATCH FspFsvolCreateComplete;
static VOID FspFsvolCreateClose( static VOID FspFsvolCreateCleanupClose(
PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response); PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response);
FSP_DRIVER_DISPATCH FspCreate; FSP_DRIVER_DISPATCH FspCreate;
@ -24,7 +24,7 @@ FSP_DRIVER_DISPATCH FspCreate;
#pragma alloc_text(PAGE, FspFsvolCreate) #pragma alloc_text(PAGE, FspFsvolCreate)
#pragma alloc_text(PAGE, FspFsvolCreatePrepare) #pragma alloc_text(PAGE, FspFsvolCreatePrepare)
#pragma alloc_text(PAGE, FspFsvolCreateComplete) #pragma alloc_text(PAGE, FspFsvolCreateComplete)
#pragma alloc_text(PAGE, FspFsvolCreateClose) #pragma alloc_text(PAGE, FspFsvolCreateCleanupClose)
#pragma alloc_text(PAGE, FspCreate) #pragma alloc_text(PAGE, FspCreate)
#endif #endif
@ -496,14 +496,14 @@ VOID FspFsvolCreateComplete(
if (FlagOn(DesiredAccess, ~Allowed)) if (FlagOn(DesiredAccess, ~Allowed))
{ {
FspFsvolCreateClose(Irp, Response); FspFsvolCreateCleanupClose(Irp, Response);
FSP_RETURN(Result = STATUS_ACCESS_DENIED); FSP_RETURN(Result = STATUS_ACCESS_DENIED);
} }
else else
if (!FlagOn(ResponseFileAttributes, FILE_ATTRIBUTE_DIRECTORY) && if (!FlagOn(ResponseFileAttributes, FILE_ATTRIBUTE_DIRECTORY) &&
FlagOn(CreateOptions, FILE_DELETE_ON_CLOSE)) FlagOn(CreateOptions, FILE_DELETE_ON_CLOSE))
{ {
FspFsvolCreateClose(Irp, Response); FspFsvolCreateCleanupClose(Irp, Response);
FSP_RETURN(Result = STATUS_CANNOT_DELETE); FSP_RETURN(Result = STATUS_CANNOT_DELETE);
} }
} }
@ -518,7 +518,7 @@ VOID FspFsvolCreateComplete(
(PUINT8)Response + Response->Size || (PUINT8)Response + Response->Size ||
!FspValidRelativeSecurityDescriptor(SecurityDescriptor, SecurityDescriptorSize, 0)) !FspValidRelativeSecurityDescriptor(SecurityDescriptor, SecurityDescriptorSize, 0))
{ {
FspFsvolCreateClose(Irp, Response); FspFsvolCreateCleanupClose(Irp, Response);
FSP_RETURN(Result = STATUS_ACCESS_DENIED); FSP_RETURN(Result = STATUS_ACCESS_DENIED);
} }
@ -534,7 +534,7 @@ VOID FspFsvolCreateComplete(
&GrantedAccess, &GrantedAccess,
&Result)) &Result))
{ {
FspFsvolCreateClose(Irp, Response); FspFsvolCreateCleanupClose(Irp, Response);
FSP_RETURN(); FSP_RETURN();
} }
@ -544,7 +544,7 @@ VOID FspFsvolCreateComplete(
SeFreePrivileges(Privileges); SeFreePrivileges(Privileges);
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
{ {
FspFsvolCreateClose(Irp, Response); FspFsvolCreateCleanupClose(Irp, Response);
FSP_RETURN(); FSP_RETURN();
} }
} }
@ -558,13 +558,13 @@ VOID FspFsvolCreateComplete(
if (FlagOn(CreateOptions, FILE_DIRECTORY_FILE) && if (FlagOn(CreateOptions, FILE_DIRECTORY_FILE) &&
!FileCreated && !FlagOn(ResponseFileAttributes, FILE_ATTRIBUTE_DIRECTORY)) !FileCreated && !FlagOn(ResponseFileAttributes, FILE_ATTRIBUTE_DIRECTORY))
{ {
FspFsvolCreateClose(Irp, Response); FspFsvolCreateCleanupClose(Irp, Response);
FSP_RETURN(Result = STATUS_NOT_A_DIRECTORY); FSP_RETURN(Result = STATUS_NOT_A_DIRECTORY);
} }
if (FlagOn(CreateOptions, FILE_NON_DIRECTORY_FILE) && if (FlagOn(CreateOptions, FILE_NON_DIRECTORY_FILE) &&
!FileCreated && FlagOn(ResponseFileAttributes, FILE_ATTRIBUTE_DIRECTORY)) !FileCreated && FlagOn(ResponseFileAttributes, FILE_ATTRIBUTE_DIRECTORY))
{ {
FspFsvolCreateClose(Irp, Response); FspFsvolCreateCleanupClose(Irp, Response);
FSP_RETURN(Result = STATUS_FILE_IS_A_DIRECTORY); FSP_RETURN(Result = STATUS_FILE_IS_A_DIRECTORY);
} }
@ -627,7 +627,7 @@ VOID FspFsvolCreateComplete(
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
{ {
ASSERT(!Inserted); ASSERT(!Inserted);
FspFsvolCreateClose(Irp, Response); FspFsvolCreateCleanupClose(Irp, Response);
FSP_RETURN(); FSP_RETURN();
} }
@ -648,7 +648,7 @@ VOID FspFsvolCreateComplete(
IrpSp->FileObject, IrpSp->FileObject->RelatedFileObject, IrpSp->FileObject->FileName); IrpSp->FileObject, IrpSp->FileObject->RelatedFileObject, IrpSp->FileObject->FileName);
} }
static VOID FspFsvolCreateClose( static VOID FspFsvolCreateCleanupClose(
PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response) PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response)
{ {
PAGED_CODE(); PAGED_CODE();