RtlAddDynamicEnforcedAddressRange

NTSTATUS __stdcall RtlAddDynamicEnforcedAddressRange(
        _RTL_BALANCED_NODE **Tree,
        _RTL_BALANCED_NODE *a2,
        _RTL_BALANCED_NODE *a3){
  _RTL_BALANCED_NODE *Pool2; 
  BOOL v7; 
  _RTL_BALANCED_NODE *v8; 
  _RTL_BALANCED_NODE *v10; 
  NTSTATUS v11; 
  _RTL_BALANCED_NODE *v12; 

  Pool2 = (_RTL_BALANCED_NODE *)ExAllocatePool2(257i64, 0x28ui64, 0x52414544ui64);
  v7 = 0;
  v8 = Pool2;
  if( !Pool2 )
    return -1073741801;
  Pool2[1].Children[0] = a2;
  Pool2[1].Children[1] = a3;
  v10 = *Tree;
  if( !*Tree )
  {
LABEL_7:
    RtlAvlInsertNodeEx(Tree, (UINT64)v10, v7, v8);
    return 0;
  }
  while( 1 )
  {
    v11 = RtlpDynamicEnforcedAddressRangesTreeCompare((INT64)v8, (INT64)v10);
    if( v11 <= 0 )
      break;
    v12 = v10->Children[1];
    if( !v12 )
    {
      v7 = 1;
      goto LABEL_7;
    }
LABEL_10:
    v10 = v12;
  }
  if( v11 < 0 )
  {
    v12 = v10->Children[0];
    if( !v10->Children[0] )
      goto LABEL_7;
    goto LABEL_10;
  }
  ExFreePoolWithTag(v8, 0);
  return -1073741800;
}

Referenced by:

PspProcessDynamicEnforcedAddressRanges