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
14 #include <afs/param.h>
23 * DEFINITIONS ________________________________________________________________
27 #define SETTINGS_KW TEXT("Settings")
28 #define PREFERENCES_KW TEXT("Preferences")
29 #define SERVICES_KW TEXT("Services")
30 #define AGGREGATES_KW TEXT("Aggregates")
31 #define FILESETS_KW TEXT("Filesets")
32 #define SUBSETS_KW TEXT("Server Subsets")
36 * ROUTINES ___________________________________________________________________
40 BOOL GetPreferencesInfo (LPIDENT lpi, LPTSTR pszPath, WORD *pwVer)
45 // HKCU\Software\...\SVRMgr + \CellName
47 lstrcpy (pszPath, REGSTR_SETTINGS_PREFS);
48 lstrcat (pszPath, TEXT("\\"));
49 lpi->GetCellName (&pszPath[ lstrlen(pszPath) ]);
51 // HKCU\Software\...\SVRMgr\CellName + \ServerName
53 lstrcat (pszPath, TEXT("\\"));
54 lpi->GetLongServerName (&pszPath[ lstrlen(pszPath) ]);
56 *pwVer = wVerSERVER_PREF;
58 if (lpi->fIsService())
60 // HKCU\Software\...\SVRMgr\CellName\ServerName + \Services\ServiceName
62 lstrcat (pszPath, TEXT("\\"));
63 lstrcat (pszPath, SERVICES_KW);
64 lstrcat (pszPath, TEXT("\\"));
65 lpi->GetServiceName (&pszPath[ lstrlen(pszPath) ]);
66 *pwVer = wVerSERVICE_PREF;
68 else if (lpi->fIsAggregate())
70 // HKCU\Software\...\SVRMgr\CellName\ServerName + \Aggs\AggregateName
72 lstrcat (pszPath, TEXT("\\"));
73 lstrcat (pszPath, AGGREGATES_KW);
74 lstrcat (pszPath, TEXT("\\"));
75 lpi->GetAggregateName (&pszPath[ lstrlen(pszPath) ]);
76 *pwVer = wVerAGGREGATE_PREF;
78 else if (lpi->fIsFileset())
80 // HKCU\Software\...\SVRMgr\CellName\ServerName + \Filesets\FilesetName
82 lstrcat (pszPath, TEXT("\\"));
83 lstrcat (pszPath, FILESETS_KW);
84 lstrcat (pszPath, TEXT("\\"));
85 lpi->GetFilesetName (&pszPath[ lstrlen(pszPath) ]);
86 *pwVer = wVerFILESET_PREF;
93 BOOL RestorePreferences (LPIDENT lpi, void *pData, size_t cbData)
95 TCHAR szPath[ MAX_PATH ];
98 if (!GetPreferencesInfo (lpi, szPath, &wVer))
101 return RestoreSettings (REGSTR_SETTINGS_BASE, szPath, SETTINGS_KW, pData, cbData, wVer);
105 BOOL StorePreferences (LPIDENT lpi, void *pData, size_t cbData)
107 TCHAR szPath[ MAX_PATH ];
110 if (!GetPreferencesInfo (lpi, szPath, &wVer))
113 return StoreSettings (REGSTR_SETTINGS_BASE, szPath, SETTINGS_KW, pData, cbData, wVer);
117 void ErasePreferences (LPTSTR pszCell, LPTSTR pszServer)
119 BOOL fWildcard = FALSE;
122 // HKCU\Software\...\SVRMgr
124 TCHAR szPath[ MAX_PATH ];
125 lstrcpy (szPath, REGSTR_SETTINGS_PATH);
128 pszDelete = PREFERENCES_KW;
131 lstrcat (szPath, TEXT("\\"));
132 lstrcat (szPath, PREFERENCES_KW);
138 lstrcat (szPath, TEXT("\\"));
139 lstrcat (szPath, pszCell);
140 pszDelete = pszServer;
146 if (RegOpenKey (HKCU, szPath, &hk) == 0)
150 RegDeltreeKey (hk, pszDelete);
154 TCHAR szFound[ MAX_PATH ];
155 for (int ii = 0; RegEnumKey (hk, ii, szFound, MAX_PATH) == 0; ++ii)
157 if (lstrncmpi (szFound, pszDelete, lstrlen(pszDelete)))
160 if (RegDeltreeKey (hk, szFound))
161 ii = -1; // restart search
170 HKEY OpenSubsetsKey (LPTSTR pszCell, BOOL fCreate)
172 return OpenSubsetsSubKey (pszCell, NULL, fCreate);
176 HKEY OpenSubsetsSubKey (LPTSTR pszCell, LPTSTR pszSubset, BOOL fCreate)
178 // HKCU\Software\...\SVRMgr + \CellName
180 TCHAR szPath[ MAX_PATH ];
181 lstrcpy (szPath, REGSTR_SETTINGS_PREFS);
182 lstrcat (szPath, TEXT("\\"));
185 lstrcat (szPath, pszCell);
187 g.lpiCell->GetCellName (&szPath[ lstrlen(szPath) ]);
189 // HKCU\Software\...\SVRMgr\CellName + \"Server Subsets"
191 lstrcat (szPath, TEXT("\\"));
192 lstrcat (szPath, SUBSETS_KW);
194 // HKCU\Software\...\SVRMgr\CellName + \"Server Subsets" + \Subset
198 lstrcat (szPath, TEXT("\\"));
199 lstrcat (szPath, pszSubset);
202 // Open or create that key.
208 if (pszSubset) // destroy and recreate a subset key?
209 RegDeleteKey (HKCU, szPath);
210 if (fCreate != 2) // okay, ugly hack: pass 2 to just delete the key
212 if (RegCreateKey (HKCU, szPath, &hk) != 0)
218 if (RegOpenKey (HKCU, szPath, &hk) != 0)