EtwpTraceThreadRundownWithStack

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);
}

Referenced by:

EtwpThreadEnumCallback