diff options
Diffstat (limited to 'base/win/registry.h')
-rw-r--r-- | base/win/registry.h | 72 |
1 files changed, 55 insertions, 17 deletions
diff --git a/base/win/registry.h b/base/win/registry.h index 2f06641..790fe7d 100644 --- a/base/win/registry.h +++ b/base/win/registry.h @@ -11,63 +11,101 @@ #include "base/basictypes.h" +// Please ignore this part. This temporary hack exists +// to detect if the return value is used as 'bool'. +// Todo(amit): remove this before (or soon after) checkin. +struct CatchBoolChecks { + CatchBoolChecks(LONG l) : l_(l) {} + LONG l_; + operator LONG() { return l_; } + LONG value() const { return l_; } + bool operator == (LONG l) const { return l == l_; } + bool operator != (LONG l) const { return l != l_; } + private: + // If you hit a compile error here, you most likely attempting to use the + // return value of a RegKey helper as a bool. Please note that RegKey + // methods return LONG now instead of bool. + operator bool () { return false; } +}; + +inline bool operator == (const LONG& l, const CatchBoolChecks& g) { + return g.value() == l; +} + +inline bool operator != (const LONG& l, const CatchBoolChecks& g) { + return g.value() != l; +} + +using std::ostream; +inline ostream& operator <<(ostream &os, const CatchBoolChecks& g) { + os << g.value(); + return os; +} + +typedef CatchBoolChecks GONG; + namespace base { namespace win { // Utility class to read, write and manipulate the Windows Registry. // Registry vocabulary primer: a "key" is like a folder, in which there // are "values", which are <name, data> pairs, with an associated data type. +// +// Note: +// ReadValue family of functions guarantee that the return arguments +// are not touched in case of failure. class RegKey { public: RegKey(); RegKey(HKEY rootkey, const wchar_t* subkey, REGSAM access); ~RegKey(); - bool Create(HKEY rootkey, const wchar_t* subkey, REGSAM access); + GONG Create(HKEY rootkey, const wchar_t* subkey, REGSAM access); - bool CreateWithDisposition(HKEY rootkey, const wchar_t* subkey, + GONG CreateWithDisposition(HKEY rootkey, const wchar_t* subkey, DWORD* disposition, REGSAM access); - bool Open(HKEY rootkey, const wchar_t* subkey, REGSAM access); + GONG Open(HKEY rootkey, const wchar_t* subkey, REGSAM access); // Creates a subkey or open it if it already exists. - bool CreateKey(const wchar_t* name, REGSAM access); + GONG CreateKey(const wchar_t* name, REGSAM access); // Opens a subkey - bool OpenKey(const wchar_t* name, REGSAM access); + GONG OpenKey(const wchar_t* name, REGSAM access); void Close(); DWORD ValueCount() const; // Determine the nth value's name. - bool ReadName(int index, std::wstring* name) const; + GONG ReadName(int index, std::wstring* name) const; // True while the key is valid. bool Valid() const { return key_ != NULL; } // Kill a key and everything that live below it; please be careful when using // it. - bool DeleteKey(const wchar_t* name); + GONG DeleteKey(const wchar_t* name); // Deletes a single value within the key. - bool DeleteValue(const wchar_t* name); + GONG DeleteValue(const wchar_t* name); - bool ValueExists(const wchar_t* name); + bool ValueExists(const wchar_t* name) const; - bool ReadValue(const wchar_t* name, void* data, DWORD* dsize, + GONG ReadValue(const wchar_t* name, void* data, DWORD* dsize, DWORD* dtype) const; - bool ReadValue(const wchar_t* name, std::wstring* value) const; - bool ReadValueDW(const wchar_t* name, DWORD* value) const; + GONG ReadValue(const wchar_t* name, std::wstring* value) const; + GONG ReadValueDW(const wchar_t* name, DWORD* value) const; + GONG ReadInt64(const wchar_t* name, int64* value) const; - bool WriteValue(const wchar_t* name, const void* data, DWORD dsize, + GONG WriteValue(const wchar_t* name, const void* data, DWORD dsize, DWORD dtype); - bool WriteValue(const wchar_t* name, const wchar_t* value); - bool WriteValue(const wchar_t* name, DWORD value); + GONG WriteValue(const wchar_t* name, const wchar_t* value); + GONG WriteValue(const wchar_t* name, DWORD value); // Starts watching the key to see if any of its values have changed. // The key must have been opened with the KEY_NOTIFY access privilege. - bool StartWatching(); + GONG StartWatching(); // If StartWatching hasn't been called, always returns false. // Otherwise, returns true if anything under the key has changed. @@ -76,7 +114,7 @@ class RegKey { // Will automatically be called by destructor if not manually called // beforehand. Returns true if it was watching, false otherwise. - bool StopWatching(); + GONG StopWatching(); inline bool IsWatching() const { return watch_event_ != 0; } HANDLE watch_event() const { return watch_event_; } |