MiRemoveLargeFreeLoaderDescriptors

VOID __stdcall MiRemoveLargeFreeLoaderDescriptors(INT64 a1){
  int v1; 
  _QWORD *v2; 
  _QWORD *v3; 
  __int64 v4; 
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  int v7; 
  UINT64 v8; 
  char *j; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  UINT64 v13; 
  char *v14; 
  unsigned __int64 v15; 
  unsigned __int64 v16; 
  __int64 v17; 
  int v18; 
  __int64 *v19; 
  __int64 v20; 
  unsigned __int64 v21; 
  unsigned __int64 v22; 
  __int64 **v23; 
  unsigned __int64 v24; 
  __int64 v25; 
  __int64 v26; 
  __int64 v27; 
  __int64 v28; 
  _QWORD *v29; 
  __int64 *v30; 
  __int64 **v31; 
  unsigned __int64 v32; 
  INT64 i; 

  qword_140D57758 = (__int64)&MxDeferredBootFreeDescriptorHead;
  MxDeferredBootFreeDescriptorHead = (__int64)&MxDeferredBootFreeDescriptorHead;
  if( ((unsigned __int64)KeFeatureBits & 0x2000000000i64) != 0 )
  {
    v1 = 0;
    if( KeNumberNodes )
    {
      v2 = (_QWORD *)(a1 + 32);
      for( i = a1 + 32; ; v2 = (_QWORD *)i )
      {
        v3 = (_QWORD *)*v2;
        v4 = 0i64;
        v5 = 0i64;
        v6 = 0i64;
        if( (_QWORD *)*v2 != v2 )
        {
          do
          {
            v7 = *((_DWORD *)v3 + 4);
            if( v7 == 2 || v7 == 24 )
            {
              v8 = v3[4];
              for( j = (char *)v3[3]; v8; v8 -= v11 )
              {
                MiRestrictRangeToNode((UINT64)j, v8);
                v11 = v10;
                LODWORD(v12) = MiSearchNumaNodeTable(j);
                if( *(_DWORD *)(v12 + 8) == v1 )
                {
                  v5 += v11;
                  if( v11 >= 0x200000 && (unsigned __int64)j >= 0x100000 && v11 > v6 )
                  {
                    v6 = v11;
                    v4 = (__int64)v3;
                  }
                }
                j += v11;
              }
            }
            v3 = (_QWORD *)*v3;
          }
          while( v3 != (_QWORD *)i );
          if( v5 >= 0x300000 )
          {
            if( v4 )
            {
              v13 = *(_QWORD *)(v4 + 32);
              v14 = *(char **)(v4 + 24);
              if( v13 )
              {
                while( 1 )
                {
                  MiRestrictRangeToNode((UINT64)v14, v13);
                  v16 = v15;
                  LODWORD(v17) = MiSearchNumaNodeTable(v14);
                  if( *(_DWORD *)(v17 + 8) == v1 && v16 >= 0x200000 && (unsigned __int64)v14 >= 0x100000 && v16 >= v6 )
                  {
                    if( v5 - v16 >= 0x100000 )
                      goto LABEL_29;
                    if( v5 - 0x100000 >= 0x100000 )
                      break;
                  }
                  v14 += v16;
                  v13 -= v16;
                  if( !v13 )
                    goto LABEL_9;
                }
                v16 = v5 - 0x100000;
LABEL_29:
                v18 = MxDeferredBootFreeDescriptorIndex;
                v19 = &MxDeferredBootFreeDescriptor[5 * (unsigned int)MxDeferredBootFreeDescriptorIndex];
                *((_DWORD *)v19 + 4) = *(_DWORD *)(v4 + 16);
                v20 = (unsigned int)(v18 + 1);
                MxDeferredBootFreeDescriptorIndex = v18 + 1;
                v21 = (unsigned __int64)(v14 + 0x3FFFF) & 0xFFFFFFFFFFFC0000ui64;
                v22 = (unsigned __int64)&v14[v16] & 0xFFFFFFFFFFFC0000ui64;
                v23 = (__int64 **)qword_140D57758;
                v24 = v22 - v21;
                v19[3] = v21;
                v19[4] = v22 - v21;
                if( *v23 != &MxDeferredBootFreeDescriptorHead )
LABEL_42:
                  __fastfail(3u);
                *v19 = (__int64)&MxDeferredBootFreeDescriptorHead;
                v19[1] = (__int64)v23;
                *v23 = v19;
                qword_140D57758 = (__int64)v19;
                v25 = *(_QWORD *)(v4 + 24);
                v26 = *(_QWORD *)(v4 + 32);
                v27 = v26 + v25;
                if( v21 == v25 )
                {
                  if( v22 != v27 )
                  {
                    *(_QWORD *)(v4 + 24) = v24 + v25;
LABEL_38:
                    *(_QWORD *)(v4 + 32) = v26 - v24;
                    goto LABEL_9;
                  }
                  v28 = *(_QWORD *)v4;
                  if( *(_QWORD *)(*(_QWORD *)v4 + 8i64) != v4 )
                    goto LABEL_42;
                  v29 = *(_QWORD **)(v4 + 8);
                  if( *v29 != v4 )
                    goto LABEL_42;
                  *v29 = v28;
                  *(_QWORD *)(v28 + 8) = v29;
                }
                else
                {
                  if( v22 == v27 )
                    goto LABEL_38;
                  MxDeferredBootFreeDescriptorIndex = v20 + 1;
                  v30 = &MxDeferredBootFreeDescriptor[5 * v20];
                  *((_DWORD *)v30 + 4) = *(_DWORD *)(v4 + 16);
                  v30[3] = *(_QWORD *)(v4 + 24);
                  v30[4] = v21 - *(_QWORD *)(v4 + 24);
                  v31 = *(__int64 ***)(v4 + 8);
                  if( *v31 != (__int64 *)v4 )
                    goto LABEL_42;
                  v30[1] = (__int64)v31;
                  *v30 = v4;
                  *v31 = v30;
                  *(_QWORD *)(v4 + 8) = v30;
                  v32 = *(_QWORD *)(v4 + 24) - v21;
                  *(_QWORD *)(v4 + 24) = v22;
                  *(_QWORD *)(v4 + 32) += v32 - v24;
                }
              }
            }
          }
        }
LABEL_9:
        if( ++v1 >= (unsigned int)(unsigned __int16)KeNumberNodes )
          return;
      }
    }
  }
}

Referenced by:

MiInitNucleus