The BTHHFP_DESCRIPTOR data structure stores information describing a paired Handsfree profile (HFP) device.

The HFP driver returns this data structure in the output buffer for the IOCTL_BTHHFP_DEVICE_GET_DESCRIPTOR request.


typedef struct _BTHHFP_DESCRIPTOR {
  GUID           InputPinCategory;
  GUID           OutputPinCategory;
  GUID           ContainerId;
  BOOL           SupportsVolume;
  ULONG          VolumePropertyValuesSize;
  UNICODE_STRING FriendlyName;



KS pin category for the input function of the paired HFP device.


KS pin category for the output function of the paired HFP device.


The PnP container ID for the paired HFP device.


Indicates whether the paired HFP device supports remote volume control.


If remote volume control is supported, this member contains the size of the data returned by the IOCTL_BTHHFP_DEVICE_GET_VOLUMEPROPERTYVALUES request.


An indirect string identifying the human readable friendly name of the paired HFP device.


The HFP driver calculates the InputPinCategory and OutputPinCategory GUIDs based on the 'Bluetooth Class of Device' data that is contained in the SDP information of the paired device. The audio driver sets the KSPIN_DESCRIPTOR.Category members for the input and output bridge pins to the calculated GUIDs.


In some cases the input and output pin categories may be the same.

The audio driver should make no particular assumptions about the category GUID values returned in InputPinCategory and OutputPinCategory members. The audio system uses this information to help determine the type of device (for example, headset versus speakers) and whether to use the device for different purposes such as the default communications device.

The audio driver stores the ContainerId in appropriate context data, and returns this value in its implementation of the KSPROPERTY_JACK_CONTAINERID KS property.

If SupportsVolume is true, the audio driver includes volume support in its KS topology.

The audio driver uses the string returned in FriendlyName to set the DEVPKEY_DeviceInterface_FriendlyName property on the KS filter’s KSCATEGORY_AUDIO device interface. To do this, the audio driver calls IoSetDeviceInterfacePropertyData and sets the property type to DEVPROP_TYPE_STRING_INDIRECT. An example string is "@System32\drivers\bthhfenum.sys,#2;%1 Hands-Free%0..;(SomeDeviceName)”. Note that this is an indirect string and therefore not necessarily the human readable string that is directly displayed in a user interface. The audio system uses this string to generate localized strings used for display to the user, such as in the Sounds control panel.

For information about the IOCTLs that work with this structure, see Bluetooth HFP DDI IOCTLs.


Minimum supported client Windows 8
Minimum supported server Windows Server 2012
Header bthhfpddi.h

See also

Bluetooth HFP DDI IOCTLs

Bluetooth HFP DDI Structures