PoThermalCounterSetCallback

INT64 __stdcall PoThermalCounterSetCallback(PCW_CALLBACK_TYPE Type, PCW_CALLBACK_INFORMATION *Info, PVOID Context){
  int Counters; 
  char v6; 
  struct _PCW_BUFFER *Buffer; 
  DEVICE_OBJECT *i; 
  DEVICE_OBJECT *DeviceAttachmentBaseRefWithTag; 
  DEVICE_OBJECT *v10; 
  const UNICODE_STRING *v11; 
  wchar_t *v12; 
  signed __int64 v13; 
  int v14; 
  int v15; 
  ULONG v16; 
  struct _PCW_DATA Data; 
  UINT64 v19[2]; 
  *(_OWORD *)v19 = 0i64;
  Counters = 0;
  v6 = 0;
  PopAcquireRwLockShared((UINT64)&PopPolicyDeviceLock);
  if( Type == PcwCallbackEnumerateInstances )
  {
    Buffer = Info->EnumerateInstances.Buffer;
LABEL_6:
    v6 = 1;
    goto LABEL_7;
  }
  if( Type != PcwCallbackCollectData )
    goto LABEL_27;
  Buffer = Info->EnumerateInstances.Buffer;
  if( wcspbrk(Info->AddCounter.InstanceMask->Buffer, (PWCHAR)L"*?", 1u) )
    goto LABEL_6;
LABEL_7:
  for( i = (DEVICE_OBJECT *)PopThermal; i != (DEVICE_OBJECT *)&PopThermal; i = *(DEVICE_OBJECT **)i )
  {
    if( (*((_BYTE *)i + 65) & 2) != 0 )
    {
      DeviceAttachmentBaseRefWithTag = IoGetDeviceAttachmentBaseRefWithTag(*((DEVICE_OBJECT **)i + 6), 0x6D546F50ui64);
      v10 = DeviceAttachmentBaseRefWithTag;
      if( DeviceAttachmentBaseRefWithTag )
        v11 = *(const UNICODE_STRING **)(*((_QWORD *)DeviceAttachmentBaseRefWithTag + 39) + 40i64);
      else
        v11 = 0i64;
      if( v11 )
      {
        if( v6 )
          goto LABEL_19;
        v12 = Info->AddCounter.InstanceMask->Buffer;
        v13 = (char *)v11[8].Buffer - (char *)v12;
        do
        {
          v14 = *(wchar_t *)((char *)v12 + v13);
          v15 = *v12 - v14;
          if( v15 )
            break;
          ++v12;
        }
        while( v14 );
        if( !v15 )
        {
LABEL_19:
          *(_OWORD *)v19 = 0i64;
          if( Type == PcwCallbackCollectData )
          {
            Counters = PopThermalReadCounters((INT64)i, Info->AddCounter.CounterMask, v19);
            if( Counters < 0 )
            {
              ObfDereferenceObjectWithTag(v10, 0x6D546F50ui64);
              break;
            }
          }
          v16 = *((_DWORD *)i + 124);
          Data.Data = v19;
          Data.Size = 16;
          Counters = PcwAddInstance(Buffer, v11 + 8, v16, 1u, &Data);
        }
        ObfDereferenceObjectWithTag(v10, 0x6D546F50ui64);
        if( Counters < 0 )
          break;
      }
      else
      {
        ObfDereferenceObjectWithTag(DeviceAttachmentBaseRefWithTag, 0x6D546F50ui64);
      }
    }
  }
LABEL_27:
  PopReleaseRwLock((UINT64)&PopPolicyDeviceLock);
  return(unsigned int)Counters;
}

Referenced by:

No references.