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.