EtwpFindGuidEntryByGuid
_ETW_GUID_ENTRY *__stdcall EtwpFindGuidEntryByGuid(
_ETW_SILODRIVERSTATE *SiloState,
const _GUID *Guid,
_ETW_GUID_TYPE GuidType){
_ETW_GUID_ENTRY *v4;
_ETW_HASH_BUCKET *v5;
_ETHREAD *CurrentThread;
_LIST_ENTRY *v7;
_EX_PUSH_LOCK *p_BucketLock;
_ETW_GUID_ENTRY *Flink;
__int64 v10;
v4 = 0i64;
v5 = &SiloState->EtwpGuidHashTable[((unsigned __int8)Guid->Data1 ^ (unsigned __int8)(*(_DWORD *)&Guid->Data2 ^ *(_DWORD *)Guid->Data4 ^ *(_DWORD *)&Guid->Data4[4])) & 0x3F];
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v7 = &v5->ListHead[GuidType];
--CurrentThread->Tcb.KernelApcDisable;
p_BucketLock = &v5->BucketLock;
ExAcquirePushLockSharedEx(&v5->BucketLock, 0i64);
Flink = (_ETW_GUID_ENTRY *)v7->Flink;
if( v7->Flink != v7 )
{
while( 1 )
{
v10 = *(_QWORD *)&Guid->Data1 - *(_QWORD *)&Flink->Guid.Data1;
if( *(_QWORD *)&Guid->Data1 == *(_QWORD *)&Flink->Guid.Data1 )
v10 = *(_QWORD *)Guid->Data4 - *(_QWORD *)Flink->Guid.Data4;
if( !v10 && EtwpReferenceGuidEntry(Flink) )
break;
Flink = (_ETW_GUID_ENTRY *)Flink->GuidList.Flink;
if( Flink == (_ETW_GUID_ENTRY *)v7 )
goto LABEL_9;
}
v4 = Flink;
}
LABEL_9:
if( _InterlockedCompareExchange64(&p_BucketLock->_bf_0, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(p_BucketLock);
KeAbPostRelease(p_BucketLock);
KeLeaveCriticalRegion();
return v4;
}Referenced by:
EtwpAddGuidEntry
EtwpAddRegEntryToGroup
EtwpDisallowedGuidAddition
EtwpDisallowedGuidRemoval
EtwpEnableGuid
EtwpGetTraceGroupInfo
EtwpGetTraceGuidInfo
EtwpNotifyGuid
EtwpRegisterProvider
EtwpRegisterUMGuid
NtTraceEvent
SendCaptureStateNotificationsWorker