SeAdjustAccessStateForAccessConstraints

VOID __stdcall SeAdjustAccessStateForAccessConstraints(
        PVOID ObjectType,
        PSECURITY_DESCRIPTOR SecurityDescriptor,
        PACCESS_STATE AccessState){
  int v3; 
  int v4; 
  int Mask; 
  int v8; 
  int v9; 
  __int64 v10; 
  _SYSTEM_PROCESS_TRUST_LABEL_ACE *TrustLabelAce; 
  _SYSTEM_PROCESS_TRUST_LABEL_ACE *v12; 
  int v13; 
  int v14; 
  int v15; 
  ULONG *p_SidStart; 
  PVOID v17; 
  int v18; 
  int v19; 
  UINT8 pbDominate; 
  __int64 v21; 
  v3 = 0;
  pbDominate = 0;
  v21 = 0i64;
  v4 = -1;
  Mask = -1;
  if( (*((_DWORD *)AccessState + 3) & 6) != 0 )
  {
    v8 = *((_DWORD *)ObjectType + 17);
    if( v8 == 1 )
    {
      v3 = 17957001;
      v9 = 18809110;
    }
    else if( v8 == 256 )
    {
      v3 = 16908313;
      v9 = 17760262;
    }
    else
    {
      v9 = 0;
    }
    v10 = *((_QWORD *)AccessState + 4);
    if( !v10 )
      v10 = *((_QWORD *)AccessState + 6);
    SepFilterCheck((__int64)SecurityDescriptor, 0i64, v10, 1, (char *)&v21);
    if( BYTE4(v21) )
      v4 = v21;
    TrustLabelAce = SeGetTrustLabelAce(SecurityDescriptor);
    v12 = TrustLabelAce;
    if( TrustLabelAce )
    {
      p_SidStart = &TrustLabelAce->SidStart;
      if( TrustLabelAce == (_SYSTEM_PROCESS_TRUST_LABEL_ACE *)-8i64
        || (LODWORD(v17) = SepLocateTokenTrustLevel((SECURITY_SUBJECT_CONTEXT *)AccessState + 1),
            RtlSidDominatesForTrust(v17, p_SidStart, &pbDominate),
            !pbDominate) )
      {
        Mask = v12->Mask;
      }
    }
    v13 = ~(v4 & Mask);
    v14 = v13 & v3;
    v15 = v13 & v9;
    if( Mask != -1 || v4 != -1 )
    {
      v18 = *((_DWORD *)AccessState + 3);
      v19 = *((_DWORD *)AccessState + 5);
      if( (v18 & 2) != 0 )
        v19 &= ~v14;
      if( (v18 & 4) != 0 )
        v19 &= ~v15;
      *((_DWORD *)AccessState + 5) = v19;
    }
  }
}

Referenced by:

No references.