PiAuCheckTokenMembership

NTSTATUS __stdcall PiAuCheckTokenMembership(VOID *SidToCheck, UINT8 *IsMember){
  size_t v4; 
  VOID **PoolWithTag; 
  _ACL *v6; 
  int Acl; 
  UINT64 v8; 
  _KPROCESSOR_MODE AccessMode; 
  int AccessStatus; 
  unsigned int GrantedAccess; 
  _SECURITY_SUBJECT_CONTEXT SubjectContext; 
  _GENERIC_MAPPING GenericMapping; 

  GrantedAccess = 0;
  AccessStatus = 0;
  memset(&SubjectContext, 0, sizeof(SubjectContext));
  GenericMapping.GenericWrite = 0x20000;
  GenericMapping.GenericExecute = 0x20000;
  GenericMapping.GenericRead = 131073;
  GenericMapping.GenericAll = 2031617;
  *IsMember = 0;
  v4 = 3 * (RtlLengthSid((INT64)SidToCheck) + 20);
  PoolWithTag = ExAllocatePoolWithTag(1ui64, v4, 538996816i64);
  v6 = (_ACL *)PoolWithTag;
  if( !PoolWithTag )
    return -1073741670;
  memset(PoolWithTag, 0i64, v4);
  RtlCreateSecurityDescriptor(v6, 1ui64);
  RtlSetOwnerSecurityDescriptor(v6, SidToCheck, 0);
  RtlSetGroupSecurityDescriptor(v6, SidToCheck, 0);
  Acl = RtlCreateAcl(v6 + 5, (_ACL)(v4 - 40), 2ui64, v8);
  if( Acl >= 0 )
  {
    Acl = RtlpAddKnownAce(v6 + 5, 2ui64, 0i64, 1ui64, SidToCheck, 0);
    if( Acl >= 0 )
    {
      Acl = RtlSetDaclSecurityDescriptor(v6, 1u, v6 + 5, 0);
      if( Acl >= 0 )
      {
        SeCaptureSubjectContext((INT64)&SubjectContext);
        LOBYTE(AccessMode) = KeGetCurrentThread()->PreviousMode;
        *IsMember = (unsigned __int8)SeAccessCheck(
                                       v6,
                                       &SubjectContext,
                                       0,
                                       1,
                                       0,
                                       0i64,
                                       &GenericMapping,
                                       AccessMode,
                                       &GrantedAccess,
                                       &AccessStatus);
        SeReleaseSubjectContext(&SubjectContext);
        Acl = 0;
      }
    }
  }
  ExFreePoolWithTag(v6, 0);
  return Acl;
}

Referenced by:

PiAuCheckClientInteractive