EtwWriteErrorLogEntry

NTSTATUS __stdcall EtwWriteErrorLogEntry(
        UINT64 TraceHandle,
        _IO_ERROR_LOG_PACKET *ErrorLogPacket,
        UINT64 PacketSize,
        _LARGE_INTEGER *EventTimeStamp,
        PWCHAR ProviderName,
        PWCHAR DeviceName,
        UINT16 SidLength,
        PVOID SidData){
  unsigned __int16 v8; 
  unsigned int v9; 
  __int64 v11; 
  unsigned __int16 v12; 
  unsigned __int16 v13; 
  unsigned __int8 v14; 
  unsigned __int16 EventCategory; 
  __int64 v16; 
  __int64 v17; 
  int v18; 
  unsigned int v19; 
  unsigned int NumberOfStrings; 
  unsigned int v21; 
  __int64 v22; 
  unsigned int v23; 
  unsigned int v24; 
  unsigned __int16 v25; 
  __int64 v26; 
  unsigned int v27; 
  unsigned __int64 v28; 
  UCHAR *v29; 
  UCHAR *v30; 
  __int64 v31; 
  __int64 v32; 
  unsigned int v33; 
  __int64 v34; 
  NTSTATUS v35; 
  UINT64 UserDataCount; 
  unsigned __int16 v37; 
  __int16 v38; 
  unsigned int v39; 
  _ETW_GUID_ENTRY result; 
  _EVENT_DESCRIPTOR EventDescriptor; 
  _EVENT_DATA_DESCRIPTOR UserData; 
  NTSTATUS *p_ErrorCode; 
  __int64 v44; 
  __int16 *v45; 
  __int64 v46; 
  PWCHAR v47; 
  int v48; 
  int v49; 
  UINT16 *p_SidLength; 
  __int64 v51; 
  PVOID v52; 
  int v53; 
  int v54; 
  v8 = *(_WORD *)IopErrorLogSession;
  v9 = (unsigned int)ErrorLogPacket->ErrorCode >> 30;
  v11 = (unsigned int)PacketSize;
  v12 = 0;
  v13 = 0;
  if( v9 == 1 )
    v14 = 4;
  else
    v14 = (v9 == 2) + 2;
  EventDescriptor.Level = v14;
  EventCategory = ErrorLogPacket->EventCategory;
  p_ErrorCode = &ErrorLogPacket->ErrorCode;
  v16 = -1i64;
  EventDescriptor.Task = EventCategory;
  v17 = -1i64;
  v44 = 4i64;
  *(_DWORD *)&EventDescriptor.Id = 0;
  EventDescriptor.Opcode = 0;
  EventDescriptor.Keyword = 0i64;
  UserData.Ptr = (unsigned __int64)EventTimeStamp;
  *(_QWORD *)&UserData.Size = 8i64;
  do
    ++v17;
  while( ProviderName[v17] );
  v47 = ProviderName;
  v18 = (unsigned __int16)(v17 + 1);
  v38 = v18;
  v48 = 2 * v18;
  v46 = 2i64;
  v51 = 2i64;
  v19 = 5;
  p_SidLength = &SidLength;
  v45 = &v38;
  v49 = 0;
  if( SidLength )
  {
    v19 = 6;
    v52 = SidData;
    v53 = SidLength;
    v54 = 0;
  }
  NumberOfStrings = ErrorLogPacket->NumberOfStrings;
  v21 = ErrorLogPacket->DumpDataSize + 40;
  if( v21 > (unsigned int)v11 )
    v21 = v11;
  v39 = v21;
  if( (_WORD)NumberOfStrings && ErrorLogPacket->StringOffset < v21 )
    ErrorLogPacket->StringOffset = v21;
  v22 = 2i64 * v19;
  v37 = 0;
  v23 = v19 + 1;
  v24 = NumberOfStrings;
  ErrorLogPacket->NumberOfStrings = NumberOfStrings + 1;
  v25 = 0;
  *(&UserData.Ptr + v22) = (unsigned __int64)&v37;
  *((_QWORD *)&UserData.Size + v22) = 2i64;
  v26 = 2i64 * v23;
  *(&UserData.Ptr + 2 * v23) = (unsigned __int64)DeviceName;
  do
    ++v16;
  while( DeviceName[v16] );
  *(&UserData.Reserved + 4 * v23) = 0;
  v27 = v23 + 1;
  *(&UserData.Size + 2 * v26) = 2 * (unsigned __int16)(v16 + 1);
  if( v24 )
  {
    v28 = (unsigned __int64)(&ErrorLogPacket->RetryCount + ErrorLogPacket->StringOffset) & 0xFFFFFFFFFFFFFFFEui64;
    v29 = &ErrorLogPacket->MajorFunctionCode + v11;
    do
    {
      v30 = (UCHAR *)(v28 + 2i64 * v13);
      if( v30 >= v29 )
        break;
      if( !*(_WORD *)v30 )
      {
        ++v25;
        v12 = v13 + 1;
        v37 = v25;
      }
      ++v13;
    }
    while( v25 < v24 );
    v31 = 2i64 * v27++;
    *(&UserData.Ptr + v31) = v28;
    *(&UserData.Size + 2 * v31) = 2 * v12;
    *(&UserData.Reserved + 2 * v31) = 0;
  }
  v32 = 2i64 * v27;
  v37 = v25 + 1;
  v33 = v27 + 1;
  *(&UserData.Ptr + v32) = (unsigned __int64)&v39;
  *((_QWORD *)&UserData.Size + v32) = 4i64;
  v34 = 2i64 * v33;
  *(&UserData.Size + 2 * v34) = v21;
  *(&UserData.Ptr + v34) = (unsigned __int64)ErrorLogPacket;
  *(&UserData.Reserved + 2 * v34) = 0;
  memset((INT64)&result, 0i64);
  result.SiloState = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState;
  LODWORD(UserDataCount) = v33 + 1;
  result.Guid = (_GUID)LegacyEventLogGuid;
  result.EnableInfo[0].LoggerId = v8;
  result.EnableInfo[0].IsEnabled = 1;
  result.EnableInfo[0].Level = -1;
  *(__m128i *)&result.EnableInfo[0].MatchAnyKeyword = _mm_load_si128((const __m128i *)&_xmm);
  result.EnableInfo[0].EnableProperty = 64;
  v35 = EtwpEventWriteFull(
          &result,
          1u,
          0i64,
          0i64,
          &EventDescriptor,
          0,
          4u,
          0i64,
          0i64,
          UserDataCount,
          &UserData,
          0i64,
          0i64,
          0i64,
          0,
          0i64,
          0i64);
  if( v35 < 0 )
    --ErrorLogPacket->NumberOfStrings;
  return v35;
}

Referenced by:

IopErrorLogThread