HalpDmaAllocateContiguousPagesFromContiguousPoolAtHighLevelV3

__int64 __fastcall HalpDmaAllocateContiguousPagesFromContiguousPoolAtHighLevelV3(__int64 a1, __int64 a2, ULONG a3){
  int v3; 
  ULONG v5; 
  unsigned int ClearBitsAndSet; 
  unsigned int v8; 
  __int64 result; 
  __int64 v10; 
  __int64 v11; 
  ULONG i; 
  v3 = -1;
  v5 = 0;
LABEL_2:
  ClearBitsAndSet = RtlFindClearBitsAndSet(*(PRTL_BITMAP *)(a2 + 16), a3, v5);
  v8 = ClearBitsAndSet;
  if( ClearBitsAndSet == -1 || ClearBitsAndSet == v3 )
    return 0i64;
  if( v3 == -1 )
    v3 = ClearBitsAndSet;
  result = HalpDmaLinkContiguousTranslations(a2, ClearBitsAndSet, a3);
  v10 = 0i64;
  v11 = result;
  for( i = 0; i < a3; ++i )
  {
    if( (*(_QWORD *)(v11 + 48) & 0xFFFFFFFFFFFFF000ui64) == 0 )
    {
      v5 = v8 + i + 1;
      goto LABEL_2;
    }
    v10 = v11;
    v11 = *(_QWORD *)(v11 + 8);
  }
  *(_QWORD *)(v10 + 8) = 0i64;
  return result;
}

Referenced by:

HalpDmaAllocateContiguousPagesFromContiguousPoolAtHighLevel