EtwpCovSampCaptureContextStop
VOID __fastcall EtwpCovSampCaptureContextStop(union SLIST_HEADER *a1){
UINT64 v1;
_ETHREAD *CurrentThread;
UINT64 *v4;
UINT8 v5;
unsigned __int8 v6;
unsigned __int64 v7;
char *v8;
UINT64 i;
union _LARGE_INTEGER v10;
void *v11;
void *v12;
IRP *Timeout;
union _LARGE_INTEGER v14;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
v4 = (UINT64 *)((char *)a1 + 264);
KeAcquireSpinLockRaiseToDpc((UINT64 *)a1 + 33, v1);
*((_DWORD *)a1 + 228) = 0;
v7 = v6;
if( *((_DWORD *)a1 + 229) )
*((_DWORD *)a1 + 229) = 0;
v8 = (char *)a1 + 576;
for( i = *((_QWORD *)a1 + 72); (char *)i != v8; i = *(_QWORD *)i )
{
*(_DWORD *)(i + 24) = 0;
*(_DWORD *)(i + 28) = 0;
}
KeResetEvent((char *)a1 + 888, i, (UINT8)v8, v5, Timeout);
*((_DWORD *)a1 + 230) = 0;
KxReleaseSpinLock(v4);
__writecr8(v7);
EtwpCovSampCaptureFlushSampleBuffers((INT64)a1);
EtwpCovSampCaptureCleanupLookasides((INT64)a1);
v10.QuadPart = -2500000i64;
for( v14.QuadPart = -2500000i64; KeWaitForSingleObject((char *)a1 + 888, Executive, 0, 0, &v14); v14 = v10 )
{
EtwpCovSampCaptureCancelApcs((INT64)a1);
EtwpCovSampCaptureFlushSampleBuffers((INT64)a1);
v10.QuadPart *= 2i64;
if( v10.QuadPart < -9600000000i64 )
v10.QuadPart = -9600000000i64;
}
EtwpCovSampCaptureFreeLookasides(a1);
v11 = (void *)*((_QWORD *)a1 + 119);
if( v11 )
{
ExFreePoolWithTag(v11, 0x56777445u);
*((_QWORD *)a1 + 119) = 0i64;
}
v12 = (void *)*((_QWORD *)a1 + 120);
if( v12 )
{
ExFreePoolWithTag(v12, 0x56777445u);
*((_QWORD *)a1 + 120) = 0i64;
}
*((_QWORD *)a1 + 118) = 0i64;
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}Referenced by:
EtwpCoverageSamplerStop