KiSynchCounterSetCallback

NTSTATUS __stdcall KiSynchCounterSetCallback(_PCW_CALLBACK_TYPE Type, _PCW_CALLBACK_INFORMATION *Info, PVOID Context){
  __int32 v3; 
  __int32 v4; 
  struct _PCW_BUFFER *Buffer; 
  ULONG v6; 
  ULONG ActiveProcessorCount; 
  _KPRCB **i; 
  _KPRCB *v9; 
  WCHAR v10; 
  NTSTATUS result; 
  struct _PCW_DATA Data; 
  struct _UNICODE_STRING DestinationString; 
  wchar_t pszDest[12]; 
  DestinationString = 0i64;
  if( Type == PcwCallbackAddCounter )
  {
    EtwReferenceSpinLockCounters(*(UINT64 *)&Type, (INT64)Info, (INT64)Context);
    return 0;
  }
  v3 = Type - 1;
  if( !v3 )
  {
    EtwDereferenceSpinLockCounters();
    return 0;
  }
  v4 = v3 - 1;
  if( v4 && v4 != 1 )
    return 0;
  Buffer = Info->EnumerateInstances.Buffer;
  v6 = 0;
  ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
  if( !ActiveProcessorCount )
    return 0;
  for( i = &KiProcessorBlock; ; ++i )
  {
    v9 = *i;
    RtlStringCbPrintfW(pszDest, 0x16ui64, (WCHAR *)L"%u");
    RtlInitUnicodeString(&DestinationString, pszDest, v10);
    Data.Size = 184;
    Data.Data = (char *)v9 + 33984;
    result = PcwAddInstance(Buffer, &DestinationString, v6, 1u, &Data);
    if( result < 0 )
      break;
    if( ++v6 >= ActiveProcessorCount )
      return 0;
  }
  return result;
}

Referenced by:

No references.