626 lines
24 KiB
C++
626 lines
24 KiB
C++
// ==========================================================================
|
|
// Class Specification : COXRegistryItem
|
|
// ==========================================================================
|
|
|
|
// Header file : OXRegistryItem.h
|
|
|
|
// Version: 9.3
|
|
|
|
|
|
// //////////////////////////////////////////////////////////////////////////
|
|
|
|
// Properties:
|
|
// NO Abstract class (does not have any objects)
|
|
// YES Derived from CObject
|
|
|
|
// NO Is a Cwnd.
|
|
// NO Two stage creation (constructor & Create())
|
|
// NO Has a message map
|
|
// NO Needs a resource (template)
|
|
|
|
// NO Persistent objects (saveable on disk)
|
|
// NO Uses exceptions
|
|
|
|
// //////////////////////////////////////////////////////////////////////////
|
|
|
|
// Desciption :
|
|
// This class encapsulates a registry item : a registry key or a registry value.
|
|
// A registry item can be specified in one string, much like a UNC for a file.
|
|
// A registry key always begins and ends with a backslash (e.g. "\Software\)
|
|
// A value name does not end in a backslash ("\Software\Test").
|
|
// When no root registry is specified "CurrentUser" is used. You can specify
|
|
// the root registry in front of the key ("\CurrentUser\Software\")
|
|
// Possible values are "\ClassesRoot", "\CurrentUser", "\LocalMachine", "\Users",
|
|
// "\PerformanceData", "\CurrentConfig" or "\DynData"
|
|
// To address a remote computer prefix the registry item with the computer name
|
|
// (e.g. "\\Comp1\LocalMachine\Software\")
|
|
|
|
// Remark:
|
|
|
|
// Prerequisites (necessary conditions):
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __OXREGISTRYITEM_H__
|
|
#define __OXREGISTRYITEM_H__
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
#include "OXDllExt.h"
|
|
|
|
|
|
class OX_CLASS_DECL COXRegistryItem : public CObject
|
|
{
|
|
DECLARE_DYNAMIC(COXRegistryItem);
|
|
|
|
// Data members -------------------------------------------------------------
|
|
public:
|
|
static const LPCTSTR m_pszClassesRoot;
|
|
// --- The constant string "\ClassesRoot"
|
|
static const LPCTSTR m_pszCurrentUser;
|
|
// --- The constant string "\CurrentUser"
|
|
static const LPCTSTR m_pszLocalMachine;
|
|
// --- The constant string "\LocalMachine"
|
|
static const LPCTSTR m_pszUsers;
|
|
// --- The constant string "\Users"
|
|
static const LPCTSTR m_pszPerformanceData;
|
|
// --- The constant string "\PerformanceData"
|
|
static const LPCTSTR m_pszCurrentConfig;
|
|
// --- The constant string "\CurrentConfig"
|
|
static const LPCTSTR m_pszDynData;
|
|
// --- The constant string "\DynData"
|
|
|
|
static const LPCTSTR m_pszNoName;
|
|
// --- The constant string "NoName"
|
|
|
|
protected:
|
|
CString m_sFullRegistryItem;
|
|
BOOL m_bMainBuilt;
|
|
|
|
CString m_sMachineName;
|
|
CString m_sRegistryName;
|
|
CString m_sKeyNames;
|
|
CString m_sValueName;
|
|
BOOL m_bPartsBuilt;
|
|
|
|
HKEY m_hRootKey;
|
|
HKEY m_hKey;
|
|
HRESULT m_nLastError;
|
|
|
|
static const TCHAR m_cNull;
|
|
static const TCHAR m_cBackslash;
|
|
static const TCHAR m_cBar;
|
|
static const LPCTSTR m_pszBackslash;
|
|
static const LPCTSTR m_pszDoubleBackslash;
|
|
static const LPCTSTR m_pszBar;
|
|
static const LPCTSTR m_pszSoftware;
|
|
static LPCTSTR m_pszUnknownCompanyName;
|
|
static LPCTSTR m_pszUnknownApplicationName;
|
|
|
|
struct COXRootRegistryKey
|
|
{
|
|
LPCTSTR m_pszRegistryName;
|
|
HKEY m_hRegistryKey;
|
|
};
|
|
static COXRootRegistryKey m_rgRootRegistryKey[];
|
|
|
|
private:
|
|
|
|
// Member functions ---------------------------------------------------------
|
|
public:
|
|
COXRegistryItem(LPCTSTR pszFullRegistryItem = NULL);
|
|
// --- In : pszFullRegistryItem : Initial full registry item
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Constructs the object
|
|
|
|
COXRegistryItem(const COXRegistryItem& registryItem);
|
|
// --- In : registryItem : source object
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Copy constructor
|
|
// Note that possible open handles are not copied
|
|
|
|
COXRegistryItem& operator=(const COXRegistryItem& registryItem);
|
|
// --- In : registryItem : source object
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Assignment operator
|
|
// Note that possible open handles are not copied
|
|
|
|
|
|
// Access functions
|
|
|
|
|
|
CString GetFullRegistryItem();
|
|
CString GetMachineName();
|
|
CString GetRegistryName();
|
|
CString GetKeyNames();
|
|
CString GetValueName();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : The requested part
|
|
// --- Effect :
|
|
|
|
void SetFullRegistryItem(LPCTSTR pszFullRegistryItem);
|
|
void SetMachineName(LPCTSTR pszMachineName);
|
|
void SetRegistryName(LPCTSTR pszRegistryName);
|
|
void SetKeyNames(LPCTSTR pszKeyNames);
|
|
void SetValueName(LPCTSTR pszValueName);
|
|
// --- In : ...
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Sets the requested part
|
|
// Use "NoName" (m_pszNoName) to reference a value with a name
|
|
|
|
void InitializeFromApplication(LPCTSTR pszSubkeyName = NULL);
|
|
// --- In : pszSubkeyName : The name of a subkey (NULL if no subkey will be used)
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Initializes this object to
|
|
// "\Software\<pszCompany>\<pszApplication>\<pszSubkeyName>\"
|
|
// with <pszCompany> : AfxGetApp()->m_pszRegistryKey
|
|
// <pszApplication> : AfxGetApp()->m_pszProfileName
|
|
// <pszSubkeyName> : The specified subkey (may be empty)
|
|
// The company name can be set through CWinApp::SetRegistryKey()
|
|
// and then the application will be filled out as well
|
|
// (by derivng it from the executable name)
|
|
|
|
void Empty();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Clears the entire objects (and closes a possible open key)
|
|
|
|
BOOL IsEmpty();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : Whether this registry specification is empty
|
|
// --- Effect :
|
|
|
|
virtual void Serialize(CArchive& ar);
|
|
// --- In : ar : Archive used in serialization
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Serializes the object
|
|
|
|
HRESULT GetLastError() const;
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : The last error code
|
|
// --- Effect :
|
|
|
|
void SetLastError(HRESULT nLastError);
|
|
// --- In : nLastError : The new last error code
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect :
|
|
|
|
|
|
// Actions
|
|
|
|
|
|
BOOL Open(BOOL bCreate = TRUE, REGSAM samDesired = KEY_ALL_ACCESS,
|
|
LPCTSTR pszClass = NULL, DWORD dwOptions = REG_OPTION_NON_VOLATILE,
|
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes = NULL, LPDWORD pdwDisposition = NULL);
|
|
// --- In : bCreate : Whether to create the key if it does not exist
|
|
// samDesired : Desired security access
|
|
// (Possible values are KEY_ALL_ACCESS, KEY_CREATE_LINK, KEY_CREATE_SUB_KEY,
|
|
// KEY_ENUMERATE_SUB_KEYS, KEY_EXECUTE, KEY_NOTIFY, KEY_QUERY_VALUE, KEY_READ,
|
|
// KEY_SET_VALUE, KEY_WRITE)
|
|
// pszClass : Class name
|
|
// dwOptions : Spzcial options
|
|
// (Possible values are REG_OPTION_NON_VOLATILE, REG_OPTION_VOLATILE,
|
|
// REG_OPTION_BACKUP_RESTORE);
|
|
// lpSecurityAttributes = Security structure
|
|
// pdwDisposition : Pointer to value receiving the disposition value
|
|
// (REG_CREATED_NEW_KEY or REG_OPENED_EXISTING_KEY)
|
|
// --- Out :
|
|
// --- Returns : Whether it succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Opens (and if requested creates) a registry key
|
|
|
|
BOOL IsOpen() const;
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : Whether it key is currently opnened
|
|
// --- Effect :
|
|
|
|
BOOL Delete();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : Whether it succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Deletes this registry item (key or value)
|
|
// Values without a name should have the name "NoName" (m_pszNoName)
|
|
|
|
BOOL GetSecurity(SECURITY_INFORMATION SecurityInformation,
|
|
PSECURITY_DESCRIPTOR pSecurityDescriptor, LPDWORD pcbSecurityDescriptor);
|
|
// --- In : SecurityInformation : The requested security information
|
|
// pSecurityDescriptor : Buffer that will receive the requested info
|
|
// pcbSecurityDescriptor : Length of the buffer
|
|
// --- Out : pSecurityDescriptor : Buffer that received the requested info
|
|
// pcbSecurityDescriptor : Number of bytes written in the buffer
|
|
// or needed size when failed with ERROR_INSUFFICIENT_BUFFER
|
|
// --- Returns : Whether it succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Retrieves a copy of the security descriptor protecting this registry key.
|
|
|
|
BOOL SetSecurity(SECURITY_INFORMATION SecurityInformation,
|
|
PSECURITY_DESCRIPTOR pSecurityDescriptor);
|
|
// --- In : SecurityInformation : The new security information
|
|
// pSecurityDescriptor : The security descriptor to set
|
|
// --- Out :
|
|
// --- Returns : Whether it succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Sets the security descriptor protecting this registry key.
|
|
|
|
BOOL Flush();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : Whether it succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Writes all changes to the key to registry now
|
|
// The function only returns after all the changes have been written
|
|
|
|
BOOL Close();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : Whether it succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Closes the registry key (if still open)
|
|
|
|
|
|
// Values
|
|
|
|
CString GetStringValue(LPCTSTR pszValueName = NULL, BOOL bAllowUnexpanded = TRUE,
|
|
BOOL bAutoExpand = TRUE, CString sDefault = _T(""));
|
|
// --- In : pszValueName : (Optional) The name of the value
|
|
// bAllowUnexpanded : Whether the type REG_EXPAND_SZ is allowed as well
|
|
// bAutoExpand : Whether the string should expand REG_EXPAND_SZ values
|
|
// sDefault : default value that will be returned in a case registry
|
|
// item wasn't found
|
|
// --- Out :
|
|
// --- Returns : The string value (or an empty value in case of error)
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Get a string value
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
CString GetMultiStringValue(LPCTSTR pszValueName = NULL, CString sDefault = _T(""));
|
|
// --- In : pszValueName : (Optional) The name of the value
|
|
// sDefault : default value that will be returned in a case registry
|
|
// item wasn't found
|
|
// --- Out :
|
|
// --- Returns : The multi string value (or an empty value in case of error)
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Get a multi-string value
|
|
// The different parts are seperated by a bar '|'
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
BOOL GetMultiStringValue(CStringArray& stringArray, LPCTSTR pszValueName = NULL);
|
|
// --- In : pszValueName : (Optional) The name of the value
|
|
// --- Out : stringArray
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Get a multi-string value
|
|
// The array is emptied prior to adding new values
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
DWORD GetNumberValue(LPCTSTR pszValueName = NULL, BOOL bLittleEndian = TRUE,
|
|
DWORD dwDefault = 0);
|
|
// --- In : pszValueName : (Optional) The name of the value
|
|
// bLittleEndian : Whether the type of the numebr should be Little Endian
|
|
// (Intel) or Big Endian
|
|
// dwDefault : default value that will be returned in a case registry
|
|
// item wasn't found
|
|
// --- Out :
|
|
// --- Returns : The number value (or 0 in case of error)
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Get a number value
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
BOOL GetBinaryValue(CByteArray& binaryValue, LPCTSTR pszValueName = NULL);
|
|
// --- In : pszValueName : (Optional) The name of the value
|
|
// --- Out : binaryValue
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Get a binary value
|
|
// The array is emptied prior to adding new values
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
BOOL SetStringValue(LPCTSTR pszNewStringValue, LPCTSTR pszValueName = NULL, BOOL bUnexpanded = FALSE);
|
|
// --- In : pszNewStringValue : The new value
|
|
// pszValueName : (Optional) The name of the value
|
|
// bUnexpanded : Whether the value is a normal REG_SZ value or not
|
|
// --- Out :
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Sets a new string value
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
BOOL SetMultiStringValue(LPCTSTR pszNewMultiStringValue, LPCTSTR pszValueName = NULL);
|
|
// --- In : pszNewMultiStringValue : The new value
|
|
// pszValueName : (Optional) The name of the value
|
|
// --- Out :
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Sets a new multi string value
|
|
// The different parts should be seperated by a bar '|'
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
BOOL SetMultiStringValue(const CStringArray& stringArray, LPCTSTR pszValueName = NULL);
|
|
// --- In : stringArray : The new value
|
|
// pszValueName : (Optional) The name of the value
|
|
// --- Out :
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Sets a new multi string value
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
BOOL SetNumberValue(DWORD nNewNumberValue, LPCTSTR pszValueName = NULL, BOOL bLittleEndian = TRUE);
|
|
// --- In : nNewNumberValue : The new value
|
|
// pszValueName : (Optional) The name of the value
|
|
// bLittleEndian : Whether the type of the numebr should be Little Endian
|
|
// (Intel) or Big Endian
|
|
// --- Out :
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Sets a new number value
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
BOOL SetBinaryValue(const CByteArray& newBinaryValue, LPCTSTR pszValueName = NULL);
|
|
// --- In : newBinaryValue : The new value
|
|
// pszValueName : (Optional) The name of the value
|
|
// --- Out :
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Sets a new binary value
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
DWORD GetValueSize(LPCTSTR pszValueName = NULL);
|
|
// --- In : pszValueName : (Optional) The name of the value
|
|
// --- Out :
|
|
// --- Returns : The size of the value (or 0 when failed)
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Gets the size of a value
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
DWORD GetValueType(LPCTSTR pszValueName = NULL);
|
|
// --- In : pszValueName : (Optional) The name of the value
|
|
// --- Out :
|
|
// --- Returns : The type of the value (or REG_NONE when failed)
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Gets the type of a value
|
|
// When no value name is specified, the value name of this object is used
|
|
// Possible types are :
|
|
// REG_NONE, REG_SZ, REG_EXPAND_SZ, REG_BINARY, REG_DWORD_LITTLE_ENDIAN
|
|
// (=REG_DWORD), REG_DWORD_BIG_ENDIAN, REG_LINK, REG_MULTI_SZ,
|
|
// REG_RESOURCE_LIST
|
|
|
|
BOOL GetValue(LPBYTE* ppData, LPCTSTR pszValueName = NULL, DWORD nRequestedType = 0,
|
|
LPDWORD pnType = NULL, LPDWORD pnSize = NULL);
|
|
// --- In : ppData : Pointer to LPBYTE that will receive the address of the data
|
|
// pszValueName : (Optional) The name of the value
|
|
// nRequestedType : The type of the value that it must have
|
|
// for this function to succeed (0 = all types allowed)
|
|
// pnType : Pointer to a variable that will get the type
|
|
// pnSize : Pointer to a variable that will get the size in bytes
|
|
// --- Out : ppData : Points to LPBYTE that points to the data if successful
|
|
// pnType : The type of the value if successful
|
|
// pnSize : The size in bytes if successful
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Get a generic value
|
|
// The caller should call delete[] to destroy the returned byte buffer
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
BOOL SetValue(LPCTSTR pszValueName, const BYTE* pData, DWORD nType, DWORD nSize);
|
|
// --- In : pszValueName : (Optional) The name of the value
|
|
// pData : The new value (should not be NULL)
|
|
// nType : The type
|
|
// nSize : The size of pData in bytes
|
|
// --- Out :
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Sets a generic value
|
|
// When no value name is specified, the value name of this object is used
|
|
|
|
static CString ExpandString(LPCTSTR pszUnexpanded);
|
|
// --- In : pszUnexpanded : The unexpanded string containing references to
|
|
// environment variables (e.g. %path%)
|
|
// --- Out :
|
|
// --- Returns : The expanded string value or empty when the function failed
|
|
// --- Effect : Expands environment-variable strings and
|
|
// replaces them with their defined values.
|
|
|
|
BOOL GetInfo(LPTSTR pClass, LPDWORD pcbClass = NULL, LPDWORD pcSubKeys = NULL,
|
|
LPDWORD pcbMaxSubKeyLen = NULL, LPDWORD pcbMaxClassLen = NULL,
|
|
LPDWORD pcValues = NULL, LPDWORD pcbMaxValueNameLen = NULL,
|
|
LPDWORD pcbMaxValueLen = NULL, LPDWORD pcbSecurityDescriptor = NULL,
|
|
PFILETIME lpftLastWriteTime = NULL);
|
|
// --- In : pClass : Pointer to string that will receive the class name
|
|
// pcbClass : Pointer to number that specifies the number of characters in pClass
|
|
// pcSubKeys : Pointer to variable that will receive a number
|
|
// pcbMaxSubKeyLen : Pointer to variable that will receive a number
|
|
// pcbMaxClassLen : Pointer to variable that will receive a number
|
|
// pcValues : Pointer to variable that will receive a number
|
|
// pcbMaxValueNameLen : Pointer to variable that will receive a number
|
|
// pcbMaxValueLen : Pointer to variable that will receive a number
|
|
// pcbSecurityDescriptor : Pointer to variable that will receive a number
|
|
// lpftLastWriteTime : Pointer to variable that will receive the last write time
|
|
// --- Out : pClass : The class name of the key
|
|
// pcbClass : The number of characters in the class name (exclusing termination null)
|
|
// pcSubKeys : Number of subkeys
|
|
// pcbMaxSubKeyLen : Longest subkey name length
|
|
// pcbMaxClassLen : Longest class name length
|
|
// pcValues : Number of values
|
|
// pcbMaxValueNameLen : Longest valua name length
|
|
// pcbMaxValueLen : Longest value
|
|
// pcbSecurityDescriptor : The security descriptor length
|
|
// lpftLastWriteTime : The last write time
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Retrieves information about the key
|
|
// For information that is not needed NULL may be specified
|
|
|
|
CString GetClassName();
|
|
int GetNumberOfSubkeys();
|
|
int GetLongestSubkeyNameLength();
|
|
int GetLongestClassNameLength();
|
|
int GetNumberOfValues();
|
|
int GetLongestValueNameLength();
|
|
int GetLongestValueDataLength();
|
|
int GetSecurityDescriptorLength();
|
|
CTime GetLastWriteTime();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : The requested value (or an empty string or -1 in case of error)
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect :
|
|
|
|
|
|
// Notification
|
|
|
|
|
|
BOOL NotifyChange(BOOL bWatchSubtree = FALSE,
|
|
DWORD dwNotifyFilter = REG_NOTIFY_CHANGE_NAME, HANDLE hEvent = NULL);
|
|
// --- In : bWatchSubtree : Whether to report changes in this key and all of
|
|
// its subkeys (TRUE) or only in this key (FALSE)
|
|
// dwNotifyFilter : The changes which should be reported (REG_NOTIFY_CHANGE_NAME,
|
|
// REG_NOTIFY_CHANGE_ATTRIBUTES, REG_NOTIFY_CHANGE_LAST_SET,
|
|
// REG_NOTIFY_CHANGE_SECURITY)
|
|
// hEvent : Event used in asynchronous signalling or NULL otherwise
|
|
// --- Out :
|
|
// --- Returns : Whether the operation succeeded or not
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Notifies the caller about changes to the attributes or contents
|
|
// of the key.
|
|
// Note that the function does not notify the caller if the key is deleted.
|
|
// When this function is used synchrnously (hEvent == NULL), the function
|
|
// will only return when the specified situation occurs
|
|
|
|
|
|
// Key handles
|
|
|
|
|
|
HKEY GetRootKey() const;
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : The current value of the root key
|
|
// --- Effect : This should not be stored for later use, because subsequent functions
|
|
// may change (e.g. Close) this handle
|
|
|
|
HKEY GetKey() const;
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : The current value of the registry key
|
|
// --- Effect : This should not be stored for later use, because subsequent functions
|
|
// may change (e.g. Close) this handle
|
|
|
|
|
|
// Enumeration
|
|
// (Note : Enumeration is much simplier when you use COXIteratorRegistryItem)
|
|
|
|
CString EnumerateSubkey(DWORD nIndex);
|
|
// --- In : nIndex : Zero-based index of the subkey that is reuqested
|
|
// --- Out :
|
|
// --- Returns : The name of the subkey (if successful, otherwise empty)
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Retrieves the name of the specified subkey
|
|
// It is advised to use COXIteratorRegistryItem for enumeration
|
|
|
|
CString EnumerateValue(DWORD nIndex);
|
|
// --- In : nIndex : Zero-based index of the value that is reuqested
|
|
// --- Out :
|
|
// --- Returns : The name of the value (if successful)
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Retrieves the name of the specified value
|
|
// It is advised to use COXIteratorRegistryItem for enumeration
|
|
// Values without a name are given the name "NoName" (m_pszNoName)
|
|
|
|
BOOL GetSortedValueList(CStringArray& arrValueName);
|
|
// --- In : arrValueName : reference to string array that will be populated
|
|
// value names in alphabetical order
|
|
// --- Out :
|
|
// --- Returns: TRUE if successful, or FALSE otherwise (See GetLastError()
|
|
// for more detailed error code upon failure)
|
|
// --- Effect : Retrieves the names of all key values in alphabetical order.
|
|
// Values without a name are given the name "NoName" (m_pszNoName)
|
|
// and will be put on the top of the array
|
|
|
|
BOOL IsDefaultValueSet();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns: TRUE if default value of current key is set
|
|
// or FALSE otherwise (if successful).
|
|
// See GetLastError() for more detailed error code upon failure
|
|
// --- Effect : Retrieves the flag that ppecifies whether current key default
|
|
// value is set or not.
|
|
|
|
|
|
#ifdef _DEBUG
|
|
virtual void AssertValid() const;
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : AssertValid performs a validity check on this object
|
|
// by checking its internal state.
|
|
// In the Debug version of the library, AssertValid may assert and
|
|
// thus terminate the program.
|
|
|
|
virtual void Dump(CDumpContext& dc) const;
|
|
// --- In : dc : The diagnostic dump context for dumping, usually afxDump.
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Dumps the contents of the object to a CDumpContext object.
|
|
// It provides diagnostic services for yourself and
|
|
// other users of your class.
|
|
// Note The Dump function does not print a newline character
|
|
// at the end of its output.
|
|
#endif
|
|
|
|
virtual ~COXRegistryItem();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Destructor of the object
|
|
|
|
protected:
|
|
void BuildMain();
|
|
void BuildParts();
|
|
void AdjustMain();
|
|
void AdjustParts();
|
|
|
|
void SetMainBuilt();
|
|
void SetPartsBuilt();
|
|
void DestroyMain();
|
|
void DestroyParts();
|
|
BOOL IsMainBuilt() const;
|
|
BOOL ArePartsBuilt() const;
|
|
|
|
HRESULT HResultFromWin32(int nWin32Error) const;
|
|
|
|
BOOL OpenRootKey();
|
|
void CloseKey();
|
|
void CloseRootKey();
|
|
|
|
static int GetRegistryIndex(LPCTSTR pszRegistryName);
|
|
static void NullToBarSeparator(LPTSTR pStringData);
|
|
static void BarToNullSeparator(LPTSTR pStringData);
|
|
|
|
#ifdef _DEBUG
|
|
static CString GetResultMessage(HRESULT hResult);
|
|
#endif // _DEBUG
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
// Include inline functions
|
|
#include "OXRegistryItem.inl"
|
|
|
|
#endif // __OXREGISTRYITEM_H__
|
|
// ==========================================================================
|