Uploaded image for project: 'Core ReactOS'
  1. Core ReactOS
  2. CORE-16362

Installation freezes before reaching selection screen

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Untriaged
    • Priority: Major
    • Resolution: Unresolved
    • Fix Version/s: None
    • Component/s: None
    • Labels:
    • Environment:

      Description

      1. Go past the boot screen, press any button

      Nothing happens except it gets kicked into kdb.

      Apologies. Here is the backtrace:

      Eip:
      <ntoskrnl.exe:159219 (sdk/lib/rtl/i386/debug_asm.S:57 (RtlpBreakWithStatusInstruction))>
      Frames:
      <ntoskrnl.exe:8bb2b (ntoskrnl/ke/bug.c:1136 (KeBugCheckWithTf))>
      <ntoskrnl.exe:8c114 (ntoskrnl/ke/bug.c:1494 (KeBugCheckEx))>
      <ntoskrnl.exe:1950b4 (ntoskrnl/ps/psmgr.c:303 (PsLocateSystemDll))>
      <ntoskrnl.exe:18bbdd (ntoskrnl/io/iomgr/iomgr.c:643 (IoInitSystem))>
      <ntoskrnl.exe:186a9a (ntoskrnl/ex/init.c:1805 (Phase1InitializationDiscard))>
      <ntoskrnl.exe:3319a (ntoskrnl/ex/init.c:2019 (Phase1Initialization))>
      <ntoskrnl.exe:11f254 (ntoskrnl/ps/thread.c:156 (PspSystemThreadStartup))>
      <ntoskrnl.exe:138df5 (ntoskrnl/ke/i386/thrdini.c:85 (KiThreadStartup))>
      <ntoskrnl.exe:11f21b (ntoskrnl/ps/state.c:607 (NtQueueApcThread))>
      <5d8950ec>
      Couldn't access memory at 0x83E58959!

       

      Debug logs attached below.

        


      Some pieces of information that looked interesting that I turned up are:

      (ntoskrnl/cc/pin.c:398) CcMapData(FileObject 0xB49C4238, FileOffset 0, Length 108, Flags 0x1, pBcb 0xF76845AC, pBuffer 0xF76845A0)
      (ntoskrnl/cc/pin.c:91) SectionSize 800, FileSize 6c
      (ntoskrnl/cc/pin.c:449) FileObject=B49C4238 FileOffset=F768422C Length=108 Flags=0x1 -> 1 Bcb=B49C2ED8
      (ntoskrnl/cc/pin.c:398) CcMapData(FileObject 0xB49C24D8, FileOffset 0, Length 2048, Flags 0x1, pBcb 0xF7684238, pBuffer 0xF768422C)
      (ntoskrnl/cc/pin.c:91) SectionSize 800, FileSize 800
       
      (ntoskrnl/cc/pin.c:143) FileObject=B49C24D8 FileOffset=F768413C Length=2048 Flags=0x11 -> FALSE
      (ntoskrnl/cc/pin.c:595) Bcb=B49C2ED8
      (ntoskrnl/cc/pin.c:612) Bcb=B49C2ED8 ResourceThreadId=3033201432

      Here's some more info I managed to dig up:

      (drivers/storage/scsiport/scsiport.c:2572) ScsiPortDispatchScsi(DeviceObject B4CBC560  Irp B4CD2160)
      (drivers/storage/scsiport/scsiport.c:2591) Srb: B4CD09A4
      (drivers/storage/scsiport/scsiport.c:2592) Srb>Function: 21-
      (drivers/storage/scsiport/scsiport.c:2593) PathId: 0  TargetId: 0  Lun: 0
      (drivers/storage/scsiport/scsiport.c:3373) SpiGetLunExtension(B4CBC618 0 0 0) called
      (drivers/storage/scsiport/scsiport.c:2715)   SRB_FUNCTION_FLUSH_QUEUE
      (drivers/storage/scsiport/scsiport.c:5077) ScsiPortDpcForIsr() done

       


      I've found that the area that turns the status to STATUS_VERIFY_REQUIRED is in this file:

      drivers/storage/class/class2/class2.c

      and the lines of code are this

          if (DeviceObject->Flags & DO_VERIFY_VOLUME &&
              !(currentIrpStack->Flags & SL_OVERRIDE_VERIFY_VOLUME)) {
       
              //
              // if DO_VERIFY_VOLUME bit is set
              // in device object flags, fail request.
              //
       
              IoSetHardErrorOrVerifyDevice(Irp, DeviceObject);
       
              Irp->IoStatus.Status = STATUS_VERIFY_REQUIRED;
              Irp->IoStatus.Information = 0;
       
              IoCompleteRequest(Irp, 0);
              return STATUS_VERIFY_REQUIRED;
          }
      

      Now, the reason why this is going through is that this expression:

      DeviceObject->Flags & DO_VERIFY_VOLUME

      The place that the flags take a strange value of 152 on real hardware is after deviosup.c calls this:

      (VOID)KeWaitForSingleObject( &Vcb->SectorCacheEvent,
                                              Executive,
                                              KernelMode,
                                              FALSE,
                                              NULL );
      


      I've tracked down where the STATUS_VERIFY_REQUIRED flag is set.

      class2.c: ScsiClassInterpretSenseInfo

      in this place, lines 2455 to 2466:

        

       

                  if (DeviceObject->Characteristics & FILE_REMOVABLE_MEDIA &&
                      DeviceObject->Vpb->Flags & VPB_MOUNTED) {
       
                      //
                      // Set bit to indicate that media may have changed
                      // and volume needs verification.
                      //
       
                      DeviceObject->Flags |= DO_VERIFY_VOLUME;
       
                      *Status = STATUS_VERIFY_REQUIRED;
                      retry = FALSE
      

       


       

      Here are two interesting statuses I found.

      When ReactOS attempts to verify the volume, it ends up with the status:

      STATUS_IO_DEVICE_ERROR

      That's kind of generic.

       

      Yet, earlier on I noticed this earlier in the verification process this status:

      STATUS_CANT_WAIT

       


       

      I believe I found the place where it sets the status of

      STATUS_IO_DEVICE_ERROR

       

      drivers/storage/class/cdrom/cdrom.c in function CdRomUpdateCapacity, line 7285

                              //
                              // Set the return value in the IRP that will be completed
                              // upon completion of the read capacity.
                              //
       
                              IrpToComplete->IoStatus.Status = STATUS_IO_DEVICE_ERROR;
                              IoMarkIrpPending(IrpToComplete);
       
                              IoCallDriver(DeviceExtension->PortDeviceObject, irp);
       
                              //
                              // status is not checked because the completion routine for this
                              // IRP will always get called and it will free the resources.
                              //
       
                              return STATUS_PENDING;

       


       

      I have suspicion that a completion routine doesn't currently exist for this particular situation, or it does, but is not properly put onto the Stack.

       

      Here is the relevant part of the log I've created that I'm going off of:

      (drivers/storage/class/cdrom/cdrom.c:7355) End of CdRomUpdateCapacity
      (drivers/storage/class/cdrom/cdrom.c:3134) realIrp->IoStatus.Status: C0000185
      (drivers/storage/class/cdrom/cdrom.c:3135) realIrp: B49C1B78
      (drivers/storage/port/scsiport/scsiport.c:4602) In SpiCompletionRoutine after IoCompleteRequest, InitialIrp->IoStatus.Status: 00000000
      (drivers/storage/port/scsiport/scsiport.c:4392) 1 Irp->IoStatus.Status: 00000000
      (drivers/storage/port/scsiport/scsiport.c:4406) 2 Irp->IoStatus.Status: 00000000
      (drivers/storage/port/scsiport/scsiport.c:4407) First return
      (drivers/storage/port/scsiport/scsiport.c:4244) SpiProcessCompletedRequest()
      (drivers/storage/port/scsiport/scsiport.c:4390) 0 Irp->IoStatus.Status: 00000000
      (ntoskrnl/io/iomgr/irp.c:1335) Irp: B49C0008
      (ntoskrnl/io/iomgr/irp.c:1336) Irp->IoStatus: 00000000
      (ntoskrnl/io/iomgr/irp.c:1337) Irp->IoStatus.Status: 00000000
      (ntoskrnl/io/iomgr/irp.c:1409) StackPtr->CompletionRoutine: F7A4B25D
      (drivers/storage/class/cdrom/cdrom.c:6985) CdRomUpdateGeometryCompletion() Irp: B49C0008
      (drivers/storage/class/cdrom/cdrom.c:6986) CdRomUpdateGeometryCompletion: F7A4B25D
      (drivers/storage/class/cdrom/cdrom.c:6995) originalIrp->IoStatus.Status: C0000185
      (drivers/storage/class/cdrom/cdrom.c:6996) originalIrp: B49C1B78
      (drivers/storage/class/cdrom/cdrom.c:6997) CdRomUpdateGeometryCompletion Irp->IoStatus.Status: 00000000
      (ntoskrnl/io/iomgr/irp.c:1335) Irp: B49C1B78
      (ntoskrnl/io/iomgr/irp.c:1336) Irp->IoStatus: C0000185
      (ntoskrnl/io/iomgr/irp.c:1337) Irp->IoStatus.Status: C0000185
      (ntoskrnl/io/iomgr/irp.c:1421) No more completion routines...

        Attachments

        1. another_reactos.log
          553 kB
        2. reactos_more_verbose.log
          52 kB
        3. reactos.log
          45 kB

          Activity

            People

            • Assignee:
              bug zilla Bug Zilla
              Reporter:
              berylliumquestion berylliumquestion
            • Votes:
              3 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated: