MiMakeIoRangePermanent

__int64 __fastcall MiMakeIoRangePermanent(__int64 a1){
  UINT64 v1; 
  int v3; 
  int v4; 
  UINT64 v5; 
  KIRQL v6; 
  unsigned __int64 v7; 
  _QWORD *v8; 
  bool i; 
  unsigned __int64 v10; 
  _QWORD *v11; 
  __int64 v12; 
  UINT64 v13; 
  _WORD *v14; 
  __int64 v15; 
  RTL_BALANCED_NODE *v16; 
  RTL_BALANCED_NODE *v17; 
  __int64 v18; 
  _QWORD *v19; 
  bool v20; 
  unsigned __int64 ParentValue; 
  _QWORD *v22; 
  unsigned __int64 v23; 
  unsigned __int64 v24; 
  _QWORD *v25; 
  bool v26; 
  _QWORD *v27; 
  PVOID v28; 
  KIRQL v30; 
  PVOID P; 
  v1 = *(_QWORD *)(a1 + 24);
  v3 = 0;
  v4 = *(_DWORD *)(a1 + 40);
  v5 = *(_QWORD *)(a1 + 32) - v1;
  P = 0i64;
  v30 = ExAcquireSpinLockExclusive(&dword_140C4E980);
  v6 = v30;
  v7 = v5 + 1;
  if( !v7 )
  {
LABEL_31:
    v25 = (_QWORD *)qword_140C4E9E0;
    v26 = 0;
    if( qword_140C4E9E0 )
    {
      while( 1 )
      {
        if( *(_QWORD *)(a1 + 32) < v25[3] )
        {
          v27 = (_QWORD *)*v25;
          if( !*v25 )
            break;
        }
        else
        {
          if( *(_QWORD *)(a1 + 24) <= v25[4] )
          {
            ++dword_140C4E9D8;
            v3 = -1073741800;
            goto LABEL_37;
          }
          v27 = (_QWORD *)v25[1];
          if( !v27 )
          {
            v26 = 1;
            break;
          }
        }
        v25 = v27;
      }
    }
    RtlAvlInsertNodeEx((unsigned __int64 *)&qword_140C4E9E0, (__int64)v25, v26, (_QWORD *)a1);
    goto LABEL_37;
  }
  do
  {
    v8 = (_QWORD *)*((_QWORD *)&xmmword_140C4E988 + 1);
    for( i = *((_QWORD *)&xmmword_140C4E988 + 1) == 0i64; !i; i = v11 == 0i64 )
    {
      v10 = v8[5];
      if( v1 < v10 )
      {
        v11 = (_QWORD *)*v8;
      }
      else
      {
        if( v1 < v10 + 512 )
        {
          v12 = v8[6];
          v13 = (v1 & 0xFFFFFFFFFi64) - v10;
          v14 = (_WORD *)(v12 + 2 * v13);
          if( v1 + v7 <= v10 + 512 )
            v15 = 2 * (v7 + v13);
          else
            v15 = 1024i64;
          while( (unsigned __int64)v14 < v12 + v15 )
          {
            if( (*v14 & 0x3FFF) != 0 )
            {
              if( (unsigned __int16)*v14 >> 14 != v4 )
              {
                ++dword_140C4E9D4;
                v3 = -1073741800;
                v7 = 0i64;
                goto LABEL_29;
              }
            }
            else
            {
              *v14 = 0x4000;
            }
            ++v14;
            ++v1;
            --v7;
          }
          goto LABEL_29;
        }
        v11 = (_QWORD *)v8[1];
      }
      v8 = v11;
    }
    v16 = MiRemoveUnmappedIoNode(&qword_140C4E998, v1);
    v17 = v16;
    if( !v16 )
    {
      v18 = v1 & 0x1FF;
      goto LABEL_26;
    }
    v19 = P;
    v20 = 0;
    ParentValue = v16[1].ParentValue;
    if( !P )
      goto LABEL_25;
    while( ParentValue < v19[5] )
    {
      v22 = (_QWORD *)*v19;
      if( !*v19 )
        goto LABEL_25;
LABEL_39:
      v19 = v22;
    }
    v22 = (_QWORD *)v19[1];
    if( v22 )
      goto LABEL_39;
    v20 = 1;
LABEL_25:
    RtlAvlInsertNodeEx((unsigned __int64 *)&P, (__int64)v19, v20, v17);
    v18 = (v1 & 0xFFFFFFFFFi64) - v17[1].ParentValue;
LABEL_26:
    v23 = 512 - v18;
    v24 = v7;
    if( v23 <= v7 )
      v24 = v23;
    v7 -= v24;
    v1 += v24;
LABEL_29:
    ;
  }
  while( v7 );
  v6 = v30;
  if( v3 >= 0 )
    goto LABEL_31;
LABEL_37:
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&dword_140C4E980);
  __writecr8(v6);
  while( P )
  {
    v28 = P;
    RtlAvlRemoveNode((unsigned __int64 *)&P, (__int64 *)P);
    ExFreePoolWithTag(v28, 0);
  }
  return(unsigned int)v3;
}

Referenced by:

MiMakeIoRangePermanentDpc