PROVIDER


typedef struct provider_info {
      PQUERYHANDLER pi_R0_1val;     // pointer to VxD handler
                                    //  single value
      PQUERYHANDLER pi_R0_allvals;  // pointer to VxD handler, 
                                    //  multiple values
      PQUERYHANDLER pi_R3_1val;     // Should be NULL in Win95
      PQUERYHANDLER pi_R3_allvals;  // Should be NULL in Win95
      DWORD pi_flags;               // capability flags
  } PROVIDER;
  typedef PROVIDER *PPROVIDER;

This structure must be passed as parameter to _RegCreateDynKey

pi_R0_1val

Pointer to the VxD handler function that should be called when this dynamic key is queried for one of its values. The provider must fill this in when it calls _RegCreateDynKey.

pi_R0_allvals

Pointer to the VxD handler function that should be called when the dynamic key is queried for all of its values (via RegQueryMultipleValues). If the handler function does not support multiple values, this should be set to NULL. In this case the registry code calls pi_R0_1val repeatedly, once for each value, when RegQueryMultipleValues is called for this key. Having this handler is useful in the case where the key is being queried remotely, because this would reduce the number of Remote Procedure Calls. The provider must fill this in when it calls _RegCreateDynKey (if it has a handler that responds to a query of multiple values).

pi_R3_1val

Win32 providers are not supported in Windows 95. This should be NULL.

pi_R3_allvals

Win32 providers are not supported in Windows 95. This should be NULL.

pi_flags

Capability flags. These are used to tell the registry code whether the provider is handling certain kinds of housekeeping, or whether the registry code should do this housekeeping. Currently, there is one such flag: PROVIDER_KEEPS_VALUE_LENGTH. If this flag is set, then the provider has the responsibility for maintaining and providing the value length when needed. If it is not set, then the registry code keeps track of the value lengths. This flag is useful if the value lengths are not static. If any of the value lengths can change dynamically, then the provider must do the work of keeping the value lengths. Note this flag is per-key, not per-value.