#include "wreg.h" class CRegistryW : public IRegistryW { public: // IUnknown methods STDMETHODIMP QueryInterface(REFIID iid, void **ppvObj); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // can this method be supported STDMETHODIMP_(LONG) ConnectRegistry ( LPWSTR lpMachineName, HKEY hKey, IRegistryW **ppReg ); STDMETHODIMP_(LONG) CloseKey ( HKEY hKey ); STDMETHODIMP_(LONG) CreateKey ( HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult ); STDMETHODIMP_(LONG) CreateKeyEx ( HKEY hKey, LPCWSTR lpSubKey, DWORD Reserved, LPWSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition ); STDMETHODIMP_(LONG) DeleteKey ( HKEY hKey, LPCWSTR lpSubKey ); STDMETHODIMP_(LONG) DeleteValue ( HKEY hKey, LPCWSTR lpValueName ); STDMETHODIMP_(LONG) EnumKey ( HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName ); STDMETHODIMP_(LONG) EnumKeyEx ( HKEY hKey, DWORD dwIndex, LPWSTR lpName, LPDWORD lpcbName, LPDWORD lpReserved, LPWSTR lpClass, LPDWORD lpcbClass, PFILETIME lpftLastWriteTime ); STDMETHODIMP_(LONG) EnumValue ( HKEY hKey, DWORD dwIndex, LPWSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ); STDMETHODIMP_(LONG) FlushKey ( HKEY hKey ); STDMETHODIMP_(LONG) GetKeySecurity ( HKEY hKey, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor, LPDWORD lpcbSecurityDescriptor ); STDMETHODIMP_(LONG) LoadKey ( HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpFile ); STDMETHODIMP_(LONG) NotifyChangeKeyValue ( HKEY hKey, BOOL bWatchSubtree, DWORD dwNotifyFilter, HANDLE hEvent, BOOL fAsynchronus ); STDMETHODIMP_(LONG) OpenKey ( HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult ); STDMETHODIMP_(LONG) OpenKeyEx ( HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult ); STDMETHODIMP_(LONG) QueryInfoKey ( HKEY hKey, LPWSTR lpClass, LPDWORD lpcbClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcbMaxSubKeyLen, LPDWORD lpcbMaxClassLen, LPDWORD lpcValues, LPDWORD lpcbMaxValueNameLen, LPDWORD lpcbMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime ); STDMETHODIMP_(LONG) QueryValue ( HKEY hKey, LPCWSTR lpSubKey, LPWSTR lpValue, LONG *lpcbValue ); STDMETHODIMP_(LONG) QueryMultipleValues ( HKEY hKey, PVALENTXW val_list, DWORD num_vals, LPWSTR lpValueBuf, LPDWORD ldwTotsize ); STDMETHODIMP_(LONG) QueryValueEx ( HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ); STDMETHODIMP_(LONG) ReplaceKey ( HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpNewFile, LPCWSTR lpOldFile ); STDMETHODIMP_(LONG) RestoreKey ( HKEY hKey, LPCWSTR lpFile, DWORD dwFlags ); STDMETHODIMP_(LONG) SaveKey ( HKEY hKey, LPCWSTR lpFile, LPSECURITY_ATTRIBUTES lpSecurityAttributes ); STDMETHODIMP_(LONG) SetKeySecurity ( HKEY hKey, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor ); STDMETHODIMP_(LONG) SetValue ( HKEY hKey, LPCWSTR lpSubKey, DWORD dwType, LPCWSTR lpData, DWORD cbData ); STDMETHODIMP_(LONG) SetValueEx ( HKEY hKey, LPCWSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE* lpData, DWORD cbData ); STDMETHODIMP_(LONG) UnLoadKey ( HKEY hKey, LPCWSTR lpSubKey ); public: private: CRefCount _CRefs; // the total refcount of this object }; class CRegistryA : public IRegistryA { public: // IUnknown methods STDMETHODIMP QueryInterface(REFIID iid, void **ppvObj); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // can this method be supported STDMETHODIMP_(LONG) ConnectRegistry ( LPSTR lpMachineName, HKEY hKey, IRegistryA **ppReg ); STDMETHODIMP_(LONG) CloseKey ( HKEY hKey ); STDMETHODIMP_(LONG) CreateKey ( HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult ); STDMETHODIMP_(LONG) CreateKeyEx ( HKEY hKey, LPCSTR lpSubKey, DWORD Reserved, LPSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition ); STDMETHODIMP_(LONG) DeleteKey ( HKEY hKey, LPCSTR lpSubKey ); STDMETHODIMP_(LONG) DeleteValue ( HKEY hKey, LPCSTR lpValueName ); STDMETHODIMP_(LONG) EnumKey ( HKEY hKey, DWORD dwIndex, LPSTR lpName, DWORD cbName ); STDMETHODIMP_(LONG) EnumKeyEx ( HKEY hKey, DWORD dwIndex, LPSTR lpName, LPDWORD lpcbName, LPDWORD lpReserved, LPSTR lpClass, LPDWORD lpcbClass, PFILETIME lpftLastWriteTime ); STDMETHODIMP_(LONG) EnumValue ( HKEY hKey, DWORD dwIndex, LPSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ); STDMETHODIMP_(LONG) FlushKey ( HKEY hKey ); STDMETHODIMP_(LONG) GetKeySecurity ( HKEY hKey, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor, LPDWORD lpcbSecurityDescriptor ); STDMETHODIMP_(LONG) LoadKey ( HKEY hKey, LPCSTR lpSubKey, LPCSTR lpFile ); STDMETHODIMP_(LONG) NotifyChangeKeyValue ( HKEY hKey, BOOL bWatchSubtree, DWORD dwNotifyFilter, HANDLE hEvent, BOOL fAsynchronus ); STDMETHODIMP_(LONG) OpenKey ( HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult ); STDMETHODIMP_(LONG) OpenKeyEx ( HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult ); STDMETHODIMP_(LONG) QueryInfoKey ( HKEY hKey, LPSTR lpClass, LPDWORD lpcbClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcbMaxSubKeyLen, LPDWORD lpcbMaxClassLen, LPDWORD lpcValues, LPDWORD lpcbMaxValueNameLen, LPDWORD lpcbMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime ); STDMETHODIMP_(LONG) QueryValue ( HKEY hKey, LPCSTR lpSubKey, LPSTR lpValue, LONG *lpcbValue ); STDMETHODIMP_(LONG) QueryMultipleValues ( HKEY hKey, PVALENTXA val_list, DWORD num_vals, LPSTR lpValueBuf, LPDWORD ldwTotsize ); STDMETHODIMP_(LONG) QueryValueEx ( HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ); STDMETHODIMP_(LONG) ReplaceKey ( HKEY hKey, LPCSTR lpSubKey, LPCSTR lpNewFile, LPCSTR lpOldFile ); STDMETHODIMP_(LONG) RestoreKey ( HKEY hKey, LPCSTR lpFile, DWORD dwFlags ); STDMETHODIMP_(LONG) SaveKey ( HKEY hKey, LPCSTR lpFile, LPSECURITY_ATTRIBUTES lpSecurityAttributes ); STDMETHODIMP_(LONG) SetKeySecurity ( HKEY hKey, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor ); STDMETHODIMP_(LONG) SetValue ( HKEY hKey, LPCSTR lpSubKey, DWORD dwType, LPCSTR lpData, DWORD cbData ); STDMETHODIMP_(LONG) SetValueEx ( HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE* lpData, DWORD cbData ); STDMETHODIMP_(LONG) UnLoadKey ( HKEY hKey, LPCSTR lpSubKey ); public: private: CRefCount _CRefs; // the total refcount of this object };