| 490 | } |
| 491 | |
| 492 | BOOLEAN |
| 493 | Ext2FastIoLock ( |
| 494 | IN PFILE_OBJECT FileObject, |
| 495 | IN PLARGE_INTEGER FileOffset, |
| 496 | IN PLARGE_INTEGER Length, |
| 497 | IN PEPROCESS Process, |
| 498 | IN ULONG Key, |
| 499 | IN BOOLEAN FailImmediately, |
| 500 | IN BOOLEAN ExclusiveLock, |
| 501 | OUT PIO_STATUS_BLOCK IoStatus, |
| 502 | IN PDEVICE_OBJECT DeviceObject |
| 503 | ) |
| 504 | { |
| 505 | BOOLEAN Status = FALSE; |
| 506 | PEXT2_FCB Fcb; |
| 507 | |
| 508 | __try { |
| 509 | |
| 510 | FsRtlEnterFileSystem(); |
| 511 | |
| 512 | __try { |
| 513 | |
| 514 | if (IsExt2FsDevice(DeviceObject)) { |
| 515 | IoStatus->Status = STATUS_INVALID_DEVICE_REQUEST; |
| 516 | __leave; |
| 517 | } |
| 518 | |
| 519 | Fcb = (PEXT2_FCB) FileObject->FsContext; |
| 520 | if (Fcb == NULL || Fcb->Identifier.Type == EXT2VCB) { |
| 521 | IoStatus->Status = STATUS_INVALID_PARAMETER; |
| 522 | __leave; |
| 523 | } |
| 524 | |
| 525 | ASSERT((Fcb->Identifier.Type == EXT2FCB) && |
| 526 | (Fcb->Identifier.Size == sizeof(EXT2_FCB))); |
| 527 | |
| 528 | if (IsDirectory(Fcb)) { |
| 529 | DbgBreak(); |
| 530 | IoStatus->Status = STATUS_INVALID_PARAMETER; |
| 531 | __leave; |
| 532 | } |
| 533 | #if EXT2_DEBUG |
| 534 | DEBUG(DL_INF, ( |
| 535 | "Ext2FastIoLock: %s %s %wZ\n", |
| 536 | Ext2GetCurrentProcessName(), |
| 537 | "FASTIO_LOCK", |
| 538 | &Fcb->Mcb->FullName )); |
| 539 | |
| 540 | DEBUG(DL_INF, ( |
| 541 | "Ext2FastIoLock: Offset: %I64xh Length: %I64xh Key: %u %s%s\n", |
| 542 | FileOffset->QuadPart, |
| 543 | Length->QuadPart, |
| 544 | Key, |
| 545 | (FailImmediately ? "FailImmediately " : ""), |
| 546 | (ExclusiveLock ? "ExclusiveLock " : "") )); |
| 547 | #endif |
| 548 | |
| 549 | if (!FsRtlOplockIsFastIoPossible(&Fcb->Oplock)) { |
nothing calls this directly
no test coverage detected