2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 #include <afs/param.h>
20 * DEFINITIONS ________________________________________________________________
24 #define SETTINGS_KW TEXT("Settings")
25 #define PREFERENCES_KW TEXT("Preferences")
26 #define SERVICES_KW TEXT("Services")
27 #define AGGREGATES_KW TEXT("Aggregates")
28 #define FILESETS_KW TEXT("Filesets")
29 #define SUBSETS_KW TEXT("Server Subsets")
33 * ROUTINES ___________________________________________________________________
37 BOOL GetPreferencesInfo (LPIDENT lpi, LPTSTR pszPath, WORD *pwVer)
42 // HKCU\Software\...\SVRMgr + \CellName
44 lstrcpy (pszPath, REGSTR_SETTINGS_PREFS);
45 lstrcat (pszPath, TEXT("\\"));
46 lpi->GetCellName (&pszPath[ lstrlen(pszPath) ]);
48 // HKCU\Software\...\SVRMgr\CellName + \ServerName
50 lstrcat (pszPath, TEXT("\\"));
51 lpi->GetLongServerName (&pszPath[ lstrlen(pszPath) ]);
53 *pwVer = wVerSERVER_PREF;
55 if (lpi->fIsService())
57 // HKCU\Software\...\SVRMgr\CellName\ServerName + \Services\ServiceName
59 lstrcat (pszPath, TEXT("\\"));
60 lstrcat (pszPath, SERVICES_KW);
61 lstrcat (pszPath, TEXT("\\"));
62 lpi->GetServiceName (&pszPath[ lstrlen(pszPath) ]);
63 *pwVer = wVerSERVICE_PREF;
65 else if (lpi->fIsAggregate())
67 // HKCU\Software\...\SVRMgr\CellName\ServerName + \Aggs\AggregateName
69 lstrcat (pszPath, TEXT("\\"));
70 lstrcat (pszPath, AGGREGATES_KW);
71 lstrcat (pszPath, TEXT("\\"));
72 lpi->GetAggregateName (&pszPath[ lstrlen(pszPath) ]);
73 *pwVer = wVerAGGREGATE_PREF;
75 else if (lpi->fIsFileset())
77 // HKCU\Software\...\SVRMgr\CellName\ServerName + \Filesets\FilesetName
79 lstrcat (pszPath, TEXT("\\"));
80 lstrcat (pszPath, FILESETS_KW);
81 lstrcat (pszPath, TEXT("\\"));
82 lpi->GetFilesetName (&pszPath[ lstrlen(pszPath) ]);
83 *pwVer = wVerFILESET_PREF;
90 BOOL RestorePreferences (LPIDENT lpi, void *pData, size_t cbData)
92 TCHAR szPath[ MAX_PATH ];
95 if (!GetPreferencesInfo (lpi, szPath, &wVer))
98 return RestoreSettings (REGSTR_SETTINGS_BASE, szPath, SETTINGS_KW, pData, cbData, wVer);
102 BOOL StorePreferences (LPIDENT lpi, void *pData, size_t cbData)
104 TCHAR szPath[ MAX_PATH ];
107 if (!GetPreferencesInfo (lpi, szPath, &wVer))
110 return StoreSettings (REGSTR_SETTINGS_BASE, szPath, SETTINGS_KW, pData, cbData, wVer);
114 void ErasePreferences (LPTSTR pszCell, LPTSTR pszServer)
116 BOOL fWildcard = FALSE;
119 // HKCU\Software\...\SVRMgr
121 TCHAR szPath[ MAX_PATH ];
122 lstrcpy (szPath, REGSTR_SETTINGS_PATH);
125 pszDelete = PREFERENCES_KW;
128 lstrcat (szPath, TEXT("\\"));
129 lstrcat (szPath, PREFERENCES_KW);
135 lstrcat (szPath, TEXT("\\"));
136 lstrcat (szPath, pszCell);
137 pszDelete = pszServer;
143 if (RegOpenKey (HKCU, szPath, &hk) == 0)
147 RegDeltreeKey (hk, pszDelete);
151 TCHAR szFound[ MAX_PATH ];
152 for (int ii = 0; RegEnumKey (hk, ii, szFound, MAX_PATH) == 0; ++ii)
154 if (lstrncmpi (szFound, pszDelete, lstrlen(pszDelete)))
157 if (RegDeltreeKey (hk, szFound))
158 ii = -1; // restart search
167 HKEY OpenSubsetsKey (LPTSTR pszCell, BOOL fCreate)
169 return OpenSubsetsSubKey (pszCell, NULL, fCreate);
173 HKEY OpenSubsetsSubKey (LPTSTR pszCell, LPTSTR pszSubset, BOOL fCreate)
175 // HKCU\Software\...\SVRMgr + \CellName
177 TCHAR szPath[ MAX_PATH ];
178 lstrcpy (szPath, REGSTR_SETTINGS_PREFS);
179 lstrcat (szPath, TEXT("\\"));
182 lstrcat (szPath, pszCell);
184 g.lpiCell->GetCellName (&szPath[ lstrlen(szPath) ]);
186 // HKCU\Software\...\SVRMgr\CellName + \"Server Subsets"
188 lstrcat (szPath, TEXT("\\"));
189 lstrcat (szPath, SUBSETS_KW);
191 // HKCU\Software\...\SVRMgr\CellName + \"Server Subsets" + \Subset
195 lstrcat (szPath, TEXT("\\"));
196 lstrcat (szPath, pszSubset);
199 // Open or create that key.
205 if (pszSubset) // destroy and recreate a subset key?
206 RegDeleteKey (HKCU, szPath);
207 if (fCreate != 2) // okay, ugly hack: pass 2 to just delete the key
209 if (RegCreateKey (HKCU, szPath, &hk) != 0)
215 if (RegOpenKey (HKCU, szPath, &hk) != 0)