| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // All Rights Reserved. | 4 // All Rights Reserved. |
| 5 | 5 |
| 6 #include "base/registry.h" | 6 #include "base/registry.h" |
| 7 | 7 |
| 8 #include <assert.h> | 8 #include <assert.h> |
| 9 #include <shlwapi.h> | 9 #include <shlwapi.h> |
| 10 #include <windows.h> | 10 #include <windows.h> |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 RegistryValueIterator::~RegistryValueIterator() { | 44 RegistryValueIterator::~RegistryValueIterator() { |
| 45 if (key_) | 45 if (key_) |
| 46 ::RegCloseKey(key_); | 46 ::RegCloseKey(key_); |
| 47 } | 47 } |
| 48 | 48 |
| 49 bool RegistryValueIterator::Valid() const { | 49 bool RegistryValueIterator::Valid() const { |
| 50 // true while the iterator is valid | 50 // true while the iterator is valid |
| 51 return key_ != NULL && index_ >= 0; | 51 return key_ != NULL && index_ >= 0; |
| 52 } | 52 } |
| 53 | 53 |
| 54 void RegistryValueIterator::operator ++ () { | 54 void RegistryValueIterator::operator++() { |
| 55 // advance to the next entry in the folder | 55 // advance to the next entry in the folder |
| 56 --index_; | 56 --index_; |
| 57 Read(); | 57 Read(); |
| 58 } | 58 } |
| 59 | 59 |
| 60 bool RegistryValueIterator::Read() { | 60 bool RegistryValueIterator::Read() { |
| 61 if (Valid()) { | 61 if (Valid()) { |
| 62 DWORD ncount = sizeof(name_)/sizeof(*name_); | 62 DWORD ncount = sizeof(name_)/sizeof(*name_); |
| 63 value_size_ = sizeof(value_); | 63 value_size_ = sizeof(value_); |
| 64 LRESULT r = ::RegEnumValue(key_, index_, name_, &ncount, NULL, &type_, | 64 LRESULT r = ::RegEnumValue(key_, index_, name_, &ncount, NULL, &type_, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 RegistryKeyIterator::~RegistryKeyIterator() { | 113 RegistryKeyIterator::~RegistryKeyIterator() { |
| 114 if (key_) | 114 if (key_) |
| 115 ::RegCloseKey(key_); | 115 ::RegCloseKey(key_); |
| 116 } | 116 } |
| 117 | 117 |
| 118 bool RegistryKeyIterator::Valid() const { | 118 bool RegistryKeyIterator::Valid() const { |
| 119 // true while the iterator is valid | 119 // true while the iterator is valid |
| 120 return key_ != NULL && index_ >= 0; | 120 return key_ != NULL && index_ >= 0; |
| 121 } | 121 } |
| 122 | 122 |
| 123 void RegistryKeyIterator::operator ++ () { | 123 void RegistryKeyIterator::operator++() { |
| 124 // advance to the next entry in the folder | 124 // advance to the next entry in the folder |
| 125 --index_; | 125 --index_; |
| 126 Read(); | 126 Read(); |
| 127 } | 127 } |
| 128 | 128 |
| 129 bool RegistryKeyIterator::Read() { | 129 bool RegistryKeyIterator::Read() { |
| 130 if (Valid()) { | 130 if (Valid()) { |
| 131 DWORD ncount = sizeof(name_)/sizeof(*name_); | 131 DWORD ncount = sizeof(name_)/sizeof(*name_); |
| 132 FILETIME written; | 132 FILETIME written; |
| 133 LRESULT r = ::RegEnumKeyEx(key_, index_, name_, &ncount, NULL, NULL, | 133 LRESULT r = ::RegEnumKeyEx(key_, index_, name_, &ncount, NULL, NULL, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 156 // RegKey | 156 // RegKey |
| 157 // | 157 // |
| 158 | 158 |
| 159 RegKey::RegKey(HKEY rootkey, const tchar* subkey, REGSAM access) | 159 RegKey::RegKey(HKEY rootkey, const tchar* subkey, REGSAM access) |
| 160 : key_(NULL), watch_event_(0) { | 160 : key_(NULL), watch_event_(0) { |
| 161 if (rootkey) { | 161 if (rootkey) { |
| 162 if (access & (KEY_SET_VALUE | KEY_CREATE_SUB_KEY | KEY_CREATE_LINK)) | 162 if (access & (KEY_SET_VALUE | KEY_CREATE_SUB_KEY | KEY_CREATE_LINK)) |
| 163 this->Create(rootkey, subkey, access); | 163 this->Create(rootkey, subkey, access); |
| 164 else | 164 else |
| 165 this->Open(rootkey, subkey, access); | 165 this->Open(rootkey, subkey, access); |
| 166 } else { |
| 167 assert(!subkey); |
| 166 } | 168 } |
| 167 else assert(!subkey); | |
| 168 } | 169 } |
| 169 | 170 |
| 170 void RegKey::Close() { | 171 void RegKey::Close() { |
| 171 StopWatching(); | 172 StopWatching(); |
| 172 if (key_) { | 173 if (key_) { |
| 173 ::RegCloseKey(key_); | 174 ::RegCloseKey(key_); |
| 174 key_ = NULL; | 175 key_ = NULL; |
| 175 } | 176 } |
| 176 } | 177 } |
| 177 | 178 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 191 NULL, | 192 NULL, |
| 192 REG_OPTION_NON_VOLATILE, | 193 REG_OPTION_NON_VOLATILE, |
| 193 access, | 194 access, |
| 194 NULL, | 195 NULL, |
| 195 &key_, | 196 &key_, |
| 196 disposition ); | 197 disposition ); |
| 197 if (result != ERROR_SUCCESS) { | 198 if (result != ERROR_SUCCESS) { |
| 198 key_ = NULL; | 199 key_ = NULL; |
| 199 return false; | 200 return false; |
| 200 } | 201 } |
| 201 else return true; | 202 |
| 203 return true; |
| 202 } | 204 } |
| 203 | 205 |
| 204 bool RegKey::Open(HKEY rootkey, const tchar* subkey, REGSAM access) { | 206 bool RegKey::Open(HKEY rootkey, const tchar* subkey, REGSAM access) { |
| 205 assert(rootkey && subkey && access); | 207 assert(rootkey && subkey && access); |
| 206 this->Close(); | 208 this->Close(); |
| 207 | 209 |
| 208 LONG const result = RegOpenKeyEx(rootkey, subkey, 0, | 210 LONG const result = RegOpenKeyEx(rootkey, subkey, 0, |
| 209 access, &key_ ); | 211 access, &key_ ); |
| 210 if (result != ERROR_SUCCESS) { | 212 if (result != ERROR_SUCCESS) { |
| 211 key_ = NULL; | 213 key_ = NULL; |
| 212 return false; | 214 return false; |
| 213 } | 215 } |
| 214 else return true; | 216 |
| 217 return true; |
| 215 } | 218 } |
| 216 | 219 |
| 217 bool RegKey::CreateKey(const tchar* name, REGSAM access) { | 220 bool RegKey::CreateKey(const tchar* name, REGSAM access) { |
| 218 assert(name && access); | 221 assert(name && access); |
| 219 | 222 |
| 220 HKEY subkey = NULL; | 223 HKEY subkey = NULL; |
| 221 LONG const result = RegCreateKeyEx(key_, name, 0, NULL, | 224 LONG const result = RegCreateKeyEx(key_, name, 0, NULL, |
| 222 REG_OPTION_NON_VOLATILE, | 225 REG_OPTION_NON_VOLATILE, |
| 223 access, NULL, &subkey, NULL); | 226 access, NULL, &subkey, NULL); |
| 224 this->Close(); | 227 this->Close(); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 // Fail: other, returns 0 | 293 // Fail: other, returns 0 |
| 291 if (size == 0 || size > kMaxStringLength) | 294 if (size == 0 || size > kMaxStringLength) |
| 292 return false; | 295 return false; |
| 293 *value = expanded; | 296 *value = expanded; |
| 294 } else { | 297 } else { |
| 295 // Not a string. Oops. | 298 // Not a string. Oops. |
| 296 return false; | 299 return false; |
| 297 } | 300 } |
| 298 return true; | 301 return true; |
| 299 } | 302 } |
| 300 else return false; | 303 |
| 304 return false; |
| 301 } | 305 } |
| 302 | 306 |
| 303 bool RegKey::ReadValueDW(const tchar* name, DWORD * value) { | 307 bool RegKey::ReadValueDW(const tchar* name, DWORD * value) { |
| 304 assert(value); | 308 assert(value); |
| 305 DWORD type = REG_DWORD, size = sizeof(DWORD), result = 0; | 309 DWORD type = REG_DWORD, size = sizeof(DWORD), result = 0; |
| 306 if (this->ReadValue(name, &result, &size, &type) | 310 if (this->ReadValue(name, &result, &size, &type) |
| 307 && (type == REG_DWORD || type == REG_BINARY) | 311 && (type == REG_DWORD || type == REG_BINARY) |
| 308 && size == sizeof(DWORD)) { | 312 && size == sizeof(DWORD)) { |
| 309 *value = result; | 313 *value = result; |
| 310 return true; | 314 return true; |
| 311 } | 315 } |
| 312 else return false; | 316 |
| 317 return false; |
| 313 } | 318 } |
| 314 | 319 |
| 315 bool RegKey::WriteValue(const tchar* name, | 320 bool RegKey::WriteValue(const tchar* name, |
| 316 const void * data, | 321 const void * data, |
| 317 DWORD dsize, | 322 DWORD dsize, |
| 318 DWORD dtype) { | 323 DWORD dtype) { |
| 319 assert(data); | 324 assert(data); |
| 320 if (!key_) return false; | 325 if (!key_) return false; |
| 321 HRESULT const result = RegSetValueEx( | 326 HRESULT const result = RegSetValueEx( |
| 322 key_, | 327 key_, |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 ::GetModuleFileName(module, module_path, MAX_PATH); | 413 ::GetModuleFileName(module, module_path, MAX_PATH); |
| 409 _tcslwr_s(module_path, MAX_PATH); | 414 _tcslwr_s(module_path, MAX_PATH); |
| 410 return RegisterCOMServer(guid, name, module_path); | 415 return RegisterCOMServer(guid, name, module_path); |
| 411 } | 416 } |
| 412 | 417 |
| 413 bool UnregisterCOMServer(const tchar* guid) { | 418 bool UnregisterCOMServer(const tchar* guid) { |
| 414 RegKey key(HKEY_CLASSES_ROOT, _T("CLSID"), KEY_WRITE); | 419 RegKey key(HKEY_CLASSES_ROOT, _T("CLSID"), KEY_WRITE); |
| 415 key.DeleteKey(guid); | 420 key.DeleteKey(guid); |
| 416 return true; | 421 return true; |
| 417 } | 422 } |
| OLD | NEW |