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