PiPnpRtlApplyMandatoryFilters

NTSTATUS __fastcall PiPnpRtlApplyMandatoryFilters(
        HPNPCTX *hPnpCtx,
        WCHAR *ObjectName,
        PNP_OBJECT_TYPE ObjectType,
        VOID *ObjectBaseKey,
        _SECURITY_SUBJECT_CONTEXT *SecuritySubjectContext,
        UINT8 *Matched){
  _SECURITY_SUBJECT_CONTEXT *v6; 
  void *ClientToken; 
  int SessionIdToken; 
  VOID *v13; 
  UINT8 *v14; 
  int v15; 
  int v16; 
  char v19; 
  char IsServiceSession[40]; 

  v6 = SecuritySubjectContext;
  IsServiceSession[0] = 0;
  ClientToken = SecuritySubjectContext->ClientToken;
  if( !SecuritySubjectContext->ClientToken )
    ClientToken = SecuritySubjectContext->PrimaryToken;
  SessionIdToken = SeQuerySessionIdTokenEx(ClientToken, (UINT64 *)&SecuritySubjectContext, (UINT8 *)IsServiceSession);
  if( SessionIdToken >= 0 )
  {
    if( !IsServiceSession[0] )
      goto LABEL_5;
    LOBYTE(SecuritySubjectContext) = 0;
    SessionIdToken = PiAuVerifyAccessToObject(
                       0xF0000ui64,
                       SecurityObject,
                       (_GENERIC_MAPPING *)&PiAuLocalSystemSecurityMapping,
                       v6,
                       (UINT8 *)&SecuritySubjectContext);
    v19 = (char)SecuritySubjectContext;
    if( SessionIdToken < 0 )
      v19 = 0;
    if( SessionIdToken >= 0 )
    {
      if( v19 )
      {
        v14 = Matched;
        goto LABEL_15;
      }
LABEL_5:
      v14 = Matched;
      v15 = ObjectType - 1;
      if( !v15 )
        return PiPnpRtlApplyMandatoryDeviceFilters(hPnpCtx, ObjectName, ObjectBaseKey, v6, Matched);
      v16 = v15 - 2;
      if( !v16 )
        return PiPnpRtlApplyMandatoryDeviceInterfaceFilters(hPnpCtx, ObjectName, ObjectBaseKey, v6, Matched);
      if( v16 == 2 )
        return PiPnpRtlApplyMandatoryDeviceContainerFilters(hPnpCtx, ObjectName, v13, v6, Matched);
LABEL_15:
      *v14 = 1;
    }
  }
  return SessionIdToken;
}

Referenced by:

IoGetDeviceInterfaceAlias
IopDeviceInterfaceFilterCallback
IopGetDeviceInterfaces
PiCMMandatoryFilterCallback
PiCMValidateDeviceInstance
PiDqQueryApplyObjectEvent
PiUEventApplyAdditionalFilters