The THERMAL_COOLING_INTERFACE structure enables the operating system to control the thermal management settings of a device.


  USHORT                  Size;
  USHORT                  Version;
  PVOID                   Context;
  PINTERFACE_REFERENCE    InterfaceReference;
  PINTERFACE_DEREFERENCE  InterfaceDereference;
  ULONG                   Flags;


  • Size
    The size, in bytes, of this structure. Set this member to sizeof(THERMAL_COOLING_INTERFACE).

  • Version
    The interface version number. The current version is specified by the THERMAL_COOLING_INTERFACE_VERSION constant in the Poclass.h header file. For more information, see Remarks.

  • Context
    A pointer to interface-specific context information. During a callback to any of the driver-implemented routines pointed to by this structure, the caller passes this context pointer to the routine as the first parameter value.

  • InterfaceReference
    A pointer to an InterfaceReference routine that increments the interface's reference count.

  • InterfaceDereference
    A pointer to an InterfaceDereference routine that decrements the interface's reference count.

  • Flags
    Reserved. Set to zero.

  • ActiveCooling
    A pointer to an ActiveCooling routine that engages or disengages active cooling (for example, by turning a fan on or off). A device that does not support active cooling sets this member to NULL.

  • PassiveCooling
    A pointer to an PassiveCooling routine that controls the degree to which the operation of the device must be throttled to reduce the heat generated by the device. A device that does not support passive cooling sets this member to NULL.


The THERMAL_COOLING_INTERFACE structure is an extension of the INTERFACE structure.

Starting with Windows 8, the operating system calls the routines pointed to by the THERMAL_COOLING_INTERFACE structure to control the thermal levels of the devices in a hardware platform. For more information, see Device-Level Thermal Management.

All implementations of the GUID_THERMAL_COOLING_INTERFACE driver interface must supply InterfaceReference and InterfaceDereference routines. In addition, an implementation must supply either an ActiveCooling routine or a PassiveCooling routine, and can supply both.

The driver for a device that provides an active cooling function (for example, a fan) implements an ActiveCooling routine. The operating system calls this routine to engage and disengage the active cooling function. Initially, before the first call to this routine, the device is configured so that the active cooling function is disengaged (turned off).

The driver for a device that provides a passive cooling function implements a PassiveCooling routine. The operating system calls this routine to control the degree to which the device is throttled. Throttling a device decreases its performance level to enable the device to cool. Initially, before the first call to this routine, the device is configured to operate at its full performance level, with no cooling restrictions.

For more information, see Passive and Active Cooling Modes.

When a device driver receives an IRP_MN_QUERY_INTERFACE request for the GUID_THERMAL_COOLING_INTERFACE driver interface, the input parameters for this request are contained in the Parameters.QueryInterface member of the IO_STACK_LOCATION structure. The Size and Version input parameters specify which version of the interface is being requested. If the device driver that handles this request supports the specified version, this driver should set the Size and Version members of the THERMAL_COOLING_INTERFACE structure to the same values as the Size and Version input parameters. A device driver that does not support the specified interface version should complete the request with status code STATUS_NOT_SUPPORTED.



Supported starting with Windows 8.


Poclass.h (include Poclass.h)

See also











Send comments about this topic to Microsoft