MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2Create

Function Ext2Create

Ext4Fsd/create.c:1953–2042  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1951
1952
1953NTSTATUS
1954Ext2Create (IN PEXT2_IRP_CONTEXT IrpContext)
1955{
1956 PDEVICE_OBJECT DeviceObject;
1957 PIRP Irp;
1958 PIO_STACK_LOCATION IrpSp;
1959 PEXT2_VCB Vcb = 0;
1960 NTSTATUS Status = STATUS_OBJECT_NAME_NOT_FOUND;
1961 PEXT2_FCBVCB Xcb = NULL;
1962 BOOLEAN PostIrp = FALSE;
1963 BOOLEAN VcbResourceAcquired = FALSE;
1964
1965 DeviceObject = IrpContext->DeviceObject;
1966 Irp = IrpContext->Irp;
1967 IrpSp = IoGetCurrentIrpStackLocation(Irp);
1968
1969 Xcb = (PEXT2_FCBVCB) (IrpSp->FileObject->FsContext);
1970
1971 if (IsExt2FsDevice(DeviceObject)) {
1972
1973 DEBUG(DL_INF, ( "Ext2Create: Create on main device object.\n"));
1974
1975 Status = STATUS_SUCCESS;
1976 Irp->IoStatus.Information = FILE_OPENED;
1977
1978 Ext2CompleteIrpContext(IrpContext, Status);
1979
1980 return Status;
1981 }
1982
1983 __try {
1984
1985 Vcb = (PEXT2_VCB) DeviceObject->DeviceExtension;
1986 ASSERT(Vcb->Identifier.Type == EXT2VCB);
1987 IrpSp->FileObject->Vpb = Vcb->Vpb;
1988
1989 if (!IsMounted(Vcb)) {
1990 DbgBreak();
1991 if (IsFlagOn(Vcb->Flags, VCB_DEVICE_REMOVED)) {
1992 Status = STATUS_NO_SUCH_DEVICE;
1993 } else {
1994 Status = STATUS_VOLUME_DISMOUNTED;
1995 }
1996 __leave;
1997 }
1998
1999 if (!ExAcquireResourceExclusiveLite(
2000 &Vcb->MainResource, TRUE)) {
2001 Status = STATUS_PENDING;
2002 __leave;
2003 }
2004 VcbResourceAcquired = TRUE;
2005
2006 Ext2VerifyVcb(IrpContext, Vcb);
2007
2008 if (FlagOn(Vcb->Flags, VCB_VOLUME_LOCKED)) {
2009 Status = STATUS_ACCESS_DENIED;
2010 if (IsFlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING)) {

Callers 1

Ext2DispatchRequestFunction · 0.85

Calls 5

Ext2CompleteIrpContextFunction · 0.85
Ext2VerifyVcbFunction · 0.85
Ext2CreateVolumeFunction · 0.85
Ext2CreateFileFunction · 0.85
Ext2QueueRequestFunction · 0.85

Tested by

no test coverage detected