HalpAllocPhysicalMemoryInternal

unsigned __int64 __fastcall HalpAllocPhysicalMemoryInternal(__int64 a1, _QWORD *a2, unsigned int a3, char a4){
  unsigned __int64 result; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  __int64 *v9; 
  __int64 v10; 
  __int64 v11; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  __int64 i; 
  unsigned __int64 v15; 
  int v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  __int64 v19; 
  __int64 *v20; 
  unsigned __int64 v21; 
  int v22; 
  __int64 v23; 
  __int64 **v24; 
  __int64 v25; 
  __int64 *v26; 
  __int64 v27; 
  __int64 *v28; 
  __int64 v29; 
  __int64 v30; 
  result = 0i64;
  if( HalpUsedAllocDescriptors + 2 <= (unsigned int)HalpAllocationDescriptorArraySize )
  {
    v6 = -1i64;
    v7 = 1i64;
    if( a2 )
      v6 = *a2 >> 12;
    v8 = a3;
    if( v6 >= a3 )
    {
      if( HalpMiscDiscardLowMemory && v6 - a3 >= 0x100 )
        v7 = 256i64;
      v9 = (__int64 *)(a1 + 32);
      v10 = 0i64;
      v11 = 0i64;
      v12 = 0i64;
      v13 = 0i64;
      for( i = *v9; ; i = *(_QWORD *)i )
      {
        if( (__int64 *)i == v9 )
        {
LABEL_23:
          if( (__int64 *)i == v9 )
            return result;
          if( !v12
            && v11
            && *(_DWORD *)(v11 + 16) == 26
            && (v19 = *(_QWORD *)(v11 + 32), v19 + *(_QWORD *)(v11 + 24) == *(_QWORD *)(v10 + 24)) )
          {
            v20 = 0i64;
            *(_QWORD *)(v11 + 32) = v19 + v8;
          }
          else
          {
            v22 = HalpUsedAllocDescriptors;
            v20 = &(*HalpAllocationDescriptorArray)[5 * (unsigned int)HalpUsedAllocDescriptors];
            v20[4] = v8;
            v23 = *(_QWORD *)(v10 + 24);
            *((_DWORD *)v20 + 4) = 26;
            v20[3] = v12 + v23;
            HalpUsedAllocDescriptors = v22 + 1;
          }
          v21 = *(_QWORD *)(v10 + 32) - v8;
          if( v12 )
          {
            v27 = v21 - v12;
            if( v27 )
            {
              v28 = &(*HalpAllocationDescriptorArray)[5 * (unsigned int)HalpUsedAllocDescriptors++];
              v28[4] = v27;
              v28[3] = v12 + v8 + *(_QWORD *)(v10 + 24);
              *((_DWORD *)v28 + 4) = *(_DWORD *)(v10 + 16);
              v29 = *(_QWORD *)v10;
              if( *(_QWORD *)(*(_QWORD *)v10 + 8i64) != v10 )
                goto LABEL_49;
              *v28 = v29;
              v28[1] = v10;
              *(_QWORD *)(v29 + 8) = v28;
              *(_QWORD *)v10 = v28;
            }
            *(_QWORD *)(v10 + 32) = v12;
            v30 = *(_QWORD *)v10;
            if( *(_QWORD *)(*(_QWORD *)v10 + 8i64) == v10 )
            {
              *v20 = v30;
              v20[1] = v10;
              *(_QWORD *)(v30 + 8) = v20;
              *(_QWORD *)v10 = v20;
              goto LABEL_32;
            }
          }
          else
          {
            *(_QWORD *)(v10 + 24) += v8;
            *(_QWORD *)(v10 + 32) = v21;
            if( !v20 )
              goto LABEL_31;
            v24 = *(__int64 ***)(v10 + 8);
            if( *v24 == (__int64 *)v10 )
            {
              *v20 = v10;
              v20[1] = (__int64)v24;
              *v24 = v20;
              *(_QWORD *)(v10 + 8) = v20;
              v21 = *(_QWORD *)(v10 + 32);
LABEL_31:
              if( v21 )
              {
LABEL_32:
                HalpMmEarlyPhysicalPagesAllocated += v8;
                return v13;
              }
              v25 = *(_QWORD *)v10;
              if( *(_QWORD *)(*(_QWORD *)v10 + 8i64) == v10 )
              {
                v26 = *(__int64 **)(v10 + 8);
                if( *v26 == v10 )
                {
                  *v26 = v25;
                  *(_QWORD *)(v25 + 8) = v26;
                  goto LABEL_32;
                }
              }
            }
          }
LABEL_49:
          __fastfail(3u);
        }
        v15 = *(_QWORD *)(i + 24);
        v11 = v10;
        v10 = i;
        v16 = *(_DWORD *)(i + 16);
        v13 = 0i64;
        if( v16 == 5 || v16 == 2 )
        {
          if( v15 )
            break;
        }
LABEL_11:
        ;
      }
      v17 = v7;
      if( v15 >= v7 )
        v17 = *(_QWORD *)(i + 24);
      if( a4 )
      {
        if( ((v17 + 15) & 0xFFFFFFFFFFFFFFF0ui64) < v17 )
          goto LABEL_21;
        v17 = (v17 + 15) & 0xFFFFFFFFFFFFFFF0ui64;
      }
      v18 = v6;
      if( v15 + *(_QWORD *)(i + 32) <= v6 )
        v18 = v15 + *(_QWORD *)(i + 32);
      if( v17 < v18 && v8 <= v18 - v17 )
        v13 = v17 << 12;
LABEL_21:
      if( v13 )
      {
        v12 = (v13 >> 12) - v15;
        goto LABEL_23;
      }
      goto LABEL_11;
    }
  }
  return result;
}

Referenced by:

HalpAllocPhysicalMemory