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

Function Ext2VerifyVcb

Ext4Fsd/fsctl.c:2278–2376  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2276}
2277
2278VOID
2279Ext2VerifyVcb (IN PEXT2_IRP_CONTEXT IrpContext,
2280 IN PEXT2_VCB Vcb )
2281{
2282 NTSTATUS Status = STATUS_SUCCESS;
2283
2284 BOOLEAN bVerify = FALSE;
2285 ULONG ChangeCount = 0;
2286 ULONG dwBytes;
2287
2288 PIRP Irp;
2289 PEXTENDED_IO_STACK_LOCATION IrpSp;
2290
2291 __try {
2292
2293 ASSERT(IrpContext != NULL);
2294
2295 ASSERT((IrpContext->Identifier.Type == EXT2ICX) &&
2296 (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT)));
2297
2298 Irp = IrpContext->Irp;
2299 IrpSp = (PEXTENDED_IO_STACK_LOCATION)IoGetCurrentIrpStackLocation(Irp);
2300
2301 bVerify = IsFlagOn(Vcb->Vpb->RealDevice->Flags, DO_VERIFY_VOLUME);
2302
2303 if ( (IsFlagOn(Vcb->Flags, VCB_REMOVABLE_MEDIA) ||
2304 IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK)) && !bVerify ) {
2305
2306 dwBytes = sizeof(ULONG);
2307 Status = Ext2DiskIoControl(
2308 Vcb->TargetDeviceObject,
2309 IOCTL_DISK_CHECK_VERIFY,
2310 NULL,
2311 0,
2312 &ChangeCount,
2313 &dwBytes );
2314
2315 if ( STATUS_VERIFY_REQUIRED == Status ||
2316 STATUS_DEVICE_NOT_READY == Status ||
2317 STATUS_NO_MEDIA_IN_DEVICE == Status ||
2318 (NT_SUCCESS(Status) &&
2319 (ChangeCount != Vcb->ChangeCount))) {
2320
2321 KIRQL Irql;
2322
2323 IoAcquireVpbSpinLock(&Irql);
2324 if (Vcb->Vpb == Vcb->Vpb->RealDevice->Vpb) {
2325 SetFlag(Vcb->Vpb->RealDevice->Flags, DO_VERIFY_VOLUME);
2326 }
2327 IoReleaseVpbSpinLock(Irql);
2328
2329 } else {
2330
2331 if (!NT_SUCCESS(Status)) {
2332 Ext2NormalizeAndRaiseStatus(IrpContext, Status);
2333 }
2334 }
2335 }

Callers 4

Ext2FlushFunction · 0.85
Ext2SetVolumeInformationFunction · 0.85
Ext2IsVolumeMountedFunction · 0.85
Ext2CreateFunction · 0.85

Calls 1

Ext2DiskIoControlFunction · 0.85

Tested by

no test coverage detected