HalpInitializeInterruptRemappingBspLate

VOID __stdcall HalpInitializeInterruptRemappingBspLate(
        _RTL_SPLAY_LINKS *Tree,
        _LARGE_INTEGER *StartingByte,
        _LARGE_INTEGER *EndingByte,
        _RTL_SPLAY_LINKS **LastEdgeNode,
        UINT8 *GreaterThan){
  unsigned int v5; 
  struct _KPRCB *CurrentPrcb; 
  char v7; 
  bool v8; 
  unsigned int v9; 
  NTSTATUS v10; 

  *(&CmpDummyThreadEvent + 973) = 0i64;
  *(&CmpDummyThreadEvent + 1948) = 0;
  v5 = 1;
  *(&CmpDummyThreadEvent + 1944) = 1;
  KeInitializeEvent((INT64)&CmpDummyThreadEvent + 7800, 1, 0);
  CurrentPrcb = KeGetCurrentPrcb();
  v7 = 0;
  *(&CmpDummyThreadEvent + 1928) = 0;
  *(&CmpDummyThreadEvent + 1940) = 1;
  if( CurrentPrcb->CpuVendor == 1 )
  {
    v7 = 15;
    v5 = 32;
    *(&CmpDummyThreadEvent + 1928) = 15;
    *(&CmpDummyThreadEvent + 1940) = 32;
  }
  v8 = (v7 & 4) == 0;
  v9 = 512;
  *(&CmpDummyThreadEvent + 1937) = *(&CmpDummyThreadEvent + 1958) / v5;
  if( v8 )
    v9 = *(&CmpDummyThreadEvent + 1958);
  *(&CmpDummyThreadEvent + 1938) = v9;
  *(&CmpDummyThreadEvent + 1796) = *(&CmpDummyThreadEvent + 1958) / v5 / v9;
  *(&CmpDummyThreadEvent + 1936) = *(&CmpDummyThreadEvent + 1958) / v9;
  v10 = HalpIrtExtendRemappingRange(0i64);
  if( v10 < 0 )
    goto LABEL_9;
  RtlSetBits((_RTL_BITMAP *)&CmpDummyThreadEvent + 450, 0i64, 8ui64);
  if( (*(&CmpDummyThreadEvent + 7712) & 4) != 0 )
    v10 = HalpIrtInitializeDeviceApertures();
  if( v10 < 0 )
  {
LABEL_9:
    if( *(&CmpDummyThreadEvent + 901) )
    {
      ExFreePoolWithTag(*(&CmpDummyThreadEvent + 901), 0);
      *(&CmpDummyThreadEvent + 901) = 0i64;
    }
  }
}

Referenced by:

HalpInitializeInterruptsBspLate