EtwWriteErrorLogEntry
NTSTATUS __stdcall EtwWriteErrorLogEntry(
UINT64 TraceHandle,
_IO_ERROR_LOG_PACKET *ErrorLogPacket,
UINT64 PacketSize,
_LARGE_INTEGER *EventTimeStamp,
PWCHAR ProviderName,
PWCHAR DeviceName,
UINT16 SidLength,
PVOID SidData){
__int16 v8;
unsigned int v9;
__int64 v11;
unsigned __int16 v12;
unsigned __int16 v13;
unsigned __int8 v14;
USHORT EventCategory;
__int64 v16;
__int64 v17;
int v18;
unsigned int v19;
unsigned int NumberOfStrings;
unsigned int v21;
__int64 v22;
unsigned int v23;
unsigned int v24;
unsigned __int16 v25;
__int64 v26;
unsigned int v27;
unsigned __int64 v28;
UCHAR *v29;
UCHAR *v30;
__int64 v31;
__int64 v32;
unsigned int v33;
__int64 v34;
NTSTATUS result;
unsigned __int16 v36;
__int16 v37;
unsigned int v38;
int v39[108];
int v40;
__int16 v41;
USHORT v42;
__int64 v43;
__int64 v44;
__int64 v45[6];
int v46;
int v47;
UINT16 *p_SidLength;
__int64 v49;
PVOID v50;
int v51;
int v52;
v8 = ::TraceHandle;
v9 = (unsigned int)ErrorLogPacket->ErrorCode >> 30;
v11 = (unsigned int)PacketSize;
v12 = 0;
v13 = 0;
if( v9 == 1 )
v14 = 4;
else
v14 = (v9 == 2) + 2;
v41 = v14;
EventCategory = ErrorLogPacket->EventCategory;
v45[1] = (__int64)&ErrorLogPacket->ErrorCode;
v16 = -1i64;
v42 = EventCategory;
v17 = -1i64;
v45[2] = 4i64;
v40 = 0;
v43 = 0i64;
v44 = (__int64)EventTimeStamp;
v45[0] = 8i64;
do
++v17;
while( ProviderName[v17] );
v45[5] = (__int64)ProviderName;
v18 = (unsigned __int16)(v17 + 1);
v37 = v18;
v46 = 2 * v18;
v45[4] = 2i64;
v49 = 2i64;
v19 = 5;
p_SidLength = &SidLength;
v45[3] = (__int64)&v37;
v47 = 0;
if( SidLength )
{
v19 = 6;
v50 = SidData;
v51 = SidLength;
v52 = 0;
}
NumberOfStrings = ErrorLogPacket->NumberOfStrings;
v21 = ErrorLogPacket->DumpDataSize + 40;
if( v21 > (unsigned int)v11 )
v21 = v11;
v38 = v21;
if( (_WORD)NumberOfStrings && ErrorLogPacket->StringOffset < v21 )
ErrorLogPacket->StringOffset = v21;
v22 = 2i64 * v19;
v36 = 0;
v23 = v19 + 1;
v24 = NumberOfStrings;
ErrorLogPacket->NumberOfStrings = NumberOfStrings + 1;
v25 = 0;
v45[v22 - 1] = (__int64)&v36;
v45[v22] = 2i64;
v26 = 2i64 * v23;
v45[2 * v23 - 1] = (__int64)DeviceName;
do
++v16;
while( DeviceName[v16] );
HIDWORD(v45[2 * v23]) = 0;
v27 = v23 + 1;
LODWORD(v45[v26]) = 2 * (unsigned __int16)(v16 + 1);
if( v24 )
{
v28 = (unsigned __int64)(&ErrorLogPacket->RetryCount + ErrorLogPacket->StringOffset) & 0xFFFFFFFFFFFFFFFEui64;
v29 = &ErrorLogPacket->MajorFunctionCode + v11;
do
{
v30 = (UCHAR *)(v28 + 2i64 * v13);
if( v30 >= v29 )
break;
if( !*(_WORD *)v30 )
{
++v25;
v12 = v13 + 1;
v36 = v25;
}
++v13;
}
while( v25 < v24 );
v31 = 2i64 * v27++;
v45[v31 - 1] = v28;
LODWORD(v45[v31]) = 2 * v12;
HIDWORD(v45[v31]) = 0;
}
v32 = 2i64 * v27;
v36 = v25 + 1;
v33 = v27 + 1;
v45[v32 - 1] = (__int64)&v38;
v45[v32] = 4i64;
v34 = 2i64 * v33;
LODWORD(v45[v34]) = v21;
v45[v34 - 1] = (__int64)ErrorLogPacket;
HIDWORD(v45[v34]) = 0;
memset(v39, 0i64, 0x1A8u);
*(_QWORD *)&v39[98] = EtwpHostSiloState;
*(_OWORD *)&v39[10] = LegacyEventLogGuid;
HIWORD(v39[33]) = v8;
v39[32] = 1;
LOBYTE(v39[33]) = -1;
*(__m128i *)&v39[36] = _mm_load_si128((const __m128i *)&_xmm);
v39[34] = 64;
result = EtwpEventWriteFull(
(__int64)v39,
1u,
0,
0,
(__int64)&v40,
0,
4,
0i64,
0i64,
v33 + 1,
(__int64)&v44,
0i64,
0i64,
0i64,
0,
0i64,
0i64);
if( result < 0 )
--ErrorLogPacket->NumberOfStrings;
return result;
}Referenced by:
IopErrorLogThread