SeCreateClientSecurityFromSubjectContextEx
NTSTATUS __stdcall SeCreateClientSecurityFromSubjectContextEx(
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;
VOID *v13;
NTSTATUS ClientSecurity;
INT64 ThreadEffectiveOnly;
INT64 ReturnAnonymous;
UINT8 pbDominate;
ClientToken = (_TOKEN *)SubjectContext->ClientToken;
PrimaryTokenTrustSid = 0i64;
UsePrimaryTrust = 0;
pbDominate = 0;
if( !ClientToken )
ClientToken = (_TOKEN *)SubjectContext->PrimaryToken;
ObfReferenceObjectWithTag(ClientToken, 0x746C6644u);
if( SubjectContext->ClientToken )
{
v12 = TokenImpersonation;
RtlSidDominatesForTrust(
*((PVOID *)SubjectContext->PrimaryToken + 138),
*((PVOID *)SubjectContext->ClientToken + 138),
&pbDominate);
if( !pbDominate )
{
UsePrimaryTrust = 1;
PrimaryTokenTrustSid = v13;
}
}
else
{
v12 = TokenPrimary;
}
LOBYTE(v11) = ServerIsRemote;
LOBYTE(ReturnAnonymous) = 1;
LOBYTE(ThreadEffectiveOnly) = 0;
ClientSecurity = SepCreateClientSecurityEx(
ClientToken,
ClientSecurityQos,
v11,
v12,
ThreadEffectiveOnly,
SubjectContext->ImpersonationLevel,
ReturnAnonymous,
0i64,
UsePrimaryTrust,
PrimaryTokenTrustSid,
ClientContext);
if( ClientSecurity < 0 || !ClientContext->SecurityQos.ContextTrackingMode )
ObfDereferenceObjectWithTag(ClientToken, 0x746C6644ui64);
return ClientSecurity;
}Referenced by:
No references.