Hardware Dev Center

Collapse the table of content
Expand the table of content
Expand Minimize
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

IAudioEndpointVolume::RegisterControlChangeNotify method

The RegisterControlChangeNotify method registers a client's notification callback interface.


HRESULT RegisterControlChangeNotify(
  [in] IAudioEndpointVolumeCallback *pNotify


pNotify [in]

Pointer to the IAudioEndpointVolumeCallback interface that the client is registering for notification callbacks. If the RegisterControlChangeNotify method succeeds, it calls the AddRef method on the client's IAudioEndpointVolumeCallback interface.

Return value

If the method succeeds, it returns S_OK. If it fails, possible return codes include, but are not limited to, the values shown in the following table.

Return codeDescription

Parameter pNotify is NULL.



This method registers an IAudioEndpointVolumeCallback interface to be called by the system when the volume level or muting state of an endpoint changes. The caller implements the IAudioEndpointVolumeCallback interface.

When notifications are no longer needed, the client can call the IAudioEndpointVolume::UnregisterControlChangeNotify method to terminate the notifications.

Before the client releases its final reference to the IAudioEndpointVolumeCallback interface, it should call UnregisterControlChangeNotify to unregister the interface. Otherwise, the application leaks the resources held by the IAudioEndpointVolumeCallback and IAudioEndpointVolume objects. Note that RegisterControlChangeNotify calls the client's IAudioEndpointVolumeCallback::AddRef method, and UnregisterControlChangeNotify calls the IAudioEndpointVolumeCallback::Release method. If the client errs by releasing its reference to the IAudioEndpointVolumeCallback interface before calling UnregisterControlChangeNotify, the IAudioEndpointVolume object never releases its reference to the IAudioEndpointVolumeCallback interface. For example, a poorly designed IAudioEndpointVolumeCallback implementation might call UnregisterControlChangeNotify from the destructor for the IAudioEndpointVolumeCallback object. In this case, the client will not call UnregisterControlChangeNotify until the IAudioEndpointVolume object releases its reference to the IAudioEndpointVolumeCallback interface, and the IAudioEndpointVolume object will not release its reference to the IAudioEndpointVolumeCallback interface until the client calls UnregisterControlChangeNotify. For more information about the AddRef and Release methods, see the discussion of the IUnknown interface in the Windows SDK documentation.

In addition, the client should call UnregisterControlChangeNotify before releasing the final reference to the IAudioEndpointVolume object. Otherwise, the object leaks the storage that it allocated to hold the registration information. After registering a notification interface, the client continues to receive notifications for only as long as the IAudioEndpointVolume object exists.

For a code example that calls RegisterControlChangeNotify, see Endpoint Volume Controls.


Minimum supported client

Windows Vista [desktop apps | Windows Store apps]

Minimum supported server

Windows Server 2008 [desktop apps | Windows Store apps]



See also

IAudioEndpointVolume Interface
IAudioEndpointVolumeCallback Interface



Community Additions

© 2015 Microsoft