MiFindEmptyAddressRangeInTree

VOID __stdcall MiFindEmptyAddressRangeInTree(
        _RTL_AVL_TREE *Table,
        UINT64 SizeOfRange,
        UINT64 Alignment,
        PVOID MinimumAddress){
  UINT64 v4; 
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  UINT64 v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  _RTL_BALANCED_NODE *Root; 
  unsigned __int64 i; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  _QWORD **v15; 
  unsigned __int64 v16; 
  _QWORD *v17; 
  UINT64 v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  UINT64 v21; 
  unsigned __int64 v22; 
  unsigned __int64 v23; 
  _QWORD *v24; 
  v4 = Alignment >> 12;
  v5 = (SizeOfRange + 4095) >> 12;
  v6 = (unsigned __int64)MinimumAddress >> 12;
  v8 = ~((Alignment >> 12) - 1);
  v9 = v8 & ((Alignment >> 12) + (v22 >> 12) - 1);
  if( (unsigned __int64)MinimumAddress >> 12 )
    v9 = MiHonorRangeStraddleRequirement(v9, (SizeOfRange + 4095) >> 12, v6, 0i64);
  v10 = v23 >> 12;
  if( v9 > v23 >> 12 || v5 > v10 - v9 + 1 )
    return;
  Root = Table->Root;
  if( !Table->Root )
    goto LABEL_33;
  do
  {
    i = (unsigned __int64)Root;
    Root = Root->Children[0];
  }
  while( Root );
  v13 = i;
  v14 = *(unsigned int *)(i + 24) | ((unsigned __int64)*(unsigned __int8 *)(i + 32) << 32);
  if( v14 > v9 && v5 <= v14 - v9 )
    goto LABEL_33;
  while( 1 )
  {
    v15 = *(_QWORD ***)(i + 8);
    v16 = i;
    if( v15 )
    {
      v17 = *v15;
      for( i = *(_QWORD *)(i + 8); v17; v17 = (_QWORD *)*v17 )
        i = (unsigned __int64)v17;
    }
    else
    {
      while( 1 )
      {
        i = *(_QWORD *)(i + 16) & 0xFFFFFFFFFFFFFFFCui64;
        if( !i || *(_QWORD *)i == v16 )
          break;
        v16 = i;
      }
    }
    v18 = v4 + (*(unsigned int *)(v13 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v13 + 33) << 32));
    if( !i )
      break;
    if( (v8 & (v18 - 1)) < v9 )
    {
      if( (*(unsigned int *)(i + 24) | ((unsigned __int64)*(unsigned __int8 *)(i + 32) << 32)) <= v9 )
        goto LABEL_21;
      v19 = v9;
    }
    else
    {
      v19 = v8 & v18;
    }
    if( v6 )
      v19 = MiHonorRangeStraddleRequirement(v19, v5, v6, 0i64);
    if( v19 > v10 )
      return;
    v20 = *(unsigned int *)(i + 24) | ((unsigned __int64)*(unsigned __int8 *)(i + 32) << 32);
    if( v20 > v19 && v5 <= v20 - v19 && v5 <= v10 - v19 + 1 )
    {
      *v24 = v19 << 12;
      return;
    }
LABEL_21:
    v13 = i;
  }
  v21 = v8 & v18;
  if( v21 >= v9 )
    v9 = v21;
  if( v6 )
    v9 = MiHonorRangeStraddleRequirement(v9, v5, v6, 0i64);
  if( v10 >= v9 && v5 <= v10 - v9 + 1 )
LABEL_33:
    *v24 = v9 << 12;
}

Referenced by:

MiFindEmptyAddressRange