EtwTraceThread

VOID __stdcall EtwTraceThread(_ETHREAD *Thread, _INITIAL_TEB *InitialTeb, UINT8 Create){
  unsigned int v6; 
  __int64 v7; 
  _DWORD *CurrentThreadTeb; 
  _EWOW64PROCESS *WoW64Process; 
  int v10; 
  unsigned __int16 Machine; 
  _UNICODE_STRING *ThreadName; 
  INT64 v13; 
  _EWOW64PROCESS *v14; 
  __int64 v15; 
  unsigned __int16 v16; 
  unsigned int Length; 
  INT64 v18; 
  INT16 v19; 
  int v20; 
  int v21[2]; 
  void *StackBase; 
  void *volatile StackLimit; 
  __int64 v24; 
  __int64 v25; 
  unsigned __int64 Mask; 
  void *Win32StartAddress; 
  void *Teb; 
  int v29; 
  char BasePriority; 
  char PagePriorityThread; 
  char IoPriorityThread; 
  char v33; 
  __int64 v34; 
  PGET_UPDATED_BUS_RESOURCE v35[2]; 
  __int64 *Buffer; 
  __int64 v37; 
  __int64 *v38; 
  __int64 v39; 

  v6 = 2;
  v34 = 0i64;
  v20 = 5249283;
  if( EtwpHostSiloState != -4516 && (*(_DWORD *)(EtwpHostSiloState + 4516) & 2) != 0 )
    EtwpPsProvTraceThread(Thread, InitialTeb, Create);
  v21[0] = (int)Thread->Cid.UniqueProcess;
  v21[1] = (int)Thread->Cid.UniqueThread;
  StackBase = Thread->Tcb.StackBase;
  StackLimit = Thread->Tcb.StackLimit;
  Mask = Thread->Tcb.Affinity.Mask;
  Win32StartAddress = Thread->Win32StartAddress;
  v24 = 0i64;
  v25 = 0i64;
  Teb = Thread->Tcb.Teb;
  v29 = 0;
  BasePriority = Thread->Tcb.BasePriority;
  PagePriorityThread = PsGetPagePriorityThread(Thread);
  IoPriorityThread = PsGetIoPriorityThread(Thread);
  v33 = 0;
  if( Create )
  {
    v19 = 1281;
    if( InitialTeb )
    {
      v24 = *((_QWORD *)InitialTeb + 2);
      v25 = *((_QWORD *)InitialTeb + 3);
    }
    CurrentThreadTeb = PsGetCurrentThreadTeb();
    if( CurrentThreadTeb )
    {
      WoW64Process = KeGetCurrentThread()->Process->WoW64Process;
      if( WoW64Process && ((Machine = WoW64Process->Machine, Machine == 332) || Machine == 452) )
        v10 = CurrentThreadTeb[3032];
      else
        v10 = CurrentThreadTeb[1480];
      v29 = v10;
    }
  }
  else
  {
    v19 = 1282;
    v20 = 72358147;
    if( v7 )
    {
      v14 = KeGetCurrentThread()->Process->WoW64Process;
      if( v14 && ((v16 = v14->Machine, v16 == 332) || v16 == 452) )
      {
        v29 = *(_DWORD *)(v7 + 12128);
        v24 = *(unsigned int *)(v7 + 8196);
        v15 = *(unsigned int *)(v7 + 8200);
      }
      else
      {
        v29 = *(_DWORD *)(v7 + 5920);
        v24 = *(_QWORD *)(v7 + 8);
        v15 = *(_QWORD *)(v7 + 16);
      }
      v25 = v15;
    }
  }
  v35[0] = (PGET_UPDATED_BUS_RESOURCE)v21;
  v35[1] = (PGET_UPDATED_BUS_RESOURCE)72;
  ThreadName = Thread->ThreadName;
  if( ThreadName && ThreadName->Buffer )
  {
    Length = 2048;
    if( ThreadName->Length < 0x800u )
      Length = ThreadName->Length;
    Buffer = (__int64 *)ThreadName->Buffer;
    v37 = Length;
    if( !Length || ThreadName->Buffer[((unsigned __int64)Length >> 1) - 1] )
    {
      v38 = &EtwpNull;
      v39 = 2i64;
      v6 = 3;
    }
  }
  else
  {
    Buffer = &EtwpNull;
    v37 = 2i64;
  }
  LODWORD(v13) = PsGetProcessServerSilo((INT64)Thread->Tcb.Process);
  LODWORD(v18) = v20;
  EtwTraceSiloKernelEvent(v13, v35, v6, 2ui64, v19, v18);
}

Referenced by:

No references.