| 744 | |
| 745 | |
| 746 | NTSTATUS |
| 747 | Ext2WriteFile(IN PEXT2_IRP_CONTEXT IrpContext) |
| 748 | { |
| 749 | PEXT2_VCB Vcb = NULL; |
| 750 | PEXT2_FCB Fcb = NULL; |
| 751 | PEXT2_CCB Ccb = NULL; |
| 752 | PFILE_OBJECT FileObject = NULL; |
| 753 | |
| 754 | PDEVICE_OBJECT DeviceObject = NULL; |
| 755 | |
| 756 | PIRP Irp = NULL; |
| 757 | PIO_STACK_LOCATION IoStackLocation = NULL; |
| 758 | PUCHAR Buffer = NULL; |
| 759 | |
| 760 | LARGE_INTEGER ByteOffset; |
| 761 | ULONG ReturnedLength = 0; |
| 762 | ULONG Length; |
| 763 | |
| 764 | NTSTATUS Status = STATUS_UNSUCCESSFUL; |
| 765 | |
| 766 | BOOLEAN OpPostIrp = FALSE; |
| 767 | BOOLEAN PagingIo = FALSE; |
| 768 | BOOLEAN Nocache = FALSE; |
| 769 | BOOLEAN SynchronousIo = FALSE; |
| 770 | |
| 771 | BOOLEAN RecursiveWriteThrough = FALSE; |
| 772 | BOOLEAN MainResourceAcquired = FALSE; |
| 773 | BOOLEAN PagingIoResourceAcquired = FALSE; |
| 774 | |
| 775 | BOOLEAN bDeferred = FALSE; |
| 776 | BOOLEAN UpdateFileValidSize = FALSE; |
| 777 | BOOLEAN FileSizesChanged = FALSE; |
| 778 | BOOLEAN rc; |
| 779 | |
| 780 | |
| 781 | __try { |
| 782 | |
| 783 | ASSERT(IrpContext); |
| 784 | ASSERT((IrpContext->Identifier.Type == EXT2ICX) && |
| 785 | (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT))); |
| 786 | |
| 787 | DeviceObject = IrpContext->DeviceObject; |
| 788 | Vcb = (PEXT2_VCB) DeviceObject->DeviceExtension; |
| 789 | ASSERT(Vcb != NULL); |
| 790 | ASSERT((Vcb->Identifier.Type == EXT2VCB) && |
| 791 | (Vcb->Identifier.Size == sizeof(EXT2_VCB))); |
| 792 | |
| 793 | FileObject = IrpContext->FileObject; |
| 794 | Fcb = (PEXT2_FCB) FileObject->FsContext; |
| 795 | Ccb = (PEXT2_CCB) FileObject->FsContext2; |
| 796 | ASSERT(Fcb); |
| 797 | ASSERT((Fcb->Identifier.Type == EXT2FCB) && |
| 798 | (Fcb->Identifier.Size == sizeof(EXT2_FCB))); |
| 799 | |
| 800 | Irp = IrpContext->Irp; |
| 801 | IoStackLocation = IoGetCurrentIrpStackLocation(Irp); |
| 802 | |
| 803 | Length = IoStackLocation->Parameters.Write.Length; |
no test coverage detected