EtwpFreeTraceBuffer

VOID __stdcall EtwpFreeTraceBuffer(INT64 a1, CHAR *a2){
  UINT64 v2; 
  CHAR *v3; 
  __int64 v4; 
  unsigned __int64 *v5; 
  unsigned int v6; 
  __int64 v7; 
  unsigned __int64 v8; 

  v3 = a2;
  if( *(_QWORD *)(a1 + 1304) )
  {
    EtwpFreePartitionMemory(a1, a2);
  }
  else if( (*(_DWORD *)(a1 + 832) & 0x20000000) != 0 )
  {
    v4 = *(_QWORD *)(a1 + 1312);
    *(_WORD *)(v4 + 10) |= 3u;
    v5 = (unsigned __int64 *)(v4 + 48);
    *(_QWORD *)(v4 + 24) = a2;
    v6 = *(_DWORD *)(a1 + 4) >> 12;
    if( v6 )
    {
      v7 = v6;
      do
      {
        LODWORD(v8) = MmGetPhysicalAddress((UINT64)v3);
        v3 += 4096;
        *v5++ = v8 >> 12;
        --v7;
      }
      while( v7 );
    }
    MiFreePagesFromMdl((PVOID)v4, 0i64, v2);
  }
  else
  {
    ExFreePoolWithTag(a2, 0);
  }
}

Referenced by:

EtwpAdjustSiloTraceBuffers
EtwpCancelMemoryPreservation
EtwpFreeTraceBufferPool
EtwpPreserveLogger