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

Side by Side Diff: webrtc/base/win32regkey.h

Issue 2571763002: Delete unused class rtc::RegKey. (Closed)
Patch Set: Created 4 years 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
« no previous file with comments | « webrtc/base/BUILD.gn ('k') | webrtc/base/win32regkey.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2003 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 // Registry configuration wrappers class
12 //
13 // Offers static functions for convenient
14 // fast access for individual values
15 //
16 // Also provides a wrapper class for efficient
17 // batch operations on values of a given registry key.
18 //
19
20 #ifndef WEBRTC_BASE_WIN32REGKEY_H_
21 #define WEBRTC_BASE_WIN32REGKEY_H_
22
23 #include <string>
24 #include <vector>
25
26 #include "webrtc/base/basictypes.h"
27 #include "webrtc/base/constructormagic.h"
28 #include "webrtc/base/win32.h"
29
30 namespace rtc {
31
32 // maximum sizes registry key and value names
33 const int kMaxKeyNameChars = 255 + 1;
34 const int kMaxValueNameChars = 16383 + 1;
35
36 class RegKey {
37 public:
38 // constructor
39 RegKey();
40
41 // destructor
42 ~RegKey();
43
44 // create a reg key
45 HRESULT Create(HKEY parent_key, const wchar_t* key_name);
46
47 HRESULT Create(HKEY parent_key,
48 const wchar_t* key_name,
49 wchar_t* reg_class,
50 DWORD options,
51 REGSAM sam_desired,
52 LPSECURITY_ATTRIBUTES lp_sec_attr,
53 LPDWORD lp_disposition);
54
55 // open an existing reg key
56 HRESULT Open(HKEY parent_key, const wchar_t* key_name);
57
58 HRESULT Open(HKEY parent_key, const wchar_t* key_name, REGSAM sam_desired);
59
60 // close this reg key
61 HRESULT Close();
62
63 // check if the key has a specified value
64 bool HasValue(const wchar_t* value_name) const;
65
66 // get the number of values for this key
67 uint32_t GetValueCount();
68
69 // Called to get the value name for the given value name index
70 // Use GetValueCount() to get the total value_name count for this key
71 // Returns failure if no key at the specified index
72 // If you modify the key while enumerating, the indexes will be out of order.
73 // Since the index order is not guaranteed, you need to reset your counting
74 // loop.
75 // 'type' refers to REG_DWORD, REG_QWORD, etc..
76 // 'type' can be NULL if not interested in the value type
77 HRESULT GetValueNameAt(int index, std::wstring* value_name, DWORD* type);
78
79 // check if the current key has the specified subkey
80 bool HasSubkey(const wchar_t* key_name) const;
81
82 // get the number of subkeys for this key
83 uint32_t GetSubkeyCount();
84
85 // Called to get the key name for the given key index
86 // Use GetSubkeyCount() to get the total count for this key
87 // Returns failure if no key at the specified index
88 // If you modify the key while enumerating, the indexes will be out of order.
89 // Since the index order is not guaranteed, you need to reset your counting
90 // loop.
91 HRESULT GetSubkeyNameAt(int index, std::wstring* key_name);
92
93 // SETTERS
94
95 // set an int32_t value - use when reading multiple values from a key
96 HRESULT SetValue(const wchar_t* value_name, DWORD value) const;
97
98 // set an int64_t value
99 HRESULT SetValue(const wchar_t* value_name, DWORD64 value) const;
100
101 // set a string value
102 HRESULT SetValue(const wchar_t* value_name, const wchar_t* value) const;
103
104 // set binary data
105 HRESULT SetValue(const wchar_t* value_name,
106 const uint8_t* value,
107 DWORD byte_count) const;
108
109 // set raw data, including type
110 HRESULT SetValue(const wchar_t* value_name,
111 const uint8_t* value,
112 DWORD byte_count,
113 DWORD type) const;
114
115 // GETTERS
116
117 // get an int32_t value
118 HRESULT GetValue(const wchar_t* value_name, DWORD* value) const;
119
120 // get an int64_t value
121 HRESULT GetValue(const wchar_t* value_name, DWORD64* value) const;
122
123 // get a string value - the caller must free the return buffer
124 HRESULT GetValue(const wchar_t* value_name, wchar_t** value) const;
125
126 // get a string value
127 HRESULT GetValue(const wchar_t* value_name, std::wstring* value) const;
128
129 // get a std::vector<std::wstring> value from REG_MULTI_SZ type
130 HRESULT GetValue(const wchar_t* value_name,
131 std::vector<std::wstring>* value) const;
132
133 // get binary data - the caller must free the return buffer
134 HRESULT GetValue(const wchar_t* value_name,
135 uint8_t** value,
136 DWORD* byte_count) const;
137
138 // get raw data, including type - the caller must free the return buffer
139 HRESULT GetValue(const wchar_t* value_name,
140 uint8_t** value,
141 DWORD* byte_count,
142 DWORD* type) const;
143
144 // STATIC VERSIONS
145
146 // flush
147 static HRESULT FlushKey(const wchar_t* full_key_name);
148
149 // check if a key exists
150 static bool HasKey(const wchar_t* full_key_name);
151
152 // check if the key has a specified value
153 static bool HasValue(const wchar_t* full_key_name, const wchar_t* value_name);
154
155 // SETTERS
156
157 // STATIC int32_t set
158 static HRESULT SetValue(const wchar_t* full_key_name,
159 const wchar_t* value_name,
160 DWORD value);
161
162 // STATIC int64_t set
163 static HRESULT SetValue(const wchar_t* full_key_name,
164 const wchar_t* value_name,
165 DWORD64 value);
166
167 // STATIC float set
168 static HRESULT SetValue(const wchar_t* full_key_name,
169 const wchar_t* value_name,
170 float value);
171
172 // STATIC double set
173 static HRESULT SetValue(const wchar_t* full_key_name,
174 const wchar_t* value_name,
175 double value);
176
177 // STATIC string set
178 static HRESULT SetValue(const wchar_t* full_key_name,
179 const wchar_t* value_name,
180 const wchar_t* value);
181
182 // STATIC binary data set
183 static HRESULT SetValue(const wchar_t* full_key_name,
184 const wchar_t* value_name,
185 const uint8_t* value,
186 DWORD byte_count);
187
188 // STATIC multi-string set
189 static HRESULT SetValueMultiSZ(const wchar_t* full_key_name,
190 const TCHAR* value_name,
191 const uint8_t* value,
192 DWORD byte_count);
193
194 // GETTERS
195
196 // STATIC int32_t get
197 static HRESULT GetValue(const wchar_t* full_key_name,
198 const wchar_t* value_name,
199 DWORD* value);
200
201 // STATIC int64_t get
202 //
203 // Note: if you are using time64 you should
204 // likely use GetLimitedTimeValue (util.h) instead of this method.
205 static HRESULT GetValue(const wchar_t* full_key_name,
206 const wchar_t* value_name,
207 DWORD64* value);
208
209 // STATIC float get
210 static HRESULT GetValue(const wchar_t* full_key_name,
211 const wchar_t* value_name,
212 float* value);
213
214 // STATIC double get
215 static HRESULT GetValue(const wchar_t* full_key_name,
216 const wchar_t* value_name,
217 double* value);
218
219 // STATIC string get
220 // Note: the caller must free the return buffer for wchar_t* version
221 static HRESULT GetValue(const wchar_t* full_key_name,
222 const wchar_t* value_name,
223 wchar_t** value);
224 static HRESULT GetValue(const wchar_t* full_key_name,
225 const wchar_t* value_name,
226 std::wstring* value);
227
228 // STATIC REG_MULTI_SZ get
229 static HRESULT GetValue(const wchar_t* full_key_name,
230 const wchar_t* value_name,
231 std::vector<std::wstring>* value);
232
233 // STATIC get binary data - the caller must free the return buffer
234 static HRESULT GetValue(const wchar_t* full_key_name,
235 const wchar_t* value_name,
236 uint8_t** value,
237 DWORD* byte_count);
238
239 // Get type of a registry value
240 static HRESULT GetValueType(const wchar_t* full_key_name,
241 const wchar_t* value_name,
242 DWORD* value_type);
243
244 // delete a subkey of the current key (with no subkeys)
245 HRESULT DeleteSubKey(const wchar_t* key_name);
246
247 // recursively delete a sub key of the current key (and all its subkeys)
248 HRESULT RecurseDeleteSubKey(const wchar_t* key_name);
249
250 // STATIC version of delete key - handles nested keys also
251 // delete a key and all its sub-keys recursively
252 // Returns S_FALSE if key didn't exist, S_OK if deletion was successful,
253 // and failure otherwise.
254 static HRESULT DeleteKey(const wchar_t* full_key_name);
255
256 // STATIC version of delete key
257 // delete a key recursively or non-recursively
258 // Returns S_FALSE if key didn't exist, S_OK if deletion was successful,
259 // and failure otherwise.
260 static HRESULT DeleteKey(const wchar_t* full_key_name, bool recursive);
261
262 // delete the specified value
263 HRESULT DeleteValue(const wchar_t* value_name);
264
265 // STATIC version of delete value
266 // Returns S_FALSE if key didn't exist, S_OK if deletion was successful,
267 // and failure otherwise.
268 static HRESULT DeleteValue(const wchar_t* full_key_name,
269 const wchar_t* value_name);
270
271 // Peek inside (use a RegKey as a smart wrapper around a registry handle)
272 HKEY key() { return h_key_; }
273
274 // helper function to get the HKEY and the root key from a string
275 // modifies the argument in place and returns the key name
276 // e.g. HKLM\\Software\\Google\... returns HKLM, "Software\\Google\..."
277 // Necessary for the static versions that use the full name of the reg key
278 static HKEY GetRootKeyInfo(std::wstring* full_key_name);
279
280 // Returns true if this key name is 'safe' for deletion (doesn't specify a key
281 // root)
282 static bool SafeKeyNameForDeletion(const wchar_t* key_name);
283
284 // save the key and all of its subkeys and values to a file
285 static HRESULT Save(const wchar_t* full_key_name, const wchar_t* file_name);
286
287 // restore the key and all of its subkeys and values which are saved into a
288 // file
289 static HRESULT Restore(const wchar_t* full_key_name,
290 const wchar_t* file_name);
291
292 // Is the key empty: having no sub-keys and values
293 static bool IsKeyEmpty(const wchar_t* full_key_name);
294
295 private:
296
297 // helper function to get any value from the registry
298 // used when the size of the data is unknown
299 HRESULT GetValueHelper(const wchar_t* value_name,
300 DWORD* type,
301 uint8_t** value,
302 DWORD* byte_count) const;
303
304 // helper function to get the parent key name and the subkey from a string
305 // modifies the argument in place and returns the key name
306 // Necessary for the static versions that use the full name of the reg key
307 static std::wstring GetParentKeyInfo(std::wstring* key_name);
308
309 // common SET Helper for the static case
310 static HRESULT SetValueStaticHelper(const wchar_t* full_key_name,
311 const wchar_t* value_name,
312 DWORD type,
313 LPVOID value,
314 DWORD byte_count = 0);
315
316 // common GET Helper for the static case
317 static HRESULT GetValueStaticHelper(const wchar_t* full_key_name,
318 const wchar_t* value_name,
319 DWORD type,
320 LPVOID value,
321 DWORD* byte_count = NULL);
322
323 // convert REG_MULTI_SZ bytes to string array
324 static HRESULT MultiSZBytesToStringArray(const uint8_t* buffer,
325 DWORD byte_count,
326 std::vector<std::wstring>* value);
327
328 // the HKEY for the current key
329 HKEY h_key_;
330
331 // for unittest
332 friend void RegKeyHelperFunctionsTest();
333
334 RTC_DISALLOW_COPY_AND_ASSIGN(RegKey);
335 };
336
337 } // namespace rtc
338
339 #endif // WEBRTC_BASE_WIN32REGKEY_H_
OLDNEW
« no previous file with comments | « webrtc/base/BUILD.gn ('k') | webrtc/base/win32regkey.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698