MiSelectRelocationStartHint

VOID __stdcall MiSelectRelocationStartHint(_RTL_BITMAP **Bitmap, UINT16 SizeIn64k, UINT64 StartBit, INT64 a4){
  int v4; 
  UINT64 v6; 
  _ETHREAD *CurrentThread; 
  char v9; 

  v4 = a4;
  v6 = SizeIn64k;
  if( Bitmap[1] )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    if( !(_DWORD)a4 )
    {
      --CurrentThread->Tcb.SpecialApcDisable;
      ExAcquirePushLockExclusiveEx(&stru_140C4C888, 0i64);
    }
    RtlCopyBitMapEx((_RTL_BITMAP_EX *)*Bitmap, &Destination, 0i64);
    RtlMergeBitMapsEx(&Destination.SizeOfBitMap, (INT64 *)Bitmap[1]);
    RtlFindClearBitsEx(&Destination, v6, StartBit);
    if( !v4 )
    {
      v9 = _InterlockedExchangeAdd64(&stru_140C4C888._bf_0, 0xFFFFFFFFFFFFFFFFui64);
      if( (v9 & 2) != 0 && (v9 & 4) == 0 )
        ExfTryToWakePushLock(&stru_140C4C888);
      KeAbPostRelease(&stru_140C4C888);
      KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
    }
  }
  else
  {
    RtlFindClearBitsEx((_RTL_BITMAP_EX *)*Bitmap, SizeIn64k, StartBit);
  }
}

Referenced by:

MiObtainRelocationBits
MiSelectImageBase