Share via


How to enumerate audio endpoint (IMMDevice) properties on your system

This blog post has moved to https://matthewvaneerde.wordpress.com/2011/06/13/how-to-enumerate-audio-endpoint-immdevice-properties-on-your-system/

Comments

  • Anonymous
    July 28, 2011
    Hi, Writing some code to identify paired capture/render devices, ie a headset. My big assumption is the following value {b3f8fa53-0004-438e-9003-51a46e139bfc},2 is a constant which always maps to the device ID as reported by WMI. Is my assumption correct?

  • Anonymous
    July 28, 2011
    Forgot to also ask if this value is the same in XP and Vista?

  • Anonymous
    September 10, 2011
    That property is not publically defined, and you should not rely on it. You can identify whether render and capture devices are on the same hardware by doing the device topology "connector dance" and the PKEY_Device_InstanceId property.  For example, see: blogs.msdn.com/.../sample-find-out-if-your-default-playback-and-capture-devices-are-on-the-same-hardware.aspx

  • Anonymous
    September 10, 2011
    IMMDevice properties were introduced in Vista; XP is a very different beast.

  • Anonymous
    April 16, 2012
    how can I enable a disabled  endpoint device ,are there any api I can use?

  • Anonymous
    April 17, 2012
    Only the user can enable or disable audio endpoints, and that only via the Sound control panel.

  • Anonymous
    June 03, 2012
    Hello, I am trying to write a program to set audio properties of endpoint devices. I've seen that there is EndpointDeviceVolume API out for controlling the volume, but I want to see if it is possible to programmatically set properties like Enhancements. Is there a way to enumerate the properties and get/set values using IMMDevice? Thanks Kevin

  • Anonymous
    June 03, 2012
    Each endpoint has two property stores; the "endpoint property store" displayed above, and the "effects property store."  The endpoint property store is exposed to applications, but the effects property store is limited to:

  1. the audio driver
  2. the audio engine
  3. the Sound control panel. So only the user can view / change settings in the effects property store, and that only through the Sound control panel. I'm interested in why your application needs to know about the effects property store.  Can you share some details on your application?  You can post it at the Windows Pro Audio forum social.msdn.microsoft.com/.../threads Or you can email me directly: mateer at microsoft dot com
  • Anonymous
    June 04, 2013
    The comment has been removed

  • Anonymous
    June 04, 2013
    And please also suggest me how can I do this with using other API's if possible.

  • Anonymous
    January 19, 2014
    Hi Maurits, May I ask a question? How does WIN8 offload audio driver know that app have set PKEY_AudioEndpoint_Disable_SysFx to 1, is there be a notify function or API I can use in WDM driver? Thanks much...

  • Anonymous
    January 19, 2014
    That's a good question for the wdmaudiodev email list. I believe the answer has three parts:

  1. There are two different property stores for each endpoint. This blog post deals with the "endpoint property store", which the driver can seed with EPn directives. Apps generally have read-only access to this. There is also an "effects property store", which the driver can seed with FXn directives. Apps cannot access this at all; only APOs and the Sound control panel can access this.
  2. A Windows 8.0 offload driver will receive IOCTLs KSPROPSETID_AudioEngine/KSPROPERTY_AUDIOENGINE_LFXENABLE = 0 and _GFXENABLE = 0 if effects ate disabled. If there are finer-grained effects settings, the custom Sound control panel property page provider must inform the driver out of band, since the offload path has no APO.
  3. A Windows 8.1 driver should use KSPROPSETID_AudioSignalProcessing to advertise processing modes available on the host pin and offload pin. If the offload pin does not support _RAW mode, disabling effects will also disable offload.