Windows: conditionally set tray icon state
[openafs.git] / src / WINNT / client_config / RegistrySupport.cpp
1 /*det
2  * Configuration Read/Modify Functions ________________________________________
3  *
4  * Temporarily these just modify the local Registry.
5  * In the near future, they will modify the Registry on the
6  * gateway, if a gateway is being used.
7  *
8  */
9
10 #include <windows.h>
11 #include <winsock2.h>
12 #include <ws2tcpip.h>
13
14 #include <tchar.h>
15 //#include <ctype.h>
16 #include <stdlib.h>
17 #include <drivemap.h>
18 #include <WINNT\afsreg.h>
19
20 BOOL Config_ReadString (LPCTSTR pszLHS, LPTSTR pszRHS, size_t cchMax);
21
22 /*
23  * REGISTRY ___________________________________________________________________
24  *
25  */
26
27 void Config_GetGlobalDriveList (DRIVEMAPLIST *pDriveList)
28 {
29    // Read the GlobalAutoMapper registry key
30    TCHAR szDriveToMapTo[5];
31    DWORD dwResult;
32    TCHAR szKeyName[256];
33    HKEY hKey;
34    DWORD dwIndex = 0;
35    DWORD dwDriveSize;
36    DWORD dwSubMountSize;
37    TCHAR szSubMount[256];
38    DWORD dwType;
39
40    if (!pDriveList)
41       return;
42
43    memset(pDriveList, 0, sizeof(DRIVEMAPLIST));
44
45    lstrcpy(szKeyName, TEXT(AFSREG_CLT_SVC_PARAM_SUBKEY));
46    lstrcat(szKeyName, TEXT("\\GlobalAutoMapper"));
47
48    dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKeyName, 0, KEY_QUERY_VALUE, &hKey);
49    if (dwResult != ERROR_SUCCESS)
50       return;
51
52    // Get the drive map list so we can lookup the paths that go with our submounts
53         DRIVEMAPLIST DriveMapList;
54    memset(&DriveMapList, 0, sizeof(DRIVEMAPLIST));
55    QueryDriveMapList (&DriveMapList);
56
57    while (1) {
58       dwDriveSize = sizeof(szDriveToMapTo);
59       dwSubMountSize = sizeof(szSubMount);
60       
61       dwResult = RegEnumValue(hKey, dwIndex++, szDriveToMapTo, &dwDriveSize, 0, &dwType, (BYTE*)szSubMount, &dwSubMountSize);
62       if (dwResult != ERROR_SUCCESS)
63          break;
64       
65       szDriveToMapTo[0] = _totupper(szDriveToMapTo[0]);
66         
67       int nCurDrive = szDriveToMapTo[0] - TEXT('A');
68         
69       pDriveList->aDriveMap[nCurDrive].chDrive = szDriveToMapTo[0];
70       lstrcpy(pDriveList->aDriveMap[nCurDrive].szSubmount, szSubMount);
71
72       // Find the path that goes with this submount
73       SubmountToPath (&DriveMapList, pDriveList->aDriveMap[nCurDrive].szMapping, szSubMount, FALSE);
74    }        
75
76    FreeDriveMapList(&DriveMapList);
77
78    RegCloseKey(hKey);
79 }
80
81 BOOL Config_ReadGlobalNum (LPCTSTR pszLHS, DWORD *pdwRHS)
82 {
83    HKEY hk;
84    if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, TEXT(AFSREG_CLT_SVC_PARAM_SUBKEY), 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS)
85       return FALSE;
86
87    DWORD dwSize = sizeof(*pdwRHS);
88    if (RegQueryValueEx (hk, pszLHS, NULL, NULL, (PBYTE)pdwRHS, &dwSize) != ERROR_SUCCESS)
89       {
90       RegCloseKey (hk);
91       return FALSE;
92       }
93
94    RegCloseKey (hk);
95    return TRUE;
96 }
97
98
99 BOOL Config_ReadGlobalString (LPCTSTR pszLHS, LPTSTR pszRHS, size_t cchMax)
100 {
101    HKEY hk;
102    if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, TEXT(AFSREG_CLT_SVC_PARAM_SUBKEY), 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS)
103       return FALSE;
104
105    DWORD dwSize = sizeof(TCHAR) * cchMax;
106    if (RegQueryValueEx (hk, pszLHS, NULL, NULL, (PBYTE)pszRHS, &dwSize) != ERROR_SUCCESS)
107       {
108       RegCloseKey (hk);
109       return FALSE;
110       }
111
112    RegCloseKey (hk);
113    return TRUE;
114 }
115
116
117 void Config_WriteGlobalNum (LPCTSTR pszLHS, DWORD dwRHS)
118 {
119    HKEY hk;
120    DWORD dwDisp;
121    if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, TEXT(AFSREG_CLT_SVC_PARAM_SUBKEY), 0, TEXT("container"), 0, KEY_SET_VALUE, NULL, &hk, &dwDisp) == ERROR_SUCCESS)
122       {
123       RegSetValueEx (hk, pszLHS, NULL, REG_DWORD, (PBYTE)&dwRHS, sizeof(dwRHS));
124       RegCloseKey (hk);
125       }
126 }
127
128
129 void Config_WriteGlobalString (LPCTSTR pszLHS, LPCTSTR pszRHS)
130 {
131    HKEY hk;
132    DWORD dwDisp;
133    if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, TEXT(AFSREG_CLT_SVC_PARAM_SUBKEY), 0, TEXT("container"), 0, KEY_SET_VALUE, NULL, &hk, &dwDisp) == ERROR_SUCCESS)
134       {
135       RegSetValueEx (hk, pszLHS, NULL, REG_SZ, (PBYTE)pszRHS, sizeof(TCHAR) * (1+lstrlen(pszRHS)));
136       RegCloseKey (hk);
137       }
138 }
139
140
141 BOOL Config_ReadUserNum (LPCTSTR pszLHS, DWORD *pdwRHS)
142 {
143    HKEY hk;
144     if (RegOpenKeyEx (HKEY_CURRENT_USER, TEXT(AFSREG_USER_OPENAFS_SUBKEY), 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS)
145         if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, TEXT(AFSREG_CLT_OPENAFS_SUBKEY), 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS)
146             return FALSE;
147
148    DWORD dwSize = sizeof(*pdwRHS);
149    if (RegQueryValueEx (hk, pszLHS, NULL, NULL, (PBYTE)pdwRHS, &dwSize) != ERROR_SUCCESS)
150       {
151       RegCloseKey (hk);
152       return FALSE;
153       }
154
155    RegCloseKey (hk);
156    return TRUE;
157 }
158
159
160 BOOL Config_ReadUserString (LPCTSTR pszLHS, LPTSTR pszRHS, size_t cchMax)
161 {
162    HKEY hk;
163     if (RegOpenKeyEx (HKEY_CURRENT_USER, TEXT(AFSREG_USER_OPENAFS_SUBKEY), 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS)
164         if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, TEXT(AFSREG_CLT_OPENAFS_SUBKEY), 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS)
165             return FALSE;
166
167    DWORD dwSize = sizeof(TCHAR) * cchMax;
168    if (RegQueryValueEx (hk, pszLHS, NULL, NULL, (PBYTE)pszRHS, &dwSize) != ERROR_SUCCESS)
169       {
170       RegCloseKey (hk);
171       return FALSE;
172       }
173
174    RegCloseKey (hk);
175    return TRUE;
176 }
177
178
179 void Config_WriteUserNum (LPCTSTR pszLHS, DWORD dwRHS)
180 {
181    HKEY hk;
182    DWORD dwDisp;
183    if (RegCreateKeyEx (HKEY_CURRENT_USER, TEXT(AFSREG_USER_OPENAFS_SUBKEY), 0, TEXT("container"), 0, KEY_SET_VALUE, NULL, &hk, &dwDisp) == ERROR_SUCCESS)
184       {
185       RegSetValueEx (hk, pszLHS, NULL, REG_DWORD, (PBYTE)&dwRHS, sizeof(dwRHS));
186       RegCloseKey (hk);
187       }
188 }
189
190
191 void Config_WriteUserString (LPCTSTR pszLHS, LPCTSTR pszRHS)
192 {
193    HKEY hk;
194    DWORD dwDisp;
195    if (RegCreateKeyEx (HKEY_CURRENT_USER, TEXT(AFSREG_USER_OPENAFS_SUBKEY), 0, TEXT("container"), 0, KEY_SET_VALUE, NULL, &hk, &dwDisp) == ERROR_SUCCESS)
196       {
197       RegSetValueEx (hk, pszLHS, NULL, REG_SZ, (PBYTE)pszRHS, sizeof(TCHAR) * (1+lstrlen(pszRHS)));
198       RegCloseKey (hk);
199       }
200 }
201
202