| Index: src/shared/Registry.h |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/src/shared/Registry.h |
| @@ -0,0 +1,62 @@ |
| +#ifndef REGISTRY_H |
| +#define REGISTRY_H |
| + |
| +#include <string> |
| +#include <Windows.h> |
| + |
| +namespace AdblockPlus |
| +{ |
| + /** |
| + * An open key in the system registry. |
| + * |
| + * This class is not completely general. |
| + * In particular, it cannot encapsulate the predefined registry keys |
| + * such as HKEY_CLASSES_ROOT. |
| + * These classes are considered "always open", |
| + * and the destructor should not close them. |
| + * Rather than trying to detect these predefined keys, |
| + * we simply don't allow them to be constructed. |
| + * In practice, this is a limitation without much consequence. |
| + * If this were a library designed for standalone use, |
| + * this limitation might not be appropriate, but it's fine here. |
| + */ |
| + class Registry_Key |
| + { |
| + /** |
| + * Handle to registry key that is open and not predefined. |
| + */ |
| + HKEY key; |
| + |
| + public: |
| + /** |
| + * Constructor to open a key as a subkey key of an existing parent. |
| + * Opens the key with read-only access. |
| + * |
| + * The constructor throws if 'key_name' is not found, |
| + * to preserve the invariant that the registry key is open. |
| + * The constructor also throws if 'key_name' is empty, |
| + * to preserve the invariant the the registry key is not predefinded. |
| + * |
| + * \param parent |
| + * An open registry key. This may be one of the predefined keys. |
| + * \param key_name |
| + * Name of the subkey to be opened under the parent. |
| + */ |
| + Registry_Key(HKEY parent, const std::wstring& key_name); |
| + |
| + /** |
| + * Destructor always closes the key. |
| + */ |
| + ~Registry_Key(); |
| + |
| + /** |
| + * Retrieve a value from a name-value pair within the present key. |
| + * |
| + * Throws if the name is not found within the dictionary. |
| + * Throws if the name is found but is not a string. |
| + */ |
| + std::wstring value_wstring(const std::wstring& name) const; |
| + }; |
| +} |
| + |
| +#endif |