EtwpOpenLogger
_WMI_LOGGER_CONTEXT *__stdcall EtwpOpenLogger(
UINT64 LoggerId,
_ETW_SILODRIVERSTATE *SiloState,
INT8 RequestorMode,
_ETW_LOGGER_HANDLE *LoggerHandle){
__int64 v4;
_ETHREAD *CurrentThread;
__int64 v8;
_WMI_LOGGER_CONTEXT *result;
v4 = (unsigned int)LoggerId;
LoggerHandle->DereferenceAndLeave = 0;
if( RequestorMode == 1 || ObGetCurrentIrql() < 2u )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
v8 = v4;
if( !ExAcquireRundownProtectionCacheAwareEx((INT64)SiloState->EtwpLoggerRundown[v4], 1i64) )
{
KeLeaveCriticalRegion();
return 0i64;
}
LoggerHandle->DereferenceAndLeave = 1;
}
else
{
v8 = v4;
}
result = SiloState->EtwpLoggerContext[v8];
if( ((unsigned __int8)result & 1) != 0 )
{
EtwpCloseLogger((unsigned int)v4, SiloState, (_ETW_LOGGER_HANDLE)LoggerHandle->DereferenceAndLeave);
return 0i64;
}
return result;
}Referenced by:
EtwSendTraceBuffer
EtwTraceEvent
EtwTraceRaw
EtwpCCSwapFlush
EtwpKernelTraceRundown
EtwpLogSystemEventUnsafe
EtwpTraceMessageVa
NtTraceEvent