diff --git a/reactos/drivers/storage/floppy/floppy.c b/reactos/drivers/storage/floppy/floppy.c index ecd7ed38d29..0b65e28e093 100644 --- a/reactos/drivers/storage/floppy/floppy.c +++ b/reactos/drivers/storage/floppy/floppy.c @@ -987,6 +987,11 @@ AddControllers(PDRIVER_OBJECT DriverObject) /* 3k: Clear the DO_DEVICE_INITIALIZING flag */ gControllerInfo[i].DriveInfo[j].DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; + + /* 3l: Attempt to get drive info - if a floppy is already present */ + StartMotor(&gControllerInfo[i].DriveInfo[j]); + RWDetermineMediaType(&gControllerInfo[i].DriveInfo[j], TRUE); + StopMotor(gControllerInfo[i].DriveInfo[j].ControllerInfo); } } diff --git a/reactos/drivers/storage/floppy/readwrite.c b/reactos/drivers/storage/floppy/readwrite.c index af5f218005e..d677adeb1f4 100644 --- a/reactos/drivers/storage/floppy/readwrite.c +++ b/reactos/drivers/storage/floppy/readwrite.c @@ -149,8 +149,8 @@ RWFreeAdapterChannel(PADAPTER_OBJECT AdapterObject) } -static NTSTATUS NTAPI -RWDetermineMediaType(PDRIVE_INFO DriveInfo) +NTSTATUS NTAPI +RWDetermineMediaType(PDRIVE_INFO DriveInfo, BOOLEAN OneShot) /* * FUNCTION: Determine the media type of the disk in the drive and fill in the geometry * ARGUMENTS: @@ -177,8 +177,8 @@ RWDetermineMediaType(PDRIVE_INFO DriveInfo) /* * This algorithm assumes that a 1.44MB floppy is in the drive. If it's not, - * it works backwards until the read works. Note that only 1.44 has been tested - * at all. + * it works backwards until the read works unless OneShot try is asked. + * Note that only 1.44 has been tested at all. */ do @@ -249,7 +249,10 @@ RWDetermineMediaType(PDRIVE_INFO DriveInfo) if(HwReadIdResult(DriveInfo->ControllerInfo, NULL, NULL) != STATUS_SUCCESS) { WARN_(FLOPPY, "RWDetermineMediaType(): ReadIdResult failed; continuing\n"); - continue; + if (OneShot) + break; + else + continue; } /* Found the media; populate the geometry now */ @@ -492,7 +495,7 @@ ReadWritePassive(PDRIVE_INFO DriveInfo, PIRP Irp) */ if(DriveInfo->DiskGeometry.MediaType == Unknown) { - if(RWDetermineMediaType(DriveInfo) != STATUS_SUCCESS) + if(RWDetermineMediaType(DriveInfo, FALSE) != STATUS_SUCCESS) { WARN_(FLOPPY, "ReadWritePassive(): unable to determine media type; completing with STATUS_UNSUCCESSFUL\n"); IoCompleteRequest(Irp, IO_NO_INCREMENT); diff --git a/reactos/drivers/storage/floppy/readwrite.h b/reactos/drivers/storage/floppy/readwrite.h index 1b17459e84b..7e36bf48f37 100644 --- a/reactos/drivers/storage/floppy/readwrite.h +++ b/reactos/drivers/storage/floppy/readwrite.h @@ -33,3 +33,6 @@ ReadWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp); VOID NTAPI ReadWritePassive(PDRIVE_INFO DriveInfo, PIRP Irp); + +NTSTATUS NTAPI +RWDetermineMediaType(PDRIVE_INFO DriveInfo, BOOLEAN OneShot);