EtwTelemetryCoverageReport
INT64 __fastcall EtwTelemetryCoverageReport(INT64 a1){
int v1;
int v2;
_QWORD *v4;
BOOL v5;
__int64 v6;
__int64 v7;
unsigned int v8;
UINT64 v10;
unsigned int v11;
INT64 v12;
unsigned __int8 v13;
unsigned __int64 v14;
int v15;
UINT64 v16;
_QWORD *PoolWithTag;
unsigned __int8 v18;
unsigned __int64 v19;
__int64 v20;
_QWORD *v21;
_QWORD *v22;
int v23;
int v24;
int v25;
int v26;
const CHAR *v27;
int v28;
int v29;
int v30;
int v31;
int v32;
int v33;
int v34;
__int64 v35;
struct _EVENT_DATA_DESCRIPTOR v36;
int *v37;
int v38;
int v39;
int *v40;
int v41;
int v42;
int *v43;
int v44;
int v45;
int *v46;
int v47;
int v48;
int *v49;
int v50;
int v51;
int *v52;
int v53;
int v54;
char v55[16];
v1 = 0;
v2 = 0;
v28 = 0;
v4 = 0i64;
v5 = ObGetCurrentIrql() < 2u && (*(_DWORD *)(a1 + 16) & 1) == 0;
if( !EtwpCoverageNonPagedContext )
{
if( !v5 )
return(unsigned int)-1073741641;
v8 = EtwpCoverageEnsureContext();
if( (v8 & 0x80000000) != 0 )
return v8;
}
v6 = EtwpCoverageNonPagedContext;
v7 = EtwpCoverageNonPagedContext + 24;
if( *(_DWORD *)(a1 + 12) >= 0xFFFFFF00 )
return(unsigned int)-1073741637;
if( v5 )
{
EtwpCoverageRecord((INT64 **)EtwpCoverageContext, a1);
return 0;
}
if( !(unsigned int)EtwpCoverageValidateCP((INT64 *)a1) )
{
v8 = -1073741811;
LABEL_39:
if( EtwpCoverageCoreTracingEnabled
&& (unsigned int)dword_140C02BE8 > 5
&& tlgKeywordOn((__int64)&dword_140C02BE8, 1i64) )
{
v24 = *(_DWORD *)v6;
v39 = 0;
v42 = 0;
v45 = 0;
v48 = 0;
v51 = 0;
v54 = 0;
v29 = v24;
v37 = &v29;
v30 = *(_DWORD *)(v6 + 4);
v40 = &v30;
v25 = v23 - *(_DWORD *)(v6 + 16);
v26 = v23 - *(_DWORD *)(v6 + 20);
v31 = v25;
v43 = &v31;
v46 = &v32;
v49 = &v33;
v38 = 4;
v41 = 4;
v44 = 4;
v47 = 4;
v50 = 4;
v53 = 4;
v27 = *(const CHAR **)a1;
v52 = &v34;
v32 = v26;
v33 = v2;
v34 = v1;
tlgCreate1Sz_char((__int64)v55, v27);
tlgWriteTransfer_EtwWriteTransfer(
(__int64)&dword_140C02BE8,
(unsigned __int8 *)byte_14002B629,
0i64,
0i64,
9u,
&v36);
}
return v8;
}
v11 = *(_DWORD *)(a1 + 12);
if( v11 >= *(_DWORD *)v6 )
{
v8 = 0;
v2 = 1;
v1 = 1;
goto LABEL_39;
}
*(_DWORD *)(a1 + 12) = *(_DWORD *)v6;
while( 1 )
{
KeAcquireSpinLockRaiseToDpc((UINT64 *)v7, v10);
v12 = *(_QWORD *)(v7 + 8);
v14 = v13;
v35 = *(_QWORD *)(v7 + 64);
if( v12 )
{
v28 = EtwpCoverageAddToStringBuffer(v12, *(const CHAR **)a1, 0i64);
if( v28 == 1 )
break;
}
KxReleaseSpinLock((UINT64 *)v7);
__writecr8(v14);
if( !v4 )
{
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0x400ui64, 0x56777445ui64);
v4 = PoolWithTag;
if( !PoolWithTag )
{
*(_DWORD *)(a1 + 12) = v11;
_InterlockedIncrement((volatile signed __int32 *)(v6 + 4));
v15 = 1;
v8 = -1073741670;
goto LABEL_35;
}
memset((INT64)PoolWithTag, 0i64);
v4[2] = v4 + 128;
v4[3] = v4 + 5;
v4[4] = v4 + 5;
}
KeAcquireSpinLockRaiseToDpc((UINT64 *)v7, v16);
v19 = v18;
v20 = *(_QWORD *)(v7 + 64);
if( v35 == v20 )
{
v21 = *(_QWORD **)(v7 + 8);
if( v21 )
{
v22 = *(_QWORD **)(v7 + 24);
if( *v22 != v7 + 16 )
__fastfail(3u);
*v21 = v7 + 16;
v21[1] = v22;
*v22 = v21;
*(_QWORD *)(v7 + 24) = v21;
v20 = *(_QWORD *)(v7 + 64);
}
*(_QWORD *)(v7 + 8) = v4;
*(_QWORD *)(v7 + 64) = v20 + 1;
v4 = 0i64;
}
KxReleaseSpinLock((UINT64 *)v7);
__writecr8(v19);
}
if( !*(_DWORD *)(v7 + 72) )
{
ExQueueWorkItem((WORK_QUEUE_ITEM *)(v7 + 32), DelayedWorkQueue);
*(_DWORD *)(v7 + 72) = 1;
}
KxReleaseSpinLock((UINT64 *)v7);
__writecr8(v14);
v15 = 0;
v8 = 0;
LABEL_35:
if( v4 )
ExFreePoolWithTag(v4, 0x56777445u);
if( v15 )
{
v2 = v28;
v1 = 0;
goto LABEL_39;
}
return v8;
}Referenced by:
EtwpCoverageEnsureContext
EtwpCoverageProvEnableCallback
EtwpCoverageRecordAtHighIrql
EtwpCoverageReset
EtwpCoverageResetCP
PopTransitionTelemetryOsState
PsSetProcessFaultInformation