MiFindEmptyAddressRangeDownTree

__int64 __fastcall MiFindEmptyAddressRangeDownTree(
        __int64 *a1,
        __int64 a2,
        unsigned __int64 a3,
        unsigned __int64 a4,
        unsigned __int64 a5,
        unsigned __int64 a6,
        unsigned __int64 *a7){
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  unsigned __int64 v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  __int64 v21; 
  unsigned __int64 v22; 
  INT64 *v23; 
  INT64 *v24; 
  unsigned __int64 v25; 
  unsigned __int64 v26; 
  unsigned __int64 v27; 
  INT64 *v28; 
  unsigned __int64 v29; 
  unsigned __int64 v30; 
  unsigned __int64 v31; 
  unsigned __int64 v32; 
  unsigned __int64 v33; 
  unsigned __int64 v34; 
  __int64 v35; 
  __int64 v36; 
  unsigned __int64 v37; 
  unsigned __int64 v38; 
  INT64 v39; 
  INT64 v41; 
  INT64 v42; 
  INT64 result[3]; 
  int v44; 
  int v45; 
  char v46; 
  char v47; 
  unsigned __int64 v48; 
  __int64 v49; 
  memset((INT64)result, 0i64);
  v11 = (a2 + 4095) & 0xFFFFFFFFFFFFF000ui64;
  v12 = a4 >> 12;
  v13 = v11 >> 12;
  if( a5 >= a6 || a6 - a5 < v11 )
    goto LABEL_39;
  v14 = a3;
  v15 = -(__int64)a3;
  v16 = a6 >> 12;
  v17 = v15 & (a6 - v11);
  v18 = v14 >> 12;
  v19 = v17 >> 12;
  v20 = 0i64;
  v48 = v18;
  if( v12 )
  {
    v41 = MiHonorRangeStraddleRequirement((v15 & (a6 - v11)) >> 12, v11 >> 12, v12, 1i64);
    v18 = v48;
    v16 = a6 >> 12;
    v19 = ~(v48 - 1) & v41;
    v17 = v19 << 12;
  }
  if( v17 < a5 )
  {
LABEL_39:
    LODWORD(v20) = -1073741801;
  }
  else
  {
    v21 = *a1;
    if( *a1 )
    {
      v22 = v20;
      do
      {
        v23 = (INT64 *)v21;
        v49 = v21;
        v21 = *(_QWORD *)(v21 + 8);
      }
      while( v21 );
      v24 = v23;
      v25 = a5 >> 12;
      while( 1 )
      {
        if( v23 )
        {
          v24 = result;
          v22 = (unsigned __int64)v23;
          v46 = a6 >> 44;
          v49 = v20;
          v44 = v16;
        }
        else
        {
          v26 = *(_QWORD *)v22;
          v27 = v22;
          if( *(_QWORD *)v22 )
          {
            while( 1 )
            {
              v22 = v26;
              if( *(_QWORD *)(v26 + 8) == v20 )
                break;
              v26 = *(_QWORD *)(v26 + 8);
            }
          }
          else
          {
            while( 1 )
            {
              v22 = *(_QWORD *)(v22 + 16) & 0xFFFFFFFFFFFFFFFCui64;
              if( !v22 || *(_QWORD *)(v22 + 8) == v27 )
                break;
              v27 = v22;
            }
          }
        }
        v28 = result;
        if( v22 )
        {
          v29 = v18 - 1;
          v30 = a5 >> 12;
          v31 = (*(unsigned int *)(v22 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v22 + 33) << 32)) + 1;
          if( v31 >= v25 )
            v30 = (*(unsigned int *)(v22 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v22 + 33) << 32)) + 1;
          if( v31 >= v25 )
            v28 = (INT64 *)v22;
          v32 = v30 + v18 - 1;
        }
        else
        {
          v45 = v20;
          v29 = v18 - 1;
          v47 = v20;
          v32 = v25 + v18 - 1;
        }
        v33 = ~v29;
        v34 = v33 & v32;
        if( v12 )
        {
          v42 = MiHonorRangeStraddleRequirement(v34, v13, v12, 0i64);
          v18 = v48;
          v34 = v42;
        }
        v16 = a6 >> 12;
        if( v34 <= v19 )
        {
          v35 = *((unsigned __int8 *)v24 + 32);
          v36 = *((unsigned int *)v24 + 6);
          v37 = a6 >> 12;
          v38 = v36 | (v35 << 32);
          if( v38 <= a6 >> 12 )
            v37 = v38;
          if( v37 > v34 && v13 <= v37 - v34 )
            break;
        }
        if( v28 == result )
          goto LABEL_39;
        v23 = (INT64 *)v49;
        v24 = v28;
      }
      v39 = v33 & (v37 - v13);
      if( v12 )
        v39 = v33 & MiHonorRangeStraddleRequirement(v39, v13, v12, 1i64);
      *a7 = v39 << 12;
    }
    else
    {
      *a7 = v17;
    }
  }
  return(unsigned int)v20;
}

Referenced by:

MiFindEmptyAddressRangeDown
MiFinishCreateSection