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

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

Issue 8337006: base/win: small improvement to RegKey API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: apply grt comments Created 9 years, 2 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 | « base/win/registry.h ('k') | base/win/registry_unittest.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 #include "base/win/registry.h" 5 #include "base/win/registry.h"
6 6
7 #include <shlwapi.h> 7 #include <shlwapi.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/threading/thread_restrictions.h" 10 #include "base/threading/thread_restrictions.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 base::ThreadRestrictions::AssertIOAllowed(); 49 base::ThreadRestrictions::AssertIOAllowed();
50 DCHECK(rootkey && subkey && access && disposition); 50 DCHECK(rootkey && subkey && access && disposition);
51 Close(); 51 Close();
52 52
53 LONG result = RegCreateKeyEx(rootkey, subkey, 0, NULL, 53 LONG result = RegCreateKeyEx(rootkey, subkey, 0, NULL,
54 REG_OPTION_NON_VOLATILE, access, NULL, &key_, 54 REG_OPTION_NON_VOLATILE, access, NULL, &key_,
55 disposition); 55 disposition);
56 return result; 56 return result;
57 } 57 }
58 58
59 LONG RegKey::Open(HKEY rootkey, const wchar_t* subkey, REGSAM access) {
60 base::ThreadRestrictions::AssertIOAllowed();
61 DCHECK(rootkey && subkey && access);
62 Close();
63
64 LONG result = RegOpenKeyEx(rootkey, subkey, 0, access, &key_);
65 return result;
66 }
67
68 LONG RegKey::CreateKey(const wchar_t* name, REGSAM access) { 59 LONG RegKey::CreateKey(const wchar_t* name, REGSAM access) {
69 base::ThreadRestrictions::AssertIOAllowed(); 60 base::ThreadRestrictions::AssertIOAllowed();
70 DCHECK(name && access); 61 DCHECK(name && access);
71 62
72 HKEY subkey = NULL; 63 HKEY subkey = NULL;
73 LONG result = RegCreateKeyEx(key_, name, 0, NULL, REG_OPTION_NON_VOLATILE, 64 LONG result = RegCreateKeyEx(key_, name, 0, NULL, REG_OPTION_NON_VOLATILE,
74 access, NULL, &subkey, NULL); 65 access, NULL, &subkey, NULL);
75 Close(); 66 Close();
76 67
77 key_ = subkey; 68 key_ = subkey;
78 return result; 69 return result;
79 } 70 }
80 71
81 LONG RegKey::OpenKey(const wchar_t* name, REGSAM access) { 72 LONG RegKey::Open(HKEY rootkey, const wchar_t* subkey, REGSAM access) {
82 base::ThreadRestrictions::AssertIOAllowed(); 73 base::ThreadRestrictions::AssertIOAllowed();
83 DCHECK(name && access); 74 DCHECK(rootkey && subkey && access);
75 Close();
76
77 LONG result = RegOpenKeyEx(rootkey, subkey, 0, access, &key_);
78 return result;
79 }
80
81 LONG RegKey::OpenKey(const wchar_t* relative_key_name, REGSAM access) {
82 base::ThreadRestrictions::AssertIOAllowed();
83 DCHECK(relative_key_name && access);
84 84
85 HKEY subkey = NULL; 85 HKEY subkey = NULL;
86 LONG result = RegOpenKeyEx(key_, name, 0, access, &subkey); 86 LONG result = RegOpenKeyEx(key_, relative_key_name, 0, access, &subkey);
87 87
88 // We have to close the current opened key before replacing it with the new
89 // one.
88 Close(); 90 Close();
89 91
90 key_ = subkey; 92 key_ = subkey;
91 return result; 93 return result;
92 } 94 }
93 95
94 void RegKey::Close() { 96 void RegKey::Close() {
95 base::ThreadRestrictions::AssertIOAllowed(); 97 base::ThreadRestrictions::AssertIOAllowed();
96 StopWatching(); 98 StopWatching();
97 if (key_) { 99 if (key_) {
98 ::RegCloseKey(key_); 100 ::RegCloseKey(key_);
99 key_ = NULL; 101 key_ = NULL;
100 } 102 }
101 } 103 }
102 104
103 DWORD RegKey::ValueCount() const { 105 bool RegKey::HasValue(const wchar_t* name) const {
106 base::ThreadRestrictions::AssertIOAllowed();
107 return RegQueryValueEx(key_, name, 0, NULL, NULL, NULL) == ERROR_SUCCESS;
108 }
109
110 DWORD RegKey::GetValueCount() const {
104 base::ThreadRestrictions::AssertIOAllowed(); 111 base::ThreadRestrictions::AssertIOAllowed();
105 DWORD count = 0; 112 DWORD count = 0;
106 LONG result = RegQueryInfoKey(key_, NULL, 0, NULL, NULL, NULL, NULL, &count, 113 LONG result = RegQueryInfoKey(key_, NULL, 0, NULL, NULL, NULL, NULL, &count,
107 NULL, NULL, NULL, NULL); 114 NULL, NULL, NULL, NULL);
108 return (result != ERROR_SUCCESS) ? 0 : count; 115 return (result == ERROR_SUCCESS) ? count : 0;
109 } 116 }
110 117
111 LONG RegKey::ReadName(int index, std::wstring* name) const { 118 LONG RegKey::GetValueNameAt(int index, std::wstring* name) const {
112 base::ThreadRestrictions::AssertIOAllowed(); 119 base::ThreadRestrictions::AssertIOAllowed();
113 wchar_t buf[256]; 120 wchar_t buf[256];
114 DWORD bufsize = arraysize(buf); 121 DWORD bufsize = arraysize(buf);
115 LONG r = ::RegEnumValue(key_, index, buf, &bufsize, NULL, NULL, NULL, NULL); 122 LONG r = ::RegEnumValue(key_, index, buf, &bufsize, NULL, NULL, NULL, NULL);
116 if (r == ERROR_SUCCESS) 123 if (r == ERROR_SUCCESS)
117 *name = buf; 124 *name = buf;
118 125
119 return r; 126 return r;
120 } 127 }
121 128
122 LONG RegKey::DeleteKey(const wchar_t* name) { 129 LONG RegKey::DeleteKey(const wchar_t* name) {
123 base::ThreadRestrictions::AssertIOAllowed(); 130 base::ThreadRestrictions::AssertIOAllowed();
124 DCHECK(key_); 131 DCHECK(key_);
125 DCHECK(name); 132 DCHECK(name);
126 LONG result = SHDeleteKey(key_, name); 133 LONG result = SHDeleteKey(key_, name);
127 return result; 134 return result;
128 } 135 }
129 136
130 LONG RegKey::DeleteValue(const wchar_t* value_name) { 137 LONG RegKey::DeleteValue(const wchar_t* value_name) {
131 base::ThreadRestrictions::AssertIOAllowed(); 138 base::ThreadRestrictions::AssertIOAllowed();
132 DCHECK(key_); 139 DCHECK(key_);
133 DCHECK(value_name); 140 DCHECK(value_name);
134 LONG result = RegDeleteValue(key_, value_name); 141 LONG result = RegDeleteValue(key_, value_name);
135 return result; 142 return result;
136 } 143 }
137 144
138 bool RegKey::ValueExists(const wchar_t* name) const {
139 base::ThreadRestrictions::AssertIOAllowed();
140 LONG result = RegQueryValueEx(key_, name, 0, NULL, NULL, NULL);
141 return result == ERROR_SUCCESS;
142 }
143
144 LONG RegKey::ReadValue(const wchar_t* name, void* data, DWORD* dsize, 145 LONG RegKey::ReadValue(const wchar_t* name, void* data, DWORD* dsize,
145 DWORD* dtype) const { 146 DWORD* dtype) const {
146 base::ThreadRestrictions::AssertIOAllowed(); 147 base::ThreadRestrictions::AssertIOAllowed();
147 LONG result = RegQueryValueEx(key_, name, 0, dtype, 148 LONG result = RegQueryValueEx(key_, name, 0, dtype,
148 reinterpret_cast<LPBYTE>(data), dsize); 149 reinterpret_cast<LPBYTE>(data), dsize);
149 return result; 150 return result;
150 } 151 }
151 152
152 LONG RegKey::ReadValue(const wchar_t* name, std::wstring* value) const { 153 LONG RegKey::ReadValue(const wchar_t* name, std::wstring* value) const {
153 base::ThreadRestrictions::AssertIOAllowed(); 154 base::ThreadRestrictions::AssertIOAllowed();
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 if (ERROR_SUCCESS == r) 403 if (ERROR_SUCCESS == r)
403 return true; 404 return true;
404 } 405 }
405 406
406 name_[0] = '\0'; 407 name_[0] = '\0';
407 return false; 408 return false;
408 } 409 }
409 410
410 } // namespace win 411 } // namespace win
411 } // namespace base 412 } // namespace base
OLDNEW
« no previous file with comments | « base/win/registry.h ('k') | base/win/registry_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698