EtwTraceRaw
INT64 __stdcall EtwTraceRaw(UINT64 TraceHandle, VOID *Data, UINT64 DataSize, INT8 RequestorMode){
UINT64 v5;
int ReserveTraceBufferStatus;
unsigned int v7;
INT64 v8;
INT64 v9;
INT64 v10;
UINT8 *v11;
INT64 v13[2];
INT64 a1[2];
__int64 v15;
CHAR a3;
void *Src;
INT8 v18;
v18 = RequestorMode;
Src = Data;
v5 = (unsigned int)DataSize;
*(_OWORD *)a1 = 0i64;
v15 = 0i64;
a3 = 0;
ReserveTraceBufferStatus = 0;
v13[0] = 0i64;
v7 = (unsigned __int16)TraceHandle;
if( RequestorMode )
v8 = PsGetCurrentServerSiloGlobals()[108];
else
v8 = EtwpHostSiloState;
if( v7 < *(_DWORD *)(v8 + 16) )
{
v9 = EtwpOpenLogger(v7, v8, RequestorMode, &a3);
v10 = v9;
v13[1] = v9;
if( v9 )
{
if( (*(_DWORD *)(v9 + 12) & 0x80u) != 0 )
{
ReserveTraceBufferStatus = -1073741790;
LABEL_31:
EtwpCloseLogger(v7, v8, a3);
return(unsigned int)ReserveTraceBufferStatus;
}
if( RequestorMode )
{
ReserveTraceBufferStatus = EtwpCheckLoggerControlAccess(0x200ui64, (_WMI_LOGGER_CONTEXT *)v9);
if( ReserveTraceBufferStatus < 0 )
goto LABEL_31;
if( (_DWORD)v5 )
{
if( ((unsigned __int8)Src & 3) != 0 )
ExRaiseDatatypeMisalignment();
if( (unsigned __int64)Src + v5 > 0x7FFFFFFF0000i64 || (char *)Src + v5 < Src )
MEMORY[0x7FFFFFFF0000] = 0;
}
}
else if( (*(_DWORD *)(v9 + 12) & 0x1000000) != 0 )
{
ReserveTraceBufferStatus = -1073741637;
goto LABEL_31;
}
v11 = (UINT8 *)EtwpReserveTraceBuffer((UINT64 *)v10, (unsigned int)v5, (INT64)a1, v13, 0);
if( v11 )
{
memmove(v11, (UINT8 *)Src, v5);
if( (*(_DWORD *)(v10 + 12) & 0x80000) != 0
&& (!(_BYTE)KdDebuggerNotPresent && !KdPitchDebugger || KdEventLoggingPresent) )
{
EtwpSendTraceEvent(v10, (INT64)a1);
}
if( *(_QWORD *)(v10 + 1272) )
EtwpInvokeEventCallback(v10, (INT64)a1, 0i64);
EtwpReleaseTraceBuffer(a1);
}
else
{
ReserveTraceBufferStatus = EtwpGetReserveTraceBufferStatus(v10, v5);
}
goto LABEL_31;
}
}
return(unsigned int)-1073741816;
}Referenced by:
NtTraceEvent