1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _REGISTRYWNT_HXX_ 25 #define _REGISTRYWNT_HXX_ 26 27 #include "registry.hxx" 28 29 //--------------------------------------- 30 // constants 31 //--------------------------------------- 32 33 class RegistryKeyImplWinNT : public RegistryKeyImpl 34 { 35 public: 36 37 //############################################ 38 // Queries 39 //############################################ 40 41 /** The number of sub values of the key at hand 42 43 @precond IsOpen = true 44 45 @throws 46 */ 47 virtual size_t GetSubValueCount() const; 48 49 /** The number of sub-keys of the key at hand 50 51 @precond IsOpen = true 52 53 @throws 54 */ 55 virtual size_t GetSubKeyCount() const; 56 57 virtual StringListPtr GetSubKeyNames() const; 58 59 virtual StringListPtr GetSubValueNames() const; 60 61 /** Get the specified registry value 62 63 @precond IsOpen = true 64 */ 65 virtual RegistryValue GetValue(const std::wstring& Name) const; 66 67 /** Get the specified registry value, return the given 68 default value if value not found 69 70 @precond IsOpen = true 71 */ 72 virtual RegistryValue GetValue(const std::wstring& Name, const RegistryValue& Default) const; 73 74 //############################################ 75 // Commands 76 //############################################ 77 78 /** Open the registry key, has no effect if 79 the key is already open 80 81 @precond IsOpen = false 82 83 @throws RegistryWriteAccessDenyException 84 RegistryAccessDenyException 85 */ 86 virtual void Open(bool Writeable = true); 87 88 /** Open the specified sub-key of the registry key 89 at hand 90 91 @precond IsOpen = true 92 HasSubKey(Name) = true 93 94 @throws RegistryIOException 95 RegistryKeyNotFoundException 96 RegistryAccessDeniedException 97 */ 98 virtual RegistryKey OpenSubKey(const std::wstring& Name, bool Writeable = true); 99 100 /** Creates a new sub-key below the key at hand 101 102 @precond IsOpen = true 103 IsWriteable = true 104 105 @throws RegistryIOException 106 RegistryWriteAccessDenyException 107 */ 108 virtual RegistryKey CreateSubKey(const std::wstring& Name); 109 110 /** Deletes a sub-key below the key at hand, the 111 key must not have sub-keys 112 113 @precond IsOpen = true 114 IsWriteable = true 115 116 @throws RegistryIOException 117 RegistryWriteAccessDenyException 118 */ 119 virtual void DeleteSubKey(const std::wstring& Name); 120 121 /** Deletes a sub-key below the key at hand with all 122 its sub-keys 123 124 @precond IsOpen = true 125 IsWriteable = true; 126 127 @throws RegistryIOException 128 RegistryWriteAccessDenyException 129 */ 130 virtual void DeleteSubKeyTree(const std::wstring& Name); 131 132 /** Delete the specified value 133 134 @precond IsOpen = true 135 IsWriteable = true 136 HasValue(Name) = true 137 138 @throws RegistryIOException 139 RegistryWriteAccessDeniedException 140 RegistryValueNotFoundException 141 */ 142 virtual void DeleteValue(const std::wstring& Name); 143 144 /** Set the specified registry value 145 146 @precond IsOpen = true 147 IsWriteable = true 148 149 @throws RegistryIOException 150 RegistryWriteAccessDenyException 151 */ 152 virtual void SetValue(const RegistryValue& Value); 153 154 //############################################ 155 // Creation 156 // 157 // only possible through WindowsRegistry class 158 //############################################ 159 160 protected: 161 /** Create instance and open the specified Registry key 162 163 @throws RegistryWriteAccessDenyException 164 RegistryAccessDenyException 165 RegistryKeyNotFoundException 166 */ 167 RegistryKeyImplWinNT(HKEY RootKey, const std::wstring& KeyName); 168 169 /** Create instance and open the specified Registry key 170 171 @throws RegistryWriteAccessDenyException 172 RegistryAccessDenyException 173 RegistryKeyNotFoundException 174 */ 175 RegistryKeyImplWinNT(HKEY RootKey); 176 177 /** Create an instances of the specified Registry key, 178 the key is assumed to be already opened. 179 */ 180 RegistryKeyImplWinNT(HKEY RootKey, HKEY SubKey, const std::wstring& KeyName, bool Writeable = true); 181 182 private: 183 184 LONG ImplDeleteSubKeyTree(HKEY RootKey, const std::wstring& Name); 185 186 //prevent copy and assignment 187 private: 188 RegistryKeyImplWinNT(const RegistryKeyImplWinNT&); 189 RegistryKeyImplWinNT& operator=(const RegistryKeyImplWinNT&); 190 191 //###################################### 192 // Friend declarations 193 //###################################### 194 195 friend class WindowsRegistry; 196 }; 197 198 #endif 199