VOID __stdcall EtwpTraceThreadRundownWithStack(_ETHREAD *Thread, VOID *RundownContext){
__int128 SystemArgument1;
__int64 v5;
_KAPC Apc;
_LARGE_INTEGER v7;
memset(&Apc, 0i64, sizeof(Apc));
SystemArgument1 = 0i64;
v5 = 0i64;
if( Thread == (_ETHREAD *)KeGetCurrentThread() )
goto LABEL_7;
if( *((_BYTE *)RundownContext + 67) )
goto LABEL_7;
DWORD1(SystemArgument1) = 0;
v5 = (__int64)&SystemArgument1 + 8;
*((_QWORD *)&SystemArgument1 + 1) = (char *)&SystemArgument1 + 8;
LOWORD(SystemArgument1) = 1;
BYTE2(SystemArgument1) = 6;
KeInitializeApc((INT64)&Apc, (INT64)Thread, 0i64, (INT64)EtwpThreadRundownApc, 0i64, 0i64, 0, 0i64);
if( !KeInsertQueueApc((INT64)&Apc, (INT64)&SystemArgument1, (INT64)RundownContext, 0i64) )
goto LABEL_7;
v7.QuadPart = EtwpOneMs * (unsigned int)EtwpStackCaptureTimeout;
if( KeWaitForSingleObject((UINT64)&SystemArgument1, 7, 0, 0, (INT64)&v7) != 258 )
return;
if( KeRemoveQueueApc((INT64)&Apc) )
LABEL_7:
EtwpTraceThreadRundown(Thread, (_ETW_RUNDOWN_CONTEXT *)RundownContext);
else
KeWaitForSingleObject((UINT64)&SystemArgument1, 7, 0, 0, 0i64);
}