SHSettingsChanged

This function tells the shell that changes may have been made to one or more settings in some category.

Declaration

VOID
SHSettingsChanged (
    UINT Ignored,
    LPCWSTR lpCategory);

Parameters

The first argument is ignored. Its only reason for being shown above as a UINT is that EXPLORER.EXE is known to pass as this argument the WPARAM of a WM_WININICHANGE message.

The lpCategory argument provides the address of a null-terminated string that describes the category of settings that may have changed, or is NULL to indicate that all categories of settings may have changed.

Behaviour

At present, only one category of settings is recognised. It covers the SHELL32 and SHDOCVW restrictions, as read through the SHRestricted and SHRestricted2 functions respectively. It is selected by either of the strings

the first being an overall description of the category and the second being the registry key in which most of these settings are saved.

If the lpCategory argument is NULL or addresses a string that matches one of the above in a case-insensitive comparison, then the shell increments its counter of changes to the restrictions. This is a global counter, as supported by SHLWAPI. Its name is known to both SHELL32 and SHDOCVW. When each is next asked for the value of any restriction, each will notice the change in the counter and they will each reset their cache of restriction values, so that a fresh value must be sought from the registry.

Availability

The SHSettingsChanged function is exported from SHELL32 as ordinal 244 in version 4.71 and higher.

Though this function dates from as long ago as 1997, it was still not documented by Microsoft as late as the January 2007 edition of the Windows Vista Software Development Kit (SDK).

Note that this function is an example of an Internet Explorer component, namely SHDOCVW.DLL, drawing (arguably important) functionality from a Windows component without actually calling any of the Windows component’s functions. It therefore escapes the requirements of Microsoft’s anti-trust settlement regarding API disclosure. Yet unarguably what happens here is that a Microsoft product, Internet Explorer, that has competitors accesses Microsoft’s monopoly product, Windows, to obtain a benefit that is unavailable to the competing products.