MiGetImageProtoProtection

VOID __fastcall MiGetImageProtoProtection(_MMVAD_SHORT *Vad, _MMPTE *ProtoPte){
  unsigned int *i; 
  _RTL_BALANCED_NODE *v4; 
  _CONTROL_AREA *v5; 
  unsigned int SessionId; 

  for( i = (unsigned int *)Vad[1].ExtraCreateInfo; i; i = (unsigned int *)*((_QWORD *)i + 2) )
  {
    if( (*((_BYTE *)i + 34) & 2) != 0
      && (v5 = *(_CONTROL_AREA **)i, (*(_DWORD *)(*(_QWORD *)i + 56i64) & 0x4000000) != 0) )
    {
      SessionId = MmGetSessionIdEx(KeGetCurrentThread()->ApcState.Process);
      v4 = MiGetSharedProtos(v5, SessionId, (_SUBSECTION *)i)[3].Children[0];
    }
    else
    {
      v4 = (_RTL_BALANCED_NODE *)*((_QWORD *)i + 1);
    }
    if( ProtoPte >= (_MMPTE *)v4 && ProtoPte < (_MMPTE *)&v4->Children[i[11]] )
      break;
  }
}

Referenced by:

MiGetPageProtection