EtwpCCSwapStart

NTSTATUS __stdcall EtwpCCSwapStart(UINT64 ClockType){
  unsigned int v1; 
  __int64 v2; 
  int v3; 
  unsigned int v4; 
  _BYTE *EtwSupport; 
  VOID **PoolWithTag; 
  unsigned int i; 
  PVOID *v9; 

  v1 = KeNumberProcessors_0;
  v2 = (unsigned int)ClockType;
  v3 = CCSwapNumLoggersPerClockType[(unsigned int)ClockType];
  if( v3 || (v4 = 0, !(_DWORD)KeNumberProcessors_0) )
  {
LABEL_7:
    CCSwapNumLoggersPerClockType[v2] = v3 + 1;
    return 0;
  }
  while( 1 )
  {
    EtwSupport = KeGetPrcb(v4)->EtwSupport;
    if( *(_QWORD *)&EtwSupport[8 * v2 + 296] )
    {
      EtwSupport[v2 + 288] = 0;
      goto LABEL_5;
    }
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x400ui64, 2004042563i64);
    *(_QWORD *)&EtwSupport[8 * v2 + 296] = PoolWithTag;
    if( !PoolWithTag )
      break;
LABEL_5:
    ++v4;
    **(_DWORD **)&EtwSupport[8 * v2 + 296] = 0;
    if( v4 >= v1 )
    {
      v3 = CCSwapNumLoggersPerClockType[v2];
      goto LABEL_7;
    }
  }
  for( i = 0; i < v4; ++i )
  {
    v9 = (PVOID *)KeGetPrcb(i)->EtwSupport;
    ExFreePoolWithTag(v9[v2 + 37], 0);
    v9[v2 + 37] = 0i64;
  }
  return -1073741801;
}

Referenced by:

EtwpUpdateGroupMasks