HalpIrtExtendRemappingRange

INT64 __fastcall HalpIrtExtendRemappingRange(UINT64 a1){
  unsigned int v1; 
  __int64 v2; 
  char v3; 
  unsigned int *PoolWithTag; 
  struct _RTL_BITMAP BitMapHeader; 
  v1 = 0;
  v2 = (unsigned int)a1;
  *(&BitMapHeader.SizeOfBitMap + 1) = 0;
  if( (unsigned int)a1 >= 0x20 || (_DWORD)a1 && (HalpIrtAllocationFlags & 8) == 0 )
  {
    return(unsigned int)-1073741637;
  }
  else
  {
    v3 = 1;
    PoolWithTag = (unsigned int *)ExAllocatePoolWithTag(
                                    PagedPool,
                                    4 * ((unsigned int)(HalpIrtEntriesPerRange + 31) >> 5),
                                    0x206C6148ui64);
    if( PoolWithTag )
    {
      BitMapHeader.SizeOfBitMap = HalpIrtEntriesPerRange;
      BitMapHeader.Buffer = PoolWithTag;
      RtlClearAllBits(&BitMapHeader);
      ExAcquireFastMutex(&HalpIrtLock);
      if( !*((_QWORD *)&HalpIrtRanges.Buffer + 2 * v2) )
      {
        ++HalpIrtAllocatedRanges;
        v3 = 0;
        *(&HalpIrtRanges + v2) = BitMapHeader;
      }
      KeReleaseGuardedMutex(&HalpIrtLock);
      if( v3 )
        ExFreePoolWithTag(PoolWithTag, 0);
    }
    else
    {
      return(unsigned int)-1073741670;
    }
  }
  return v1;
}

Referenced by:

HalpInitializeInterruptRemappingBspLate
HalpIrtAllocateIndex