MiTrimThisWsle

__int64 __fastcall MiTrimThisWsle(__int64 a1, unsigned __int64 a2, __int64 a3, int *a4, char a5, _DWORD *a6){
  _MMPTE *PteBase; 
  _QWORD *v11; 
  int v12; 
  UNICODE_STRING *v13; 
  unsigned int v14; 
  char v15; 
  unsigned int v16; 
  char v17; 
  int v18; 
  int v20; 
  __int64 v21; 
  __int64 v22; 
  PteBase = MmGetPteBase();
  v11 = (_QWORD *)((char *)PteBase + ((a2 >> 9) & 0x7FFFFFFFF8i64));
  if( a6 )
    *a6 = 0;
  v12 = *a4;
  if( a2 < (unsigned __int64)PteBase || a2 > (unsigned __int64)MmGetPteLimit() )
  {
    v13 = (UNICODE_STRING *)(HIBYTE(*v11) & 0xFi64);
    v14 = HIBYTE(*v11) & 0xF;
  }
  else
  {
    v14 = (*((_DWORD *)MmGetPfnDb()
           + 12
           * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)PteBase + ((a2 >> 9) & 0x7FFFFFFFF8i64)) >> 12) & 0xFFFFFFFFFi64)) >> 1) & 7;
  }
  v15 = a5;
  if( (v12 & 0x60) != 0 )
  {
    LOBYTE(v18) = MI_PFN_IS_PROTO((UNICODE_STRING *)a3, v13, v14, (PWCHAR)a4);
    if( !v18
      || ((v12 & 0x20) == 0
       || (*(_DWORD *)(a3 + 16) & 0x400i64) != 0
       || ((*(_QWORD *)(a3 + 40) & 0x1000000000i64) != 0 || *(__int64 *)(a3 + 8) <= 0)
       && !MiLocateCloneAddress(a1 - 1664, *(_QWORD *)(a3 + 8) | 0x8000000000000000ui64))
      && ((v12 & 0x40) == 0 || (*(_DWORD *)(a3 + 16) & 0x400i64) == 0) )
    {
      goto LABEL_26;
    }
    return 1i64;
  }
  v16 = v12 & 0xF;
  if( !v16 )
    return 1i64;
  v17 = *(_BYTE *)(a3 + 35);
  if( (v17 & 8) == 0 && (v17 & 7u) < 5 )
    return 1i64;
  if( v14 < v16 )
    goto LABEL_26;
  if( (a5 & 1) == 0 )
    return 1i64;
  if( *((_QWORD *)a4 + 30) && a2 <= 0x7FFFFFFEFFFFi64 && a6 )
  {
    *a6 = 1;
    return 0i64;
  }
LABEL_26:
  v20 = 2;
  if( (v15 & 1) == 0 || a2 <= 0x7FFFFFFEFFFFi64 && (*(_BYTE *)(a1 + 184) & 7) == 0 && *(_QWORD *)(a1 + 624) && a6 )
  {
    if( (*(_BYTE *)(a1 + 184) & 7) != 0 && *(_WORD *)(a3 + 32) != 1
      || v14 >= 6
      || (unsigned int)MiGetPfnPriority(a3) >= 5 )
    {
      return 0i64;
    }
    v21 = 1i64;
  }
  else
  {
    v21 = 2i64;
    if( v14 && v14 < 7 )
    {
      v20 = 0;
      v21 = 0i64;
    }
    if( v20 == 2 )
      return 0i64;
  }
  v22 = 10 * v21;
  if( !LOBYTE(a4[2 * v22 + 80]) )
  {
    LOBYTE(a4[2 * v22 + 80]) = 1;
    *(_QWORD *)&a4[2 * v22 + 78] = a2;
  }
  _bittestandset(&a4[2 * v22 + 62], ((unsigned int)v11 >> 3) & 0x1FF);
  return 0i64;
}

Referenced by:

MiTrimPte
MiTrimPteWorker