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

Function Ext2CheckDismount

Ext4Fsd/fsctl.c:2593–2703  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2591}
2592
2593BOOLEAN
2594Ext2CheckDismount (
2595 IN PEXT2_IRP_CONTEXT IrpContext,
2596 IN PEXT2_VCB Vcb,
2597 IN BOOLEAN bForce )
2598{
2599 KIRQL Irql;
2600 PVPB Vpb = Vcb->Vpb, NewVpb = NULL;
2601 BOOLEAN bDeleted = FALSE, bTearDown = FALSE;
2602 ULONG UnCleanCount = 0;
2603
2604 NewVpb = Ext2AllocatePool(NonPagedPool, VPB_SIZE, TAG_VPB);
2605 if (NewVpb == NULL) {
2606 DEBUG(DL_ERR, ( "Ex2CheckDismount: failed to allocate NewVpb.\n"));
2607 return FALSE;
2608 }
2609 DEBUG(DL_DBG, ("Ext2CheckDismount: NewVpb allocated: %p\n", NewVpb));
2610 INC_MEM_COUNT(PS_VPB, NewVpb, sizeof(VPB));
2611 memset(NewVpb, '_', VPB_SIZE);
2612 RtlZeroMemory(NewVpb, sizeof(VPB));
2613
2614 ExAcquireResourceExclusiveLite(
2615 &Ext2Global->Resource, TRUE );
2616
2617 ExAcquireResourceExclusiveLite(
2618 &Vcb->MainResource, TRUE );
2619
2620 if (IrpContext &&
2621 IrpContext->MajorFunction == IRP_MJ_CREATE &&
2622 IrpContext->RealDevice == Vcb->RealDevice) {
2623 UnCleanCount = 2;
2624 } else {
2625 UnCleanCount = 1;
2626 }
2627
2628 IoAcquireVpbSpinLock (&Irql);
2629
2630 DEBUG(DL_DBG, ("Ext2CheckDismount: Vpb %p ioctl=%d Device %p\n",
2631 Vpb, Vpb->ReferenceCount, Vpb->RealDevice));
2632
2633 if (Vpb->ReferenceCount <= UnCleanCount) {
2634
2635 if (!IsFlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING)) {
2636
2637 ClearFlag(Vpb->Flags, VPB_MOUNTED);
2638 ClearFlag(Vpb->Flags, VPB_LOCKED);
2639
2640 if ((Vcb->RealDevice != Vpb->RealDevice) &&
2641 (Vcb->RealDevice->Vpb == Vpb)) {
2642 SetFlag(Vcb->RealDevice->Flags, DO_DEVICE_INITIALIZING);
2643 SetFlag(Vpb->Flags, VPB_PERSISTENT );
2644 }
2645
2646 Ext2RemoveVcb(Vcb);
2647 SetLongFlag(Vcb->Flags, VCB_DISMOUNT_PENDING);
2648 }
2649
2650 if (Vpb->ReferenceCount) {

Callers 7

Ext2InvalidateVolumesFunction · 0.85
Ext2DismountVolumeFunction · 0.85
Ext2PnpQueryRemoveFunction · 0.85
Ext2PnpRemoveFunction · 0.85
Ext2PnpSurpriseRemoveFunction · 0.85
Ext2ExceptionHandlerFunction · 0.85
Ext2FreeFcbFunction · 0.85

Calls 4

Ext2AllocatePoolFunction · 0.85
Ext2RemoveVcbFunction · 0.85
Ext2TearDownStreamFunction · 0.85
Ext2DestroyVcbFunction · 0.85

Tested by

no test coverage detected