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

Function Ext2Read

Ext4Fsd/read.c:863–945  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

861
862
863NTSTATUS
864Ext2Read (IN PEXT2_IRP_CONTEXT IrpContext)
865{
866 NTSTATUS Status;
867 PEXT2_VCB Vcb;
868 PEXT2_FCBVCB FcbOrVcb;
869 PDEVICE_OBJECT DeviceObject;
870 PFILE_OBJECT FileObject;
871 BOOLEAN bCompleteRequest;
872
873 ASSERT(IrpContext);
874
875 ASSERT((IrpContext->Identifier.Type == EXT2ICX) &&
876 (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT)));
877
878 __try {
879
880 if (FlagOn(IrpContext->MinorFunction, IRP_MN_COMPLETE)) {
881
882 Status = Ext2ReadComplete(IrpContext);
883 bCompleteRequest = FALSE;
884
885 } else {
886
887 DeviceObject = IrpContext->DeviceObject;
888
889 if (IsExt2FsDevice(DeviceObject)) {
890 Status = STATUS_INVALID_DEVICE_REQUEST;
891 bCompleteRequest = TRUE;
892 __leave;
893 }
894
895 Vcb = (PEXT2_VCB) DeviceObject->DeviceExtension;
896 if (Vcb->Identifier.Type != EXT2VCB ||
897 Vcb->Identifier.Size != sizeof(EXT2_VCB) ) {
898 Status = STATUS_INVALID_DEVICE_REQUEST;
899 bCompleteRequest = TRUE;
900
901 __leave;
902 }
903
904 FileObject = IrpContext->FileObject;
905
906 if (FlagOn(Vcb->Flags, VCB_VOLUME_LOCKED) &&
907 Vcb->LockFile != FileObject ) {
908 Status = STATUS_ACCESS_DENIED;
909 __leave;
910 }
911
912 FcbOrVcb = (PEXT2_FCBVCB) FileObject->FsContext;
913
914 if (FcbOrVcb->Identifier.Type == EXT2VCB) {
915
916 Status = Ext2ReadVolume(IrpContext);
917 bCompleteRequest = FALSE;
918
919 } else if (FcbOrVcb->Identifier.Type == EXT2FCB) {
920

Callers 1

Ext2DispatchRequestFunction · 0.70

Calls 4

Ext2ReadCompleteFunction · 0.85
Ext2ReadVolumeFunction · 0.85
Ext2ReadFileFunction · 0.85
Ext2CompleteIrpContextFunction · 0.85

Tested by

no test coverage detected