EtwpCovSampContextAddSamples

NTSTATUS __stdcall EtwpCovSampContextAddSamples(PVOID BugCheckParameter2){
  __int64 v1; 
  unsigned int v2; 
  unsigned int v3; 
  __int64 v4; 
  unsigned int v7; 
  unsigned int v8; 
  __int64 v9; 
  unsigned int RoomAndAcquireLock; 
  __int64 v11; 
  _DWORD *v12; 
  __int64 v13; 
  NTSTATUS v14; 
  int v15; 
  int v16; 
  unsigned int i; 
  _QWORD *v18; 
  int v19; 
  _QWORD *v21; 
  _QWORD *v22; 
  INT64 v23; 
  __int64 v25; 
  unsigned int v26; 

  v25 = v1;
  v3 = v2;
  v4 = v1;
  v7 = 0;
  v8 = 0;
  v9 = *(&ExBootDevicesRemovedEvent + 153);
  RoomAndAcquireLock = EtwpCovSampHashMakeRoomAndAcquireLock(BugCheckParameter2);
  v26 = RoomAndAcquireLock;
  if( RoomAndAcquireLock < v3 )
  {
    EtwpCovSampCaptureContextSetPaused((__int64)BugCheckParameter2, v9, 1);
    RoomAndAcquireLock = v26;
  }
  v11 = 0i64;
  while( RoomAndAcquireLock && (unsigned int)v11 < v3 )
  {
    v12 = (_DWORD *)(v4 + 8 * v11);
    v22 = v12;
    v13 = *((_QWORD *)BugCheckParameter2 + 149);
    if( !v13 )
      goto LABEL_13;
    LODWORD(v23) = *((_DWORD *)BugCheckParameter2 + 7);
    HIDWORD(v23) = v23;
    v14 = EtwCovSampHash(__PAIR64__(*v12, v12[1]), v23);
    v16 = 1;
    for( i = 0; i < *((_DWORD *)BugCheckParameter2 + 302); ++i )
    {
      if( (*(_BYTE *)(((*((_DWORD *)BugCheckParameter2 + 301) & (v14 + i * v15)) >> 3) + v13) & (unsigned __int8)(1 << (*((_BYTE *)BugCheckParameter2 + 1204) & (v14 + i * v15) & 7))) == 0 )
      {
        v16 = 0;
        break;
      }
    }
    if( !v16 )
    {
LABEL_13:
      v18 = (_QWORD *)*((_QWORD *)BugCheckParameter2 + 146);
      while( 1 )
      {
        v21 = v18;
        EtwpCovSampHashLookupInTable();
        if( v19 )
          break;
        v18 = (_QWORD *)*v18;
        if( v18 == (_QWORD *)((char *)BugCheckParameter2 + 1168) )
        {
          MEMORY[0] = *v22;
          ++*((_DWORD *)v21 + 4);
          ++v7;
          RoomAndAcquireLock = --v26;
          goto LABEL_18;
        }
      }
    }
    ++v8;
    RoomAndAcquireLock = v26;
LABEL_18:
    v11 = (unsigned int)(v11 + 1);
    v4 = v25;
  }
  if( *((struct _KTHREAD **)BugCheckParameter2 + 1) == KeGetCurrentThread() )
  {
    *((_QWORD *)BugCheckParameter2 + 1) = 0i64;
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)BugCheckParameter2, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)BugCheckParameter2);
    KeAbPostRelease(BugCheckParameter2);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
  }
  _InterlockedExchangeAdd((volatile signed __int32 *)BugCheckParameter2 + 154, v7);
  _InterlockedExchangeAdd((volatile signed __int32 *)BugCheckParameter2 + 155, v8);
  if( v3 > v8 + v7 )
    _InterlockedExchangeAdd((volatile signed __int32 *)BugCheckParameter2 + 156, v3 - v8 - v7);
  return v7;
}

Referenced by:

EtwpCovSampCaptureBufferProcess
EtwpCovSampContextAddAddresses
EtwpCovSampSampleBufferProcess