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

Unified Diff: base/reg_key.h

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/reactor_unittest.cc ('k') | base/reg_key.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/reg_key.h
diff --git a/base/reg_key.h b/base/reg_key.h
deleted file mode 100644
index 295df98728ef79843509f81cd9e1cafa471e0685..0000000000000000000000000000000000000000
--- a/base/reg_key.h
+++ /dev/null
@@ -1,787 +0,0 @@
-// Copyright 2003-2009 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// ========================================================================
-//
-// reg_key.h
-//
-// Registry configuration wrappers class
-//
-// Offers static functions for convenient
-// fast access for individual values
-//
-// Also provides a wrapper class for efficient
-// batch operations on values of a given registry key.
-
-#ifndef OMAHA_BASE_REG_KEY_H_
-#define OMAHA_BASE_REG_KEY_H_
-
-#include <windows.h>
-#include <vector>
-#include "base/basictypes.h"
-#include "base/scoped_ptr.h"
-#include "omaha/base/debug.h"
-#include "omaha/base/logging.h"
-#include "omaha/base/scoped_any.h"
-#include "omaha/base/static_assert.h"
-#include "omaha/base/store_watcher.h"
-
-namespace omaha {
-
-// maximum sizes registry key and value names
-#define kMaxKeyNameChars (255 + 1)
-#define kMaxValueNameChars (16383 + 1)
-
-class RegKey {
- public:
- RegKey();
- virtual ~RegKey();
-
- // create a reg key
- HRESULT Create(HKEY hKeyParent, const TCHAR * key_name,
- TCHAR * reg_class = REG_NONE, DWORD options = REG_OPTION_NON_VOLATILE,
- REGSAM sam_desired = KEY_ALL_ACCESS,
- LPSECURITY_ATTRIBUTES lp_sec_attr = NULL,
- LPDWORD lp_disposition = NULL);
-
- // create a reg key, given the full key name, including the HKEY root
- // (say for example, "HKLM\\Software")
- HRESULT Create(const TCHAR * full_key_name,
- TCHAR * reg_class = REG_NONE, DWORD options = REG_OPTION_NON_VOLATILE,
- REGSAM sam_desired = KEY_ALL_ACCESS,
- LPSECURITY_ATTRIBUTES lp_sec_attr = NULL,
- LPDWORD lp_disposition = NULL);
-
- // static helper function that create a set of reg keys,
- // given an array of full key names including the HKEY root
- // (say for example, "HKLM\\Software")
- static HRESULT CreateKeys(const TCHAR* keys_to_create[],
- DWORD number_of_keys,
- TCHAR* reg_class = REG_NONE,
- DWORD options = REG_OPTION_NON_VOLATILE,
- LPSECURITY_ATTRIBUTES lp_sec_attr = NULL);
-
- // Static method to create a single key.
- static HRESULT CreateKey(const TCHAR * full_key_name,
- TCHAR * reg_class = REG_NONE,
- DWORD options = REG_OPTION_NON_VOLATILE,
- LPSECURITY_ATTRIBUTES lp_sec_attr = NULL);
-
- // open an existing reg key
- HRESULT Open(HKEY hKeyParent,
- const TCHAR * key_name,
- REGSAM sam_desired = KEY_ALL_ACCESS);
-
- // open an existing reg key, given the full key name, including the HKEY root
- // (say for example, "HKLM\\Software")
- HRESULT Open(const TCHAR * full_key_name,
- REGSAM sam_desired = KEY_ALL_ACCESS);
-
- // close this reg key
- virtual HRESULT Close();
-
- // check if the key has a specified value
- bool HasValue(const TCHAR * value_name);
-
- // get the number of values for this key
- uint32 GetValueCount();
-
- // Called to get the value name for the given value name index
- // Use GetValueCount() to get the total value_name count for this key
- // Returns failure if no key at the specified index
- // If you modify the key while enumerating, the indexes will be out of order.
- // Since the index order is not guaranteed, you need to reset your counting
- // loop.
- // type refers to REG_DWORD, REG_QWORD, etc..
- // 'type' can be NULL if not interested in the value type
- HRESULT GetValueNameAt(int index, CString * value_name, DWORD *type);
-
- // check if the current key has the specified subkey
- bool HasSubkey(const TCHAR * key_name) const;
-
- // get the number of subkeys for this key
- uint32 GetSubkeyCount();
-
- // Called to get the key name for the given key index
- // Use GetSubkeyCount() to get the total count for this key
- // Returns failure if no key at the specified index
- // If you modify the key while enumerating, the indexes will be out of order.
- // Since the index order is not guaranteed, you need to reset your counting
- // loop.
- HRESULT GetSubkeyNameAt(int index, CString * key_name);
-
- // SETTERS
-
- // set an int32 value - use when reading multiple values from a key
- HRESULT SetValue(const TCHAR * value_name, DWORD value) const;
-
- // set an int64 value
- HRESULT SetValue(const TCHAR * value_name, DWORD64 value) const;
-
- // set a string value
- HRESULT SetValue(const TCHAR * value_name, const TCHAR * value) const;
-
- // set binary data
- HRESULT SetValue(const TCHAR * value_name,
- const byte * value,
- DWORD byte_count) const;
-
- // set raw data, including type
- HRESULT SetValue(const TCHAR * value_name,
- const byte * value,
- DWORD byte_count,
- DWORD type) const;
-
- // GETTERS
-
- // get type of a registry value
- HRESULT GetValueType(const TCHAR* value_name, DWORD* value_type) const;
-
- // get an int32 value
- HRESULT GetValue(const TCHAR * value_name, DWORD * value) const;
-
- // get an int64 value
- //
- // Note: if you are using time64 you should
- // likely use GetLimitedTimeValue (util.h) instead of this method.
- HRESULT GetValue(const TCHAR * value_name, DWORD64 * value) const;
-
- // get a string value - the caller must free the return buffer
- HRESULT GetValue(const TCHAR * value_name, TCHAR * * value) const;
-
- // get a CString value
- HRESULT GetValue(const TCHAR* value_name, OUT CString* value) const;
-
- // get a vector<CString> value from REG_MULTI_SZ type
- HRESULT GetValue(const TCHAR * value_name,
- std::vector<CString> * value) const;
-
- // get binary data - the caller must free the return buffer
- HRESULT GetValue(const TCHAR * value_name,
- byte * * value,
- DWORD * byte_count) const;
-
- // get raw data, including type - the caller must free the return buffer
- HRESULT GetValue(const TCHAR * value_name,
- byte * * value,
- DWORD * byte_count,
- DWORD *type) const;
-
- // RENAMERS
-
- // Rename a named value.
- HRESULT RenameValue(const TCHAR * old_value_name,
- const TCHAR * new_value_name) const;
-
- // STATIC VERSIONS
-
- // flush
- static HRESULT FlushKey(const TCHAR * full_key_name);
-
- // Check if a key exists.
- static bool HasKey(const TCHAR * full_key_name);
-
- // Check if a key exists in the native (i.e. non-redirected) registry.
- static bool HasNativeKey(const TCHAR * full_key_name);
-
- // check if the key has a specified value
- static bool HasValue(const TCHAR * full_key_name, const TCHAR * value_name);
-
- // SETTERS
-
- // STATIC int32 set
- static HRESULT SetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- DWORD value);
-
- // STATIC int64 set
- static HRESULT SetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- DWORD64 value);
-
- // STATIC float set
- static HRESULT SetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- float value);
-
- // STATIC double set
- static HRESULT SetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- double value);
-
- // STATIC string set
- static HRESULT SetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- const TCHAR * value);
-
- // STATIC binary data set
- static HRESULT SetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- const byte * value,
- DWORD byte_count);
-
- // STATIC array of strings set
- static HRESULT SetValueMultiSZ(const TCHAR * full_key_name,
- const TCHAR * value_name,
- const byte * value,
- DWORD byte_count);
-
- // STATIC expandable string set
- static HRESULT SetValueExpandSZ(const TCHAR * full_key_name,
- const TCHAR * value_name,
- const TCHAR * value);
-
- // GETTERS
-
- // STATIC int32 get
- static HRESULT GetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- DWORD * value);
-
- // STATIC int64 get
- //
- // Note: if you are using time64 you should
- // likely use GetLimitedTimeValue (util.h) instead of this method.
- static HRESULT GetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- DWORD64 * value);
-
- // STATIC float get
- static HRESULT GetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- float * value);
-
- // STATIC double get
- static HRESULT GetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- double * value);
-
- // STATIC string get (STR and CString versions) - the caller must free
- // the return buffer
- static HRESULT GetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- TCHAR * * value);
-
- static HRESULT GetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- CString * value);
-
- // STATIC REG_MULTI_SZ get
- static HRESULT GetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- std::vector<CString> * value);
-
- // STATIC get binary data - the caller must free the return buffer
- static HRESULT GetValue(const TCHAR * full_key_name,
- const TCHAR * value_name,
- byte * * value,
- DWORD * byte_count);
-
- // Try reg keys successively if there is a failure in getting a value.
- //
- // Typically used when there is a user value and a default value if the
- // user has none.
- template<typename T>
- static HRESULT GetValue(const TCHAR * full_key_names[],
- int key_names_length,
- const TCHAR * value_name,
- T* value);
-
- // RENAMERS
-
- // Rename a named value.
- static HRESULT RenameValue(const TCHAR * full_key_name,
- const TCHAR * old_value_name,
- const TCHAR * new_value_name);
-
- // COPIERS
-
- // The full_to_key must exist for CopyValue to succeed.
- static HRESULT CopyValue(const TCHAR * full_from_key_name,
- const TCHAR * from_value_name,
- const TCHAR * full_to_key_name,
- const TCHAR * to_value_name);
-
- static HRESULT CopyValue(const TCHAR * full_from_key_name,
- const TCHAR * full_to_key_name,
- const TCHAR * value_name);
-
- // Get type of a registry value
- static HRESULT GetValueType(const TCHAR* full_key_name,
- const TCHAR* value_name,
- DWORD* value_type);
-
- // delete a subkey of the current key (with no subkeys)
- HRESULT DeleteSubKey(const TCHAR * key_name);
-
- // recursively delete a sub key of the current key (and all its subkeys)
- HRESULT RecurseDeleteSubKey(const TCHAR * key_name);
-
- // STATIC version of delete key - handles nested keys also
- // delete a key and all its sub-keys recursively
- // Returns S_FALSE if key didn't exist, S_OK if deletion was successful,
- // and failure otherwise.
- static HRESULT DeleteKey(const TCHAR* full_key_name);
-
- // STATIC version of delete key
- // delete a key recursively or non-recursively
- // Returns S_FALSE if key didn't exist, S_OK if deletion was successful,
- // and failure otherwise.
- static HRESULT DeleteKey(const TCHAR* full_key_name, bool recursive);
-
- // delete the specified value
- HRESULT DeleteValue(const TCHAR * value_name) const;
-
- // STATIC version of delete value
- // Returns S_FALSE if key didn't exist, S_OK if deletion was successful,
- // and failure otherwise.
- static HRESULT DeleteValue(const TCHAR * full_key_name,
- const TCHAR * value_name);
-
- // Peek inside (use a RegKey as a smart wrapper around a registry handle)
- HKEY Key() { return h_key_; }
-
- // Used to help test the private functionality
- friend class RegKeyTestClass;
-
- // helper function to get the HKEY and the root key from a string
- // representation modifies the argument in place and returns the key name
- // e.g. HKLM\\Software\\Google\... returns HKLM, "Software\\Google\..."
- // Necessary for the static versions that use the full name of the reg key
- static HKEY GetRootKeyInfo(CString * full_key_name);
-
- // Returns true if this key name is 'safe' for deletion (doesn't specify
- // a key root)
- static bool SafeKeyNameForDeletion(const wchar_t *key_name);
-
- // save the key and all of its subkeys and values to a file
- static HRESULT Save(const TCHAR* full_key_name, const TCHAR* file_name);
-
- // restore the key and all of its subkeys and values which are saved into
- // a file
- static HRESULT Restore(const TCHAR* full_key_name, const TCHAR* file_name);
-
- // Is the key empty: having no sub-keys and values
- static bool IsKeyEmpty(const TCHAR* full_key_name);
-
- private:
-
- // Helper function to check if a key exists, using the sam flags specified.
- // Note: KEY_READ must be included in sam_flags.
- static bool HasKeyHelper(const TCHAR * full_key_name, DWORD sam_flags);
-
- // helper function to get the parent key name and the subkey from a string
- // representation modifies the argument in place and returns the key name
- // e.g. Software\\Google\\Foo_Bar returns "Software\\Google", "Foo_Bar"
- // Necessary for the static versions that use the full name of the reg key
- static CString GetParentKeyInfo(CString * key_name);
-
- // helper function to get any value from the registry
- // used when the size of the data is unknown
- HRESULT GetValueHelper(const TCHAR * value_name,
- DWORD * type,
- byte * * value,
- DWORD * byte_count) const;
-
- // common SET Helper for the static case
- static HRESULT SetValueStaticHelper(const TCHAR * full_key_name,
- const TCHAR * value_name,
- DWORD type,
- LPVOID value,
- DWORD byte_count = 0);
-
- // common GET Helper for the static case
- static HRESULT GetValueStaticHelper(const TCHAR * full_key_name,
- const TCHAR * value_name,
- DWORD type,
- LPVOID value,
- DWORD * byte_count = NULL);
-
- // convert REG_MULTI_SZ bytes to string array
- static HRESULT MultiSZBytesToStringArray(const byte * buffer,
- DWORD byte_count,
- std::vector<CString> * value);
-
- // set a string or expandable string value
- HRESULT SetStringValue(const TCHAR * value_name,
- const TCHAR * value,
- DWORD type) const;
-
- // the HKEY for the current key
- HKEY h_key_;
-
- DISALLOW_EVIL_CONSTRUCTORS(RegKey);
-};
-
-// Provides all the functionality of RegKey plus
-// an event to watch for changes to the registry key.
-class RegKeyWithChangeEvent : public RegKey {
- public:
- RegKeyWithChangeEvent() {}
- // close this reg key and the event
- virtual HRESULT Close();
-
- // Called to create/reset the event that gets signaled
- // any time the registry key changes. Access the created
- // event using change_event().
- //
- // See the documentation for RegNotifyChangeKeyValue
- // for values for notify_filter.
- HRESULT SetupEvent(bool watch_subtree, DWORD notify_filter);
-
- // Indicates if any changes (that are being monitored) have occured
- bool HasChangeOccurred() const;
-
- // Get the event that is signaled on registry changes.
- // Note:
- // * This event will remain constant until Close() is called.
- // * One should call SetupEvent to set-up the event.
- // * The event is only signaled on the next change and remains signaled.
- // Do not call ::ResetEvent(). Call SetupEvent() to reset
- // the event and wait for more changes.
- HANDLE change_event() const {
- return get(change_event_);
- }
-
- private:
- scoped_handle change_event_;
- DISALLOW_EVIL_CONSTRUCTORS(RegKeyWithChangeEvent);
-};
-
-// Does the common things necessary for watching
-// registry key changes. If there are file change or other watchers,
-// there could be a common interface for the three methods to decouple
-// the code that is doing the watching from the code that owns the store.
-class RegKeyWatcher : public StoreWatcher {
- public:
- // reg_key: the full string for the reg key
- // watch_subtree: watch all subkey changes or
- // only immediate child values
- // notify_filter: See the documentation for RegNotifyChangeKeyValue
- // allow_creation: Should the key be created if it doesn't exist?
- RegKeyWatcher(const TCHAR* reg_key, bool watch_subtree,
- DWORD notify_filter, bool allow_creation);
- virtual ~RegKeyWatcher() {}
-
- // Called to create/reset the event that gets signaled
- // any time the registry key changes. Access the created
- // event using change_event().
- virtual HRESULT EnsureEventSetup();
-
- // Get the event that is signaled on registry changes.
- virtual HANDLE change_event() const;
-
- private:
- // Used to do the SetupEvent method
- scoped_ptr<RegKeyWithChangeEvent> reg_key_with_change_event_;
-
- CString reg_key_string_;
- bool watch_subtree_;
- bool allow_creation_;
- DWORD notify_filter_;
- DISALLOW_EVIL_CONSTRUCTORS(RegKeyWatcher);
-};
-
-
-inline RegKey::RegKey() { h_key_ = NULL; }
-
-inline RegKey::~RegKey() { Close(); }
-
-inline bool RegKey::HasValue(const TCHAR* value_name) {
- return (ERROR_SUCCESS == ::RegQueryValueEx(h_key_,
- value_name,
- NULL, NULL,
- NULL,
- NULL));
-}
-
-// SETTERS static versions
-inline HRESULT RegKey::SetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- DWORD value) {
- ASSERT1(full_key_name);
-
- return SetValueStaticHelper(full_key_name, value_name, REG_DWORD, &value);
-}
-
-inline HRESULT RegKey::SetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- DWORD64 value) {
- ASSERT1(full_key_name);
-
- return SetValueStaticHelper(full_key_name, value_name, REG_QWORD, &value);
-}
-
-inline HRESULT RegKey::SetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- float value) {
- ASSERT1(full_key_name);
-
- return SetValueStaticHelper(full_key_name,
- value_name,
- REG_BINARY,
- &value,
- sizeof(value));
-}
-
-inline HRESULT RegKey::SetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- double value) {
- ASSERT1(full_key_name);
-
- return SetValueStaticHelper(full_key_name,
- value_name,
- REG_BINARY,
- &value,
- sizeof(value));
-}
-
-inline HRESULT RegKey::SetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- const TCHAR* value) {
- ASSERT1(full_key_name);
- ASSERT1(value);
-
- return SetValueStaticHelper(full_key_name,
- value_name,
- REG_SZ,
- const_cast<TCHAR*>(value));
-}
-
-inline HRESULT RegKey::SetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- const byte* value,
- DWORD byte_count) {
- ASSERT1(full_key_name);
-
- return SetValueStaticHelper(full_key_name, value_name, REG_BINARY,
- const_cast<byte*>(value), byte_count);
-}
-
-inline HRESULT RegKey::SetValueMultiSZ(const TCHAR* full_key_name,
- const TCHAR* value_name,
- const byte* value,
- DWORD byte_count) {
- ASSERT1(full_key_name);
-
- return SetValueStaticHelper(full_key_name, value_name, REG_MULTI_SZ,
- const_cast<byte*>(value), byte_count);
-}
-
-inline HRESULT RegKey::SetValueExpandSZ(const TCHAR* full_key_name,
- const TCHAR* value_name,
- const TCHAR* value) {
- ASSERT1(full_key_name);
- ASSERT1(value);
-
- return SetValueStaticHelper(full_key_name,
- value_name,
- REG_EXPAND_SZ,
- const_cast<TCHAR*>(value));
-}
-
-// GETTERS static versions
-inline HRESULT RegKey::GetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- DWORD* value) {
- ASSERT1(full_key_name);
- ASSERT1(value);
-
- return GetValueStaticHelper(full_key_name, value_name, REG_DWORD, value);
-}
-
-inline HRESULT RegKey::GetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- DWORD64* value) {
- ASSERT1(full_key_name);
- ASSERT1(value);
-
- return GetValueStaticHelper(full_key_name, value_name, REG_QWORD, value);
-}
-
-inline HRESULT RegKey::GetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- float* value) {
- ASSERT1(value);
- ASSERT1(value_name);
- ASSERT1(full_key_name);
-
- DWORD byte_count = 0;
- byte* buffer = NULL;
- HRESULT hr = GetValueStaticHelper(full_key_name,
- value_name,
- REG_BINARY,
- &buffer,
- &byte_count);
- scoped_array<byte> free_buffer(buffer);
-
- if (SUCCEEDED(hr)) {
- if (byte_count == sizeof(*value)) {
- ::CopyMemory(value, buffer, sizeof(*value));
- } else {
- UTIL_LOG(LEVEL_ERROR, (_T("[RegKey::GetValue]")
- _T("[size mismatches for float value][%s\\%s]"),
- full_key_name, value_name));
- return HRESULT_FROM_WIN32(ERROR_DATATYPE_MISMATCH);
- }
- }
-
- return hr;
-}
-
-inline HRESULT RegKey::GetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- double* value) {
- ASSERT1(value);
- ASSERT1(value_name);
- ASSERT1(full_key_name);
-
- DWORD byte_count = 0;
- byte* buffer = NULL;
- HRESULT hr = GetValueStaticHelper(full_key_name,
- value_name,
- REG_BINARY,
- &buffer,
- &byte_count);
- scoped_array<byte> free_buffer(buffer);
-
- if (SUCCEEDED(hr)) {
- if (byte_count == sizeof(*value)) {
- ::CopyMemory(value, buffer, sizeof(*value));
- } else {
- UTIL_LOG(LEVEL_ERROR, (_T("[RegKey::GetValue]")
- _T("[size mismatches for double value][%s\\%s]"),
- full_key_name, value_name));
- return HRESULT_FROM_WIN32(ERROR_DATATYPE_MISMATCH);
- }
- }
-
- return hr;
-}
-
-inline HRESULT RegKey::GetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- TCHAR** value) {
- ASSERT1(full_key_name);
- ASSERT1(value);
-
- return GetValueStaticHelper(full_key_name, value_name, REG_SZ, value);
-}
-
-inline HRESULT RegKey::GetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- CString* value) {
- ASSERT1(full_key_name);
- ASSERT1(value);
-
- TCHAR* buffer = NULL;
- HRESULT hr = RegKey::GetValue(full_key_name, value_name, &buffer);
- value->SetString(buffer);
- delete [] buffer;
- return hr;
-}
-
-inline HRESULT RegKey::GetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- std::vector<CString>* value) {
- ASSERT1(full_key_name);
- ASSERT1(value);
-
- return GetValueStaticHelper(full_key_name, value_name, REG_MULTI_SZ, value);
-}
-
-inline HRESULT RegKey::GetValue(const TCHAR* full_key_name,
- const TCHAR* value_name,
- byte** value,
- DWORD* byte_count) {
- ASSERT1(full_key_name);
- ASSERT1(value);
- ASSERT1(byte_count);
-
- return GetValueStaticHelper(full_key_name,
- value_name,
- REG_BINARY,
- value,
- byte_count);
-}
-
-template<typename T>
-HRESULT RegKey::GetValue(const TCHAR* full_key_names[],
- int key_names_length,
- const TCHAR* value_name,
- T* value) {
- HRESULT hr = S_OK;
- for (int i = 0; i < key_names_length; ++i) {
- hr = GetValue(full_key_names[i], value_name, value);
- if (SUCCEEDED(hr)) {
- return hr;
- }
- }
- return hr;
-}
-
-// Rename a named value.
-inline HRESULT RegKey::RenameValue(const TCHAR * full_key_name,
- const TCHAR * old_value_name,
- const TCHAR * new_value_name) {
- ASSERT1(full_key_name);
-
- RegKey reg_key;
- HRESULT hr = reg_key.Open(full_key_name);
- if (FAILED(hr)) {
- return hr;
- }
-
- return reg_key.RenameValue(old_value_name, new_value_name);
-}
-
-inline HRESULT RegKey::CopyValue(const TCHAR * full_from_key_name,
- const TCHAR * full_to_key_name,
- const TCHAR * value_name) {
- return CopyValue(full_from_key_name,
- value_name,
- full_to_key_name,
- value_name);
-}
-
-// DELETE
-inline HRESULT RegKey::DeleteSubKey(const TCHAR* key_name) {
- ASSERT1(key_name);
- ASSERT1(h_key_);
-
- LONG res = ::RegDeleteKey(h_key_, key_name);
- HRESULT hr = HRESULT_FROM_WIN32(res);
- if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) ||
- hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)) {
- hr = S_FALSE;
- }
- return hr;
-}
-
-inline HRESULT RegKey::DeleteValue(const TCHAR* value_name) const {
- ASSERT1(value_name);
- ASSERT1(h_key_);
-
- LONG res = ::RegDeleteValue(h_key_, value_name);
- HRESULT hr = HRESULT_FROM_WIN32(res);
- if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) ||
- hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)) {
- hr = S_FALSE;
- }
- return hr;
-}
-
-} // namespace omaha
-
-#endif // OMAHA_BASE_REG_KEY_H_
-
« no previous file with comments | « base/reactor_unittest.cc ('k') | base/reg_key.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698