EtwTiLogProtectExecVm

UINT8 EtwTiLogProtectExecVm(__int64 a1, char a2, ...){
  UINT8 result; 
  __int64 v5; 
  _EPROCESS *Process; 
  _ETHREAD *CurrentThread; 
  __int64 v8; 
  const _EVENT_DESCRIPTOR *v9; 
  int v10; 
  NTSTATUS v11; 
  int v12; 
  int v13; 
  int v14; 
  int v15; 
  int v16; 
  unsigned int v17; 
  __int64 v18; 
  __int64 v19; 
  __int64 v20; 
  __int64 v21; 
  REGHANDLE v22; 
  unsigned __int64 v23; 
  unsigned __int64 v24; 
  unsigned __int64 v25; 
  _EVENT_DATA_DESCRIPTOR UserData[24]; 
  __int64 v27; 
  va_list va; 
  __int64 v29; 
  va_list va1; 
  __int64 v31; 
  va_list va2; 
  va_list va3; 

  va_start(va3, a2);
  va_start(va2, a2);
  va_start(va1, a2);
  va_start(va, a2);
  v27 = va_arg(va1, _QWORD);
  va_copy(va2, va1);
  v29 = va_arg(va2, _QWORD);
  va_copy(va3, va2);
  v31 = va_arg(va3, _QWORD);
  result = EtwProviderEnabled(*(&ExBootDevicesRemovedEvent + 179), 0, 0xF0ui64);
  if( result )
  {
    v5 = 0i64;
    Process = KeGetCurrentThread()->ApcState.Process;
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    if( Process == (_EPROCESS *)a1 )
      v5 = 8i64;
    v8 = (__int64)CurrentThread->Tcb.Process;
    v9 = *(const _EVENT_DESCRIPTOR **)((char *)off_140006640 + (a2 != 0 ? 0 : 0x10) + v5);
    result = EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 179), v9);
    if( result )
    {
      v10 = EtwpTiFillProcessIdentity((_QWORD *)UserData, (__int64)Process, &v23);
      v11 = EtwpTiFillThreadIdentity((INT64)&UserData[v10], (INT64)KeGetCurrentThread());
      v13 = EtwpTiFillProcessIdentity(&UserData[v11 + v12].Ptr, a1, &v24);
      v15 = EtwpTiFillProcessIdentity(&UserData[v13 + v14].Ptr, v8, &v25);
      v17 = v15 + v16;
      v18 = v17;
      UserData[v18].Reserved = 0;
      UserData[v18].Ptr = (unsigned __int64)va;
      UserData[v18].Size = 8;
      v19 = v17 + 1;
      UserData[v19].Reserved = 0;
      UserData[v19].Ptr = (unsigned __int64)va1;
      UserData[v19].Size = 8;
      v20 = v17 + 2;
      v17 += 3;
      v20 *= 2i64;
      *(&UserData[0].Reserved + 2 * v20) = 0;
      *(&UserData[0].Ptr + v20) = (unsigned __int64)va2;
      *(&UserData[0].Size + 2 * v20) = 4;
      v21 = v17;
      UserData[v21].Reserved = 0;
      UserData[v21].Ptr = (unsigned __int64)va3;
      v22 = *(&ExBootDevicesRemovedEvent + 179);
      UserData[v21].Size = 4;
      return EtwWrite(v22, v9, 0, v17 + 1, UserData);
    }
  }
  return result;
}

Referenced by:

NtProtectVirtualMemory