PopDiagTraceThermalStateChange

VOID __fastcall PopDiagTraceThermalStateChange(_DEVICE_OBJECT *DeviceObject, INT64 a2, const _EVENT_DESCRIPTOR *a3){
  _DEVICE_OBJECT *DeviceAttachmentBaseRefWithTag; 
  _DEVICE_OBJECT *v6; 
  _WORD *DeviceNode; 
  int v8; 
  __int16 v9; 
  _EVENT_DATA_DESCRIPTOR UserData; 
  __int64 v11; 
  int v12; 
  int v13; 
  int *v14; 
  __int64 v15; 
  int v16; 

  v16 = a2;
  v9 = 0;
  if( PopDiagHandleRegistered && EtwEventEnabled(PopDiagHandle, a3) )
  {
    DeviceAttachmentBaseRefWithTag = IoGetDeviceAttachmentBaseRefWithTag(DeviceObject, 0x67446F50ui64);
    v6 = DeviceAttachmentBaseRefWithTag;
    if( DeviceAttachmentBaseRefWithTag )
      DeviceNode = DeviceAttachmentBaseRefWithTag->DeviceObjectExtension->DeviceNode;
    else
      DeviceNode = 0i64;
    if( DeviceNode )
    {
      v8 = DeviceNode[64] >> 1;
      UserData.Ptr = (unsigned __int64)&v9;
      v9 = v8;
      *(_QWORD *)&UserData.Size = 2i64;
      v11 = *((_QWORD *)DeviceNode + 17);
      v14 = &v16;
      v12 = 2 * v8;
      v13 = 0;
      v15 = 4i64;
      EtwWrite(PopDiagHandle, a3, 0, 3u, &UserData);
    }
    if( v6 )
      ObfDereferenceObjectWithTag(v6, 0x67446F50ui64);
  }
}

Referenced by:

PopDiagTraceThermalOverthrottleState
PopDiagTraceThermalStandbyState