EtwpGetSidExtendedHeaderItem
VOID __stdcall EtwpGetSidExtendedHeaderItem(_ETW_SID_EXTENDED_DATA_ITEM *SidItem){
_ETHREAD *CurrentThread;
_ADAPTER_OBJECT *v3;
_TOKEN_TYPE v4;
_ADAPTER_OBJECT *v5;
int v6;
size_t v7;
unsigned int v8;
unsigned int v9;
char EffectiveOnly[4];
_TOKEN_TYPE TokenType;
_SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
UINT64 RequiredLength[10];
EffectiveOnly[0] = 0;
ImpersonationLevel = SecurityAnonymous;
memset(RequiredLength, 0, 72);
TokenType = 0;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = (_ADAPTER_OBJECT *)PsReferenceEffectiveToken(
CurrentThread,
&TokenType,
(UINT8 *)EffectiveOnly,
&ImpersonationLevel,
0i64);
v4 = TokenType;
v5 = v3;
if( TokenType == TokenImpersonation && ImpersonationLevel < SecurityImpersonation )
{
if( v3 )
HalPutDmaAdapter(v3);
v5 = (_ADAPTER_OBJECT *)PsReferencePrimaryToken(CurrentThread->Tcb.Process);
v4 = TokenPrimary;
}
SeQueryUserSidToken(v5, (char *)RequiredLength + 4, 0x44ui64, RequiredLength);
if( v4 == TokenPrimary )
{
ObFastDereferenceObject(&CurrentThread->Tcb.Process->Token, v5);
}
else if( v5 )
{
HalPutDmaAdapter(v5);
}
v6 = RequiredLength[0];
v7 = RequiredLength[0];
*(_DWORD *)&SidItem->Header.ExtType = 2;
SidItem->Header.DataSize = v6;
v8 = v6 + 8;
v9 = (v6 + 15) & 0xFFFFFFF8;
SidItem->Header.Size = (v6 + 15) & 0xFFF8;
memmove(&SidItem->Sid, (char *)RequiredLength + 4, v7);
memset((char *)SidItem + v8, 0i64, v9 - v8);
}Referenced by:
EtwpEventWriteFull
EtwpWriteUserEvent