MiLocateSessionProtosInSubsection

_MI_PER_SESSION_PROTOS *__stdcall MiLocateSessionProtosInSubsection(_SUBSECTION *Subsection, UINT64 Id){
  _MI_PER_SESSION_PROTOS *result; 

  result = Subsection->SessionDriverProtos;
  while( result )
  {
    if( (unsigned int)Id > result->SessionId )
    {
      result = (_MI_PER_SESSION_PROTOS *)result->SessionProtoNode.Children[1];
    }
    else
    {
      if( (unsigned int)Id >= result->SessionId )
        return result;
      result = (_MI_PER_SESSION_PROTOS *)result->SessionProtoNode.Children[0];
    }
  }
  return 0i64;
}

Referenced by:

MiCreatePerSessionProtos
MiDereferenceSubsectionProtos
MiGetSharedProtosAtDpcLevel