Important:
This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.
4/14/2010

The State and Notifications Broker is an architecture and API set that provides access to low-level device information. From battery levels to the currently playing Media Player track, the State and Notifications Broker brings together disparate device status into an easy-to-query format, and also provides callback methods to determine when something has changed.

In this example, a callback function is defined which will be called when the device's battery level reaches a critically low level:

Copy Code
void AdjustPowerConsumption(HREGNOTIFY hNotify, DWORD dwUserData,
const PBYTE pData, const UINT cbData);
// Register to be notified of changes to the eighth bit
// in SN_POWERBATTERYSTATE_VALUE. The eighth bit is set to one when

// the battery is critically low (and set to zero and when it is
not).
HRESULT RegistryNotifyCallbackExample()
{
	NOTIFICATIONCONDITION nc;
	HRESULT hr		 = S_OK;
	HREGNOTIFY hNotify = NULL;
	// Initialize the notification structure.
	// The mask for the eighth bit.
	nc.dwMask = 0x8;
	// Receive a notification whenever that bit toggles.
	nc.ctComparisonType = REG_CT_ANYCHANGE;
	// dw is ignored for REG_CT_ANYCHANGE.
	nc.TargetValue.dw = 0;

	hr = RegistryNotifyCallback(SN_POWERBATTERYSTATE_ROOT, 
								SN_POWERBATTERYSTATE_PATH, 
								SN_POWERBATTERYSTATE_VALUE, 
								AdjustPowerConsumption,
								0, 
								&nc, 
								&hNotify);
	// Close the notification using RegistryCloseNotification when
done.
	// Note that it is alright to call RegistryCloseNotification
from the callback function.
	// hr = RegistryCloseNotification(hNotify);
	return hr;
}
void AdjustPowerConsumption(HREGNOTIFY hNotify, DWORD dwUserData,
const PBYTE pData, const UINT cbData)
{
// The callback function
}

For the complete example, see the topic RegistryNotifyCallback.

Although much of this information is also stored in the Registry, this approach makes code much easier to maintain, and considerably simpler to monitor for changes.

The State and Notification Broken can be used from both managed and native code.

Reference

See Also