| 564 | } |
| 565 | |
| 566 | NTSTATUS |
| 567 | Ext2ProcessUserProperty( |
| 568 | IN PEXT2_IRP_CONTEXT IrpContext, |
| 569 | IN PEXT2_VOLUME_PROPERTY3 Property, |
| 570 | IN ULONG Length |
| 571 | ) |
| 572 | { |
| 573 | NTSTATUS Status = STATUS_SUCCESS; |
| 574 | PEXT2_VCB Vcb = NULL; |
| 575 | PDEVICE_OBJECT DeviceObject = NULL; |
| 576 | |
| 577 | __try { |
| 578 | |
| 579 | ASSERT(IrpContext != NULL); |
| 580 | ASSERT((IrpContext->Identifier.Type == EXT2ICX) && |
| 581 | (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT))); |
| 582 | |
| 583 | if (Property->Magic != EXT2_VOLUME_PROPERTY_MAGIC) { |
| 584 | Status = STATUS_INVALID_PARAMETER; |
| 585 | __leave; |
| 586 | } |
| 587 | |
| 588 | DeviceObject = IrpContext->DeviceObject; |
| 589 | if (IsExt2FsDevice(DeviceObject)) { |
| 590 | Status = Ext2ProcessGlobalProperty(DeviceObject, Property, Length); |
| 591 | } else { |
| 592 | Vcb = (PEXT2_VCB) DeviceObject->DeviceExtension; |
| 593 | if (!((Vcb) && (Vcb->Identifier.Type == EXT2VCB) && |
| 594 | (Vcb->Identifier.Size == sizeof(EXT2_VCB)))) { |
| 595 | Status = STATUS_INVALID_PARAMETER; |
| 596 | __leave; |
| 597 | } |
| 598 | Status = Ext2ProcessVolumeProperty(Vcb, Property, Length); |
| 599 | } |
| 600 | |
| 601 | if (NT_SUCCESS(Status)) { |
| 602 | IrpContext->Irp->IoStatus.Information = Length; |
| 603 | } |
| 604 | |
| 605 | } __finally { |
| 606 | |
| 607 | if (!IrpContext->ExceptionInProgress) { |
| 608 | Ext2CompleteIrpContext(IrpContext, Status); |
| 609 | } |
| 610 | } |
| 611 | |
| 612 | return Status; |
| 613 | } |
| 614 | |
| 615 | NTSTATUS |
| 616 | Ex2ProcessUserPerfStat( |
no test coverage detected