Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: base/win/registry.h

Issue 6346010: Remove sanity check in RegKey to prevent usage of checking... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | base/win/registry.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BASE_WIN_REGISTRY_H_ 5 #ifndef BASE_WIN_REGISTRY_H_
6 #define BASE_WIN_REGISTRY_H_ 6 #define BASE_WIN_REGISTRY_H_
7 #pragma once 7 #pragma once
8 8
9 #include <windows.h> 9 #include <windows.h>
10 #include <string> 10 #include <string>
11 11
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 13
14 // Please ignore this part. This temporary hack exists
15 // to detect if the return value is used as 'bool'.
16 // Todo(amit): remove this before (or soon after) checkin.
17 struct CatchBoolChecks {
18 CatchBoolChecks(LONG l) : l_(l) {}
19 LONG l_;
20 operator LONG() { return l_; }
21 LONG value() const { return l_; }
22 bool operator == (LONG l) const { return l == l_; }
23 bool operator != (LONG l) const { return l != l_; }
24 private:
25 // If you hit a compile error here, you most likely attempting to use the
26 // return value of a RegKey helper as a bool. Please note that RegKey
27 // methods return LONG now instead of bool.
28 operator bool () { return false; }
29 };
30
31 inline bool operator == (const LONG& l, const CatchBoolChecks& g) {
32 return g.value() == l;
33 }
34
35 inline bool operator != (const LONG& l, const CatchBoolChecks& g) {
36 return g.value() != l;
37 }
38
39 using std::ostream;
40 inline ostream& operator <<(ostream &os, const CatchBoolChecks& g) {
41 os << g.value();
42 return os;
43 }
44
45 typedef CatchBoolChecks GONG;
46
47 namespace base { 14 namespace base {
48 namespace win { 15 namespace win {
49 16
50 // Utility class to read, write and manipulate the Windows Registry. 17 // Utility class to read, write and manipulate the Windows Registry.
51 // Registry vocabulary primer: a "key" is like a folder, in which there 18 // Registry vocabulary primer: a "key" is like a folder, in which there
52 // are "values", which are <name, data> pairs, with an associated data type. 19 // are "values", which are <name, data> pairs, with an associated data type.
53 // 20 //
54 // Note: 21 // Note:
55 // ReadValue family of functions guarantee that the return arguments 22 // ReadValue family of functions guarantee that the return arguments
56 // are not touched in case of failure. 23 // are not touched in case of failure.
57 class RegKey { 24 class RegKey {
58 public: 25 public:
59 RegKey(); 26 RegKey();
60 RegKey(HKEY rootkey, const wchar_t* subkey, REGSAM access); 27 RegKey(HKEY rootkey, const wchar_t* subkey, REGSAM access);
61 ~RegKey(); 28 ~RegKey();
62 29
63 GONG Create(HKEY rootkey, const wchar_t* subkey, REGSAM access); 30 LONG Create(HKEY rootkey, const wchar_t* subkey, REGSAM access);
64 31
65 GONG CreateWithDisposition(HKEY rootkey, const wchar_t* subkey, 32 LONG CreateWithDisposition(HKEY rootkey, const wchar_t* subkey,
66 DWORD* disposition, REGSAM access); 33 DWORD* disposition, REGSAM access);
67 34
68 GONG Open(HKEY rootkey, const wchar_t* subkey, REGSAM access); 35 LONG Open(HKEY rootkey, const wchar_t* subkey, REGSAM access);
69 36
70 // Creates a subkey or open it if it already exists. 37 // Creates a subkey or open it if it already exists.
71 GONG CreateKey(const wchar_t* name, REGSAM access); 38 LONG CreateKey(const wchar_t* name, REGSAM access);
72 39
73 // Opens a subkey 40 // Opens a subkey
74 GONG OpenKey(const wchar_t* name, REGSAM access); 41 LONG OpenKey(const wchar_t* name, REGSAM access);
75 42
76 void Close(); 43 void Close();
77 44
78 DWORD ValueCount() const; 45 DWORD ValueCount() const;
79 46
80 // Determine the nth value's name. 47 // Determine the nth value's name.
81 GONG ReadName(int index, std::wstring* name) const; 48 LONG ReadName(int index, std::wstring* name) const;
82 49
83 // True while the key is valid. 50 // True while the key is valid.
84 bool Valid() const { return key_ != NULL; } 51 bool Valid() const { return key_ != NULL; }
85 52
86 // Kill a key and everything that live below it; please be careful when using 53 // Kill a key and everything that live below it; please be careful when using
87 // it. 54 // it.
88 GONG DeleteKey(const wchar_t* name); 55 LONG DeleteKey(const wchar_t* name);
89 56
90 // Deletes a single value within the key. 57 // Deletes a single value within the key.
91 GONG DeleteValue(const wchar_t* name); 58 LONG DeleteValue(const wchar_t* name);
92 59
93 bool ValueExists(const wchar_t* name) const; 60 bool ValueExists(const wchar_t* name) const;
94 61
95 GONG ReadValue(const wchar_t* name, void* data, DWORD* dsize, 62 LONG ReadValue(const wchar_t* name, void* data, DWORD* dsize,
96 DWORD* dtype) const; 63 DWORD* dtype) const;
97 GONG ReadValue(const wchar_t* name, std::wstring* value) const; 64 LONG ReadValue(const wchar_t* name, std::wstring* value) const;
98 GONG ReadValueDW(const wchar_t* name, DWORD* value) const; 65 LONG ReadValueDW(const wchar_t* name, DWORD* value) const;
99 GONG ReadInt64(const wchar_t* name, int64* value) const; 66 LONG ReadInt64(const wchar_t* name, int64* value) const;
100 67
101 GONG WriteValue(const wchar_t* name, const void* data, DWORD dsize, 68 LONG WriteValue(const wchar_t* name, const void* data, DWORD dsize,
102 DWORD dtype); 69 DWORD dtype);
103 GONG WriteValue(const wchar_t* name, const wchar_t* value); 70 LONG WriteValue(const wchar_t* name, const wchar_t* value);
104 GONG WriteValue(const wchar_t* name, DWORD value); 71 LONG WriteValue(const wchar_t* name, DWORD value);
105 72
106 // Starts watching the key to see if any of its values have changed. 73 // Starts watching the key to see if any of its values have changed.
107 // The key must have been opened with the KEY_NOTIFY access privilege. 74 // The key must have been opened with the KEY_NOTIFY access privilege.
108 GONG StartWatching(); 75 LONG StartWatching();
109 76
110 // If StartWatching hasn't been called, always returns false. 77 // If StartWatching hasn't been called, always returns false.
111 // Otherwise, returns true if anything under the key has changed. 78 // Otherwise, returns true if anything under the key has changed.
112 // This can't be const because the |watch_event_| may be refreshed. 79 // This can't be const because the |watch_event_| may be refreshed.
113 bool HasChanged(); 80 bool HasChanged();
114 81
115 // Will automatically be called by destructor if not manually called 82 // Will automatically be called by destructor if not manually called
116 // beforehand. Returns true if it was watching, false otherwise. 83 // beforehand. Returns true if it was watching, false otherwise.
117 GONG StopWatching(); 84 LONG StopWatching();
118 85
119 inline bool IsWatching() const { return watch_event_ != 0; } 86 inline bool IsWatching() const { return watch_event_ != 0; }
120 HANDLE watch_event() const { return watch_event_; } 87 HANDLE watch_event() const { return watch_event_; }
121 HKEY Handle() const { return key_; } 88 HKEY Handle() const { return key_; }
122 89
123 private: 90 private:
124 HKEY key_; // The registry key being iterated. 91 HKEY key_; // The registry key being iterated.
125 HANDLE watch_event_; 92 HANDLE watch_event_;
126 93
127 DISALLOW_COPY_AND_ASSIGN(RegKey); 94 DISALLOW_COPY_AND_ASSIGN(RegKey);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 168
202 wchar_t name_[MAX_PATH]; 169 wchar_t name_[MAX_PATH];
203 170
204 DISALLOW_COPY_AND_ASSIGN(RegistryKeyIterator); 171 DISALLOW_COPY_AND_ASSIGN(RegistryKeyIterator);
205 }; 172 };
206 173
207 } // namespace win 174 } // namespace win
208 } // namespace base 175 } // namespace base
209 176
210 #endif // BASE_WIN_REGISTRY_H_ 177 #endif // BASE_WIN_REGISTRY_H_
OLDNEW
« no previous file with comments | « no previous file | base/win/registry.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698