MiAnyProtosAreMapped

INT64 __fastcall MiAnyProtosAreMapped(INT64 a1, _QWORD *a2){
  unsigned int v2; 
  unsigned __int64 v3; 
  unsigned __int64 v4; 
  UINT64 v5; 
  _MMPFN *v6; 
  unsigned __int64 v7; 
  UINT8 PageIrql; 
  v2 = 0;
  PageIrql = 17;
  if( a1 == a2[3] )
    v3 = a2[1];
  else
    v3 = *(_QWORD *)(a1 + 8);
  if( a1 == a2[4] )
    v4 = a2[2] + 8i64;
  else
    v4 = v3 + 8i64 * *(unsigned int *)(a1 + 44);
  if( v3 < v4 )
  {
    do
    {
      v6 = MiCheckProtoPtePageState((_MMPTE *)v3, &PageIrql);
      if( v6 )
      {
        v7 = v4;
        if( v4 > (v3 & 0xFFFFFFFFFFFFF000ui64) + 4096 )
          v7 = (v3 & 0xFFFFFFFFFFFFF000ui64) + 4096;
        while( v3 < v7 )
        {
          if( (*(_BYTE *)v3 & 1) != 0 )
          {
            v2 = 1;
            v3 = v4;
            break;
          }
          v3 += 8i64;
        }
        LOBYTE(v5) = PageIrql;
        if( PageIrql != 17 )
        {
          MiUnlockProtoPoolPage(v6, v5);
          LOBYTE(v5) = 17;
          PageIrql = 17;
        }
      }
      else
      {
        LOBYTE(v5) = PageIrql;
        v3 = (v3 & 0xFFFFFFFFFFFFF000ui64) + 4096;
      }
    }
    while( v3 < v4 );
    if( (_BYTE)v5 != 17 )
      MiUnlockProtoPoolPage(v6, v5);
  }
  return v2;
}

Referenced by:

MiTrimSection