KiSynchNumaCounterSetCallback

INT64 __stdcall KiSynchNumaCounterSetCallback(PCW_CALLBACK_TYPE Type, PCW_CALLBACK_INFORMATION *Info, PVOID Context){
  INT64 v5; 
  UINT64 v6; 
  INT64 v7; 
  __int32 v8; 
  __int32 v9; 
  struct _PCW_BUFFER *Buffer; 
  unsigned int v11; 
  bool i; 
  __int64 v13; 
  __int64 v14; 
  __int16 v15; 
  int v16; 
  _SYNCH_COUNTERS *v17; 
  _SYNCH_COUNTERS *v18; 
  WCHAR v19; 
  INT64 v20; 
  WCHAR v21; 
  WCHAR v22; 
  ULONG Id; 
  struct _UNICODE_STRING DestinationString; 
  struct _PCW_DATA v25; 
  __int128 v26; 
  __int64 v27; 
  struct _PCW_DATA Data; 
  INT64 result[24]; 
  INT64 v30[24]; 
  wchar_t pszDest[12]; 
  v27 = 0i64;
  v26 = 0i64;
  memset((INT64)result, 0i64);
  memset((INT64)v30, 0i64);
  Id = 0;
  DestinationString = 0i64;
  if( Type == PcwCallbackAddCounter )
  {
    EtwReferenceSpinLockCounters(v6, v5, v7);
    return 0i64;
  }
  v8 = Type - 1;
  if( !v8 )
  {
    EtwDereferenceSpinLockCounters();
    return 0i64;
  }
  v9 = v8 - 1;
  if( v9 && v9 != 1 )
    return 0i64;
  Buffer = Info->EnumerateInstances.Buffer;
  v11 = 0;
  for( i = KeNumberNodes != 0; i; i = v11 < (unsigned __int16)KeNumberNodes )
  {
    v13 = *((_QWORD *)&KeNodeBlock + v11);
    v14 = *(_QWORD *)(v13 + 136);
    if( v14 )
    {
      v15 = *(_WORD *)(v13 + 144);
      memset((INT64)result, 0i64);
      *((_QWORD *)&v26 + 1) = v14;
      v16 = 0;
      LOWORD(v27) = v15;
      *(_QWORD *)&v26 = 0i64;
      while( !(unsigned int)KeEnumerateNextProcessor(&Id, (unsigned __int16 **)&v26) )
      {
        v17 = (_SYNCH_COUNTERS *)((char *)*(&KiProcessorBlock + Id) + 33984);
        KiAddSynchCounters((_SYNCH_COUNTERS *)result, v17);
        KiAddSynchCounters((_SYNCH_COUNTERS *)v30, v18);
        RtlStringCbPrintfW(pszDest, 0x16ui64, (WCHAR *)&stru_1407D2340.Xmm15);
        RtlInitUnicodeString(&DestinationString, pszDest, v19);
        Data.Data = v17;
        Data.Size = 184;
        LODWORD(v20) = PcwAddInstance(Buffer, &DestinationString, Id, 1u, &Data);
        if( (int)v20 < 0 )
          return v20;
        ++v16;
      }
      RtlStringCbPrintfW(pszDest, 0x16ui64, (WCHAR *)&stru_1407D2340.TrapFrame);
      RtlInitUnicodeString(&DestinationString, pszDest, v21);
      v25.Data = result;
      v25.Size = 184;
      LODWORD(v20) = PcwAddInstance(Buffer, &DestinationString, v11 + KeMaximumProcessors, 1u, &v25);
      if( (int)v20 < 0 )
        return v20;
    }
    ++v11;
  }
  RtlStringCbPrintfW(pszDest, 0x16ui64, (WCHAR *)&stru_1407D2340.MxCsr);
  RtlInitUnicodeString(&DestinationString, pszDest, v22);
  v25.Data = v30;
  v25.Size = 184;
  LODWORD(v20) = PcwAddInstance(
                   Buffer,
                   &DestinationString,
                   KeMaximumProcessors + (unsigned __int16)KeNumberNodes,
                   1u,
                   &v25);
  return v20;
}

Referenced by:

No references.