EtwpSetProviderTraitsUm
NTSTATUS __fastcall EtwpSetProviderTraitsUm(_ETW_REG_ENTRY *RegEntry, _ETW_PROVIDER_TRAITS *Traits, _FAST_MUTEX *Mutex){
unsigned int v4;
_RTL_RB_TREE *v6;
_LIST_ENTRY *Flink;
int v8;
__int16 v9;
__int64 Flink_low;
_LIST_ENTRY *Blink;
VOID **PoolWithTag;
int v13;
__int64 v14;
__int64 v15;
__int64 v16;
__int64 v18;
_RTL_RB_TREE *Tree;
_RTL_RB_TREE *v20;
v4 = (unsigned int)Traits;
v6 = 0i64;
if( !RegEntry->RegList.Blink || !LOWORD(RegEntry->GroupRegList.Flink) )
goto LABEL_15;
Flink = RegEntry->RegList.Flink;
Tree = 0i64;
v8 = ObReferenceObjectByHandle(Flink, 0x800ui64, EtwpRegistrationObjectType, 1, (VOID **)&Tree, 0i64);
v6 = Tree;
v20 = Tree;
if( v8 < 0 )
goto LABEL_16;
v9 = WORD1(Tree[6].Root);
if( (v9 & 8) == 0 && (v9 & 2) != 0 )
{
if( Tree[6].Min )
{
v8 = -1073741823;
}
else
{
Flink_low = LOWORD(RegEntry->GroupRegList.Flink);
if( (_WORD)Flink_low )
{
Blink = RegEntry->RegList.Blink;
if( (unsigned __int64)Blink + Flink_low > 0x7FFFFFFF0000i64
|| (_LIST_ENTRY *)((char *)Blink + Flink_low) < Blink )
{
MEMORY[0x7FFFFFFF0000] = 0;
LOWORD(Flink_low) = RegEntry->GroupRegList.Flink;
}
}
PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned __int16)Flink_low + 28i64, 1417114693i64);
v13 = HIDWORD(PoolWithTag);
if( PoolWithTag )
{
memmove((char *)PoolWithTag + 28, RegEntry->RegList.Blink, LOWORD(RegEntry->GroupRegList.Flink));
HIDWORD(v18) = v13;
v8 = EtwpSetProviderTraitsCommon(RegEntry, (_ETW_PROVIDER_TRAITS *)v4, Mutex, v6);
}
else
{
v8 = -1073741670;
}
}
}
else
{
LABEL_15:
v8 = -1073741811;
}
LABEL_16:
if( v6 )
{
if( v8 && EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_SET_TRAITS_FAILED) )
{
LODWORD(v18) = v8;
EtwpEventWriteRegistrationStatus(v15, v14, v16, (__int64)v6, v18);
}
HalPutDmaAdapter((PADAPTER_OBJECT)v6);
}
return v8;
}Referenced by:
NtTraceControl