IopLiveDumpTraceDumpFileWriteEnd

UINT8 __fastcall IopLiveDumpTraceDumpFileWriteEnd(__int64 a1, __int64 a2, int a3){
  UINT8 result; 
  int v4; 
  __int64 v5; 
  bool v6; 
  _QWORD *v7; 
  EVENT_DESCRIPTOR *v8; 
  __int64 v9; 
  __int64 v10; 
  UINT64 UserDataCount; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  EVENT_DATA_DESCRIPTOR UserData; 
  __int64 *v17; 
  __int64 v18; 
  __int64 *v19; 
  __int64 v20; 
  __int64 *v21; 
  __int64 v22; 
  __int64 *v23; 
  __int64 v24; 
  int v25; 
  v25 = a3;
  result = IopLiveDumpIsTracingEnabled();
  if( result )
  {
    v6 = v4 == 0;
    v7 = *(_QWORD **)(v5 + 560);
    v8 = (EVENT_DESCRIPTOR *)LIVEDUMP_EVENT_WRITE_DUMPDATA_TO_FILE_END;
    if( !v6 )
      v8 = (EVENT_DESCRIPTOR *)&LIVEDUMP_EVENT_WRITE_DEFERRED_DUMPDATA_TO_FILE_END;
    if( v25 < 0 )
    {
      v12 = 0i64;
      v10 = 0i64;
      v13 = 0i64;
      v9 = 0i64;
    }
    else
    {
      v12 = v7[500];
      v13 = v7[1028];
      v9 = v7[1029] << 12;
      v10 = v12 - v9 - v13;
    }
    v14 = v9;
    UserData.Ptr = (unsigned __int64)&v25;
    v15 = v10;
    v17 = &v12;
    v19 = &v13;
    v21 = &v14;
    v23 = &v15;
    LODWORD(UserDataCount) = 5;
    *(_QWORD *)&UserData.Size = 4i64;
    v18 = 8i64;
    v20 = 8i64;
    v22 = 8i64;
    v24 = 8i64;
    return EtwWriteEx(IopLiveDumpEtwRegHandle, v8, 0i64, 0i64, 0i64, 0i64, UserDataCount, &UserData);
  }
  return result;
}

Referenced by:

IoCaptureLiveDump
IoWriteDeferredLiveDumpData