EtwpCovSampLookasideGrow
NTSTATUS __fastcall EtwpCovSampLookasideGrow(INT64 a1, INT64 a2){
__int64 v2;
NTSTATUS v5;
_SLIST_ENTRY *v6;
UINT64 *v7;
unsigned __int64 v8;
unsigned int v9;
_SLIST_ENTRY *v10;
__int64 v11;
_SLIST_ENTRY *v12;
v2 = *(_QWORD *)(a2 + 32);
KeGetCurrentIrql();
if( *(_DWORD *)(a2 + 52) >= *(_DWORD *)(a2 + 56) )
return 255;
v6 = (_SLIST_ENTRY *)(*(__int64(**)(void))(v2 + 48))();
if( !v6 )
return -1073741670;
v7 = (UINT64 *)(a1 + 264);
v8 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 264));
if( *(_DWORD *)(a2 + 40) && (v9 = *(_DWORD *)(a2 + 52), v9 < *(_DWORD *)(a2 + 56)) )
{
*(_DWORD *)(a2 + 52) = v9 + 1;
v10 = (_SLIST_ENTRY *)((char *)v6 + 24);
++*(_DWORD *)(v2 + 72);
v11 = v2 + 32;
v12 = *(_SLIST_ENTRY **)(v11 + 8);
if( v12->Next != (_SLIST_ENTRY *)v11 )
__fastfail(3u);
v6[2].Next = v12;
v10->Next = (_SLIST_ENTRY *)v11;
v12->Next = v10;
*(_QWORD *)(v11 + 8) = v10;
RtlpInterlockedPushEntrySList((PSLIST_HEADER)a2, v6);
v6 = 0i64;
v5 = 0;
}
else
{
v5 = 255;
}
KxReleaseSpinLock(v7);
__writecr8(v8);
if( v6 )
ExFreePoolWithTag(v6, 0x56777445u);
return v5;
}Referenced by:
EtwpCovSampCaptureContextStart
EtwpCovSampCaptureWorkerThread