| Index: src/shared/Registry.h | 
| =================================================================== | 
| new file mode 100644 | 
| --- /dev/null | 
| +++ b/src/shared/Registry.h | 
| @@ -0,0 +1,65 @@ | 
| +#include <string> | 
| +#include <Windows.h> | 
| + | 
| +namespace AdblockPlus | 
| +{ | 
| + /** | 
| + * An open key in the system registry. | 
| + */ | 
| + class Registry_Key | 
| + { | 
| + /** | 
| + * Handle to an open registry key. | 
| + */ | 
| + HKEY key; | 
| + | 
| + /** | 
| + * Flag whether the registry key is predefined or not. | 
| + * | 
| + * Predefined key values are considered "always open" and should not be closed in the destructor. | 
| + */ | 
| + bool is_predefined; | 
| + | 
| + public: | 
| + /** | 
| + * Enumeration for predefined root keys. | 
| + */ | 
| + enum class Predefined | 
| + : unsigned int | 
| + { | 
| + HKCR = 0, // HKEY_CLASSES_ROOT | 
| + HKCC, // HKEY_CURRENT_CONFIG | 
| + HKCU, // HKEY_CURRENT_USER | 
| + HKLM, // HKEY_LOCAL_MACHINE | 
| + HKU // HKEY_USERS | 
| + }; | 
| + | 
| + /** | 
| + * Constructor to open a key under one of the predefined roots. | 
| + * Opens the key with read-only access. | 
| + * | 
| + * Because the invariant of this class is that the underlying registry key is open, | 
| + * this constructor throws if 'key_name' is not found. | 
| + */ | 
| + Registry_Key(Predefined root, std::wstring key_name); | 
| + | 
| + /** | 
| + * Constructor for one of the predefined roots. | 
| + */ | 
| + Registry_Key(Predefined root); | 
| + | 
| + /** | 
| + * Destructor closes the key if it's not a predefined one. | 
| + */ | 
| + ~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(std::wstring name) const; | 
| + }; | 
| +} | 
| + |