PopDiagTraceThermalStateChange

VOID __stdcall PopDiagTraceThermalStateChange(
        DEVICE_OBJECT *DeviceObject,
        INT64 Engaged,
        EVENT_DESCRIPTOR *EventDescriptor,
        EVENT_DESCRIPTOR *a4){
  DEVICE_OBJECT *DeviceAttachmentBaseRefWithTag; 
  DEVICE_OBJECT *v7; 
  __int64 v8; 
  int v9; 
  __int16 v10; 
  EVENT_DATA_DESCRIPTOR UserData; 
  __int64 v12; 
  int v13; 
  int v14; 
  int *v15; 
  __int64 v16; 
  int v17; 
  v17 = Engaged;
  v10 = 0;
  if( PopDiagHandleRegistered && EtwEventEnabled(PopDiagHandle, EventDescriptor, EventDescriptor) )
  {
    DeviceAttachmentBaseRefWithTag = IoGetDeviceAttachmentBaseRefWithTag(DeviceObject, 0x67446F50ui64);
    v7 = DeviceAttachmentBaseRefWithTag;
    if( DeviceAttachmentBaseRefWithTag )
      v8 = *(_QWORD *)(*((_QWORD *)DeviceAttachmentBaseRefWithTag + 39) + 40i64);
    else
      v8 = 0i64;
    if( v8 )
    {
      v9 = *(_WORD *)(v8 + 128) >> 1;
      UserData.Ptr = (unsigned __int64)&v10;
      v10 = v9;
      *(_QWORD *)&UserData.Size = 2i64;
      v12 = *(_QWORD *)(v8 + 136);
      v15 = &v17;
      v13 = 2 * v9;
      v14 = 0;
      v16 = 4i64;
      EtwWrite(PopDiagHandle, EventDescriptor, 0i64, 3ui64, &UserData);
    }
    if( v7 )
      ObfDereferenceObjectWithTag(v7, 0x67446F50ui64);
  }
}

Referenced by:

PopDiagTraceThermalOverthrottleState
PopDiagTraceThermalStandbyState