Checking the Registry for Policies and Preferences

The following code example shows how your application can check the registry for policy and preference information.

#define PREFERENCE_KEY TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer")
#define POLICY_KEY TEXT("Software\\Policies\\Microsoft\\Windows\\Explorer")

DWORD ReadValue (LPTSTR lpValueName, DWORD dwDefault)
{
     HKEY hKey;
     LONG lResult;
     DWORD dwValue, dwSize = sizeof(dwValue);

    // First, check for a policy.
    lResult = RegOpenKeyEx (HKEY_CURRENT_USER, POLICY_KEY, 0,
                            KEY_READ, &hKey);
    if (lResult == ERROR_SUCCESS)
    {
        lResult = RegQueryValueEx (hKey, lpValueName, 0, &dwType, 
                                   (LPBYTE) &dwValue, &dwSize);
        RegCloseKey (hKey);
    }

    // Exit if a policy value was found.
    if (lResult == ERROR_SUCCESS)
    {
        return dwValue;
    }              

    // Second, check for a preference.
    lResult = RegOpenKeyEx (HKEY_CURRENT_USER, PREFERENCE_KEY, 0,
                            KEY_READ, &hKey);
    if (lResult == ERROR_SUCCESS)
    {
        lResult = RegQueryValueEx (hKey, lpValueName, 0,
                                   &dwType, (LPBYTE) &dwValue, &dwSize);
                                 
        RegCloseKey (hKey);
    }
    
    // Exit if a preference was found.
    if (lResult == ERROR_SUCCESS)
    {
        return dwValue;
    }                                                     

    // Neither a policy nor a preference was found; return the default value.
    return dwDefault;
}