EtwTraceJobServerSiloMonitorCallback

UINT8 __fastcall EtwTraceJobServerSiloMonitorCallback(INT64 a1, _EJOB *a2, EVENT_DESCRIPTOR *a3, INT64 a4){
  int v6; 
  __int64 *v7; 
  UINT64 v8; 
  UINT8 result; 
  _EJOB *v10; 
  unsigned int v11; 
  unsigned __int64 Keyword; 
  __int64 v13; 
  unsigned int v14; 
  __int64 v15; 
  UINT64 UserDataCount; 
  UINT64 JobIdOut; 
  GUID GuidOut; 
  EVENT_DATA_DESCRIPTOR UserData; 
  UINT64 *p_JobIdOut; 
  int v21; 
  int v22; 
  int *v23; 
  int v24; 
  int v25; 
  int v26; 
  v26 = a4;
  LODWORD(JobIdOut) = 0;
  v6 = a1;
  GuidOut = 0i64;
  if( (_DWORD)a1 )
  {
    if( (_DWORD)a1 == 1 )
    {
      v7 = (__int64 *)&ServerSiloCreateCallbackStop;
    }
    else if( (_DWORD)a1 == 2 )
    {
      v7 = ServerSiloTerminateCallbackStart;
    }
    else
    {
      v7 = ServerSiloTerminateCallbackStop;
    }
  }
  else
  {
    v7 = ServerSiloCreateCallbackStart;
  }
  v8 = *(_QWORD *)EtwpPsProvRegHandle;
  result = EtwEventEnabled(*(UINT64 *)EtwpPsProvRegHandle, (EVENT_DESCRIPTOR *)v7, a3);
  if( result )
  {
    EtwpCopyJobGuidSafe(&GuidOut, a2);
    UserData.Reserved = 0;
    UserData.Ptr = (unsigned __int64)&GuidOut;
    UserData.Size = 16;
    EtwpCopyJobIdSafe(&JobIdOut, v10);
    v22 = 0;
    p_JobIdOut = &JobIdOut;
    v21 = 4;
    v11 = 2;
    if( v6 == 1 )
    {
      v25 = 0;
      v23 = &v26;
      v11 = 3;
      v24 = 4;
    }
    Keyword = a3->Keyword;
    v13 = v11;
    v14 = v11 + 1;
    v13 *= 2i64;
    *(&UserData.Reserved + 2 * v13) = 0;
    *(&UserData.Ptr + v13) = Keyword;
    *(&UserData.Size + 2 * v13) = a3->Id;
    v15 = 2i64 * v14;
    *(&UserData.Reserved + 2 * v15) = 0;
    *(&UserData.Ptr + v15) = (unsigned __int64)&EtwpNull;
    *(&UserData.Size + 2 * v15) = 2;
    LODWORD(UserDataCount) = v14 + 1;
    return EtwWriteEx(v8, (EVENT_DESCRIPTOR *)v7, 0i64, 0i64, 0i64, 0i64, UserDataCount, &UserData);
  }
  return result;
}

Referenced by:

PspInvokeCreateCallback
PspInvokeTerminateCallback