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