ExpWaitForBootDevices

VOID __stdcall __noreturn ExpWaitForBootDevices(PVOID Context){
  UINT64 v1; 
  int v2; 
  __int64 *v3; 
  unsigned __int8 v4; 
  unsigned __int64 v5; 
  while( 1 )
  {
    KeWaitForSingleObject(&ExBootDevicesRemovedEvent, Executive, 0, 0, 0i64);
    v2 = 60;
    while( 1 )
    {
      v3 = &ExBootDeviceList;
      while( 1 )
      {
        KeAcquireSpinLockRaiseToDpc(&ExBootDeviceListSpinLock, v1);
        v3 = (__int64 *)v3[1];
        v5 = v4;
        KxReleaseSpinLock(&ExBootDeviceListSpinLock);
        if( v3 == &ExBootDeviceList )
          break;
        __writecr8(v5);
        if( *((_DWORD *)v3 - 1)
          && ((unsigned __int8(__fastcall *)(__int64, __int64))v3[5])(v3[4], v3[6])
          && _InterlockedExchangeAdd((volatile signed __int32 *)v3 - 1, 0xFFFFFFFF) == 1
          && _InterlockedExchangeAdd(&ExNumMissingBootDevices, 0xFFFFFFFF) == 1 )
        {
          goto LABEL_10;
        }
      }
      __writecr8(v5);
LABEL_10:
      if( !ExNumMissingBootDevices )
        break;
      KeFreezeExecution(0i64, 0i64);
      KeStallExecutionProcessor(0xF4240u);
      KeThawExecution(1u);
      if( !--v2 )
        KeBugCheckEx(0x7Bu, 0i64, 0i64, 3ui64, 0i64);
    }
  }
}

Referenced by:

No references.