EtwpCovSampCaptureQueueApc
NTSTATUS __stdcall EtwpCovSampCaptureQueueApc(PVOID SystemArgument1){
_ETHREAD *CurrentThread;
struct SLIST_ENTRY *v2;
INT64 v3;
int v4;
int v5;
NTSTATUS v7;
__int64 v8;
unsigned int v9;
unsigned int v10;
__int64 v11;
struct SLIST_ENTRY *v12;
_KAPC *v13;
unsigned __int8 CurrentIrql;
_ETHREAD *v15;
INT64 v16;
INT64 Next;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = 0i64;
v3 = StartContext;
v4 = 0;
v5 = 0;
if( *(_DWORD *)(*((_QWORD *)CurrentThread + 68) + 888i64)
+ ((*(_DWORD *)(*((_QWORD *)CurrentThread + 68) + 632i64) >> 3) & 1)
|| *((_BYTE *)CurrentThread + 644)
|| (*((_DWORD *)CurrentThread + 29) & 0x4000) == 0 )
{
v7 = -1073741637;
}
else
{
if( _interlockedbittestandset((volatile signed __int32 *)CurrentThread + 324, 0x17u) )
return -1073740008;
v4 = 1;
v8 = (*(_QWORD *)(v3 + 8) >> 4) & 0x1FFi64;
v9 = ((unsigned int)*(_QWORD *)(v3 + 8) >> 13) & 0x3FFFF;
_BitScanReverse(&v10, v9);
v11 = *(_QWORD *)(*(_QWORD *)(*((_QWORD *)KeGetCurrentPrcb() + 4198) + 8i64 * (v10 - 2))
+ 8i64 * (v9 ^ (1 << v10))
+ 8);
v12 = EtwpCovSampLookasidePop(v3, v11 + 8 * (v8 + 2));
v2 = v12;
if( !v12 )
{
_InterlockedIncrement((volatile signed __int32 *)(v11 + 8 * v8 + 308));
v7 = -1073741670;
LABEL_24:
_InterlockedAnd((volatile signed __int32 *)CurrentThread + 324, 0xFF7FFFFF);
return v7;
}
v13 = (_KAPC *)(&v12[3].Next + 1);
KeInitializeApc(
(INT64)(&v12[3].Next + 1),
(INT64)CurrentThread,
0i64,
(INT64)EtwpCovSampCaptureApc,
(INT64)EtwpCovSampCaptureApcRundown,
(INT64)EtwpCovSampCaptureApc,
0,
v3);
*((_QWORD *)&v2[7].Next + 1) = 0i64;
LODWORD(v2[9].Next) = KUSER_SHARED_DATA.TickCount.LowPart;
CurrentIrql = KeGetCurrentIrql();
if( CurrentIrql <= 2u )
{
if( CurrentIrql < 2u )
{
v15 = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)v15 + 242);
v5 = 1;
}
if( !KeInsertQueueApc(v13, SystemArgument1, 0i64, 0i64) )
{
v7 = -1073741823;
goto LABEL_19;
}
}
else if( !KeTryToInsertQueueApc(v13, SystemArgument1, 0i64) )
{
if( (*((_DWORD *)CurrentThread + 29) & 0x4000) != 0 )
KeIsThreadRunning((__int64)CurrentThread);
v7 = -1073741823;
goto LABEL_21;
}
v4 = 0;
v2 = 0i64;
v7 = 0;
}
LABEL_19:
if( v5 )
KeLeaveCriticalRegion();
LABEL_21:
if( v2 )
{
v16 = StartContext;
memset((INT64)(&v2[3].Next + 1), 0i64);
Next = (INT64)v2[3].Next;
LODWORD(v2[9].Next) = 0;
EtwpCovSampCaptureReleaseToLookaside(v16, Next, v2);
}
if( v4 )
goto LABEL_24;
return v7;
}Referenced by:
EtwpCovSampCaptureSample