SeCreateClientSecurityFromSubjectContext

INT64 __stdcall SeCreateClientSecurityFromSubjectContext(
        _SECURITY_SUBJECT_CONTEXT *SubjectContext,
        _SECURITY_QUALITY_OF_SERVICE *ClientSecurityQos,
        UINT8 ServerIsRemote,
        _SECURITY_CLIENT_CONTEXT *ClientContext){
  _TOKEN *ClientToken; 
  VOID *PrimaryTokenTrustSid; 
  UINT8 UsePrimaryTrust; 
  INT64 v11; 
  _TOKEN_TYPE v12; 
  int ClientSecurity; 
  VOID *v15; 
  INT64 ThreadEffectiveOnly; 
  INT64 ReturnAnonymous; 
  UINT8 pbDominate; 
  ClientToken = (_TOKEN *)SubjectContext->ClientToken;
  PrimaryTokenTrustSid = 0i64;
  UsePrimaryTrust = 0;
  pbDominate = 0;
  if( !ClientToken )
    ClientToken = (_TOKEN *)SubjectContext->PrimaryToken;
  ObfReferenceObject(ClientToken);
  if( SubjectContext->ClientToken )
  {
    v12 = TokenImpersonation;
    RtlSidDominatesForTrust(
      *((PVOID *)SubjectContext->PrimaryToken + 138),
      *((PVOID *)SubjectContext->ClientToken + 138),
      &pbDominate);
    if( !pbDominate )
    {
      UsePrimaryTrust = 1;
      PrimaryTokenTrustSid = v15;
    }
  }
  else
  {
    v12 = TokenPrimary;
  }
  LOBYTE(v11) = ServerIsRemote;
  LOBYTE(ReturnAnonymous) = 0;
  LOBYTE(ThreadEffectiveOnly) = 0;
  ClientSecurity = SepCreateClientSecurityEx(
                     ClientToken,
                     ClientSecurityQos,
                     v11,
                     v12,
                     ThreadEffectiveOnly,
                     SubjectContext->ImpersonationLevel,
                     ReturnAnonymous,
                     0i64,
                     UsePrimaryTrust,
                     PrimaryTokenTrustSid,
                     ClientContext);
  if( ClientSecurity < 0 || !ClientSecurityQos->ContextTrackingMode )
    HalPutDmaAdapter((PADAPTER_OBJECT)ClientToken);
  return(unsigned int)ClientSecurity;
}

Referenced by:

No references.