SeCreateClientSecurity
NTSTATUS __stdcall SeCreateClientSecurity(
_ETHREAD *ClientThread,
PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
BOOLEAN RemoteSession,
PSECURITY_CLIENT_CONTEXT ClientContext){
_ETHREAD *CurrentThread;
__int64 v8;
_TOKEN *v9;
_TOKEN_TYPE v10;
bool v11;
NTSTATUS result;
NTSTATUS v13;
INT64 ThreadEffectiveOnly;
INT64 ReturnAnonymous;
BOOL UsePrimaryTrust;
char ImpersonationLevel[12];
BYTE v18;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
LOWORD(UsePrimaryTrust) = 0;
memset(ImpersonationLevel, 0, sizeof(ImpersonationLevel));
v18 = 0;
if( ClientThread == CurrentThread )
v8 = *((_QWORD *)CurrentThread + 23);
else
v8 = *((_QWORD *)ClientThread + 68);
v9 = (_TOKEN *)PsReferenceImpersonationTokenEx(
(INT64)ClientThread,
0,
(BYTE *)&UsePrimaryTrust + 2,
&UsePrimaryTrust,
(INT64 *)ImpersonationLevel,
&v18);
if( v9 )
{
v11 = UsePrimaryTrust;
v10 = TokenImpersonation;
}
else
{
v9 = (_TOKEN *)ObFastReferenceObject((INT64 *)(v8 + 1208));
if( !v9 )
{
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx(v8 + 1080, 0i64);
v9 = (_TOKEN *)ObFastReferenceObjectLocked((_EX_FAST_REF *)(v8 + 1208));
if( _InterlockedCompareExchange64((volatile signed __int64 *)(v8 + 1080), 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)(v8 + 1080));
KeAbPostRelease((PVOID)(v8 + 1080));
KeLeaveCriticalRegionThread((__int64)CurrentThread);
}
v10 = TokenPrimary;
v18 = *(_BYTE *)(v8 + 2170);
v11 = 0;
}
SepReconcileTrustSidWithProcessProtection(
v9->TrustLevelSid,
(_PS_PROTECTION *)&v18,
(UINT8 *)&UsePrimaryTrust + 1,
(VOID **)&ImpersonationLevel[4]);
LOBYTE(ReturnAnonymous) = 0;
LOBYTE(ThreadEffectiveOnly) = v11;
result = SepCreateClientSecurityEx(
v9,
ClientSecurityQos,
RemoteSession,
v10,
ThreadEffectiveOnly,
*(_SECURITY_IMPERSONATION_LEVEL *)ImpersonationLevel,
ReturnAnonymous,
0i64,
BYTE1(UsePrimaryTrust),
*(VOID **)&ImpersonationLevel[4],
ClientContext);
v13 = result;
if( result < 0 || !ClientSecurityQos->ContextTrackingMode )
{
HalPutDmaAdapter((PADAPTER_OBJECT)v9);
return v13;
}
return result;
}Referenced by:
AlpcpCreateClientPort
AlpcpCreateSecurityContext
AlpcpImpersonateMessage
EtwpStartLogger
EtwpUpdateTrace
NtImpersonateThread