cf87a181aa76a90af3729bcedd8f01916e697c0e
[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 <tchar.h>
12 //#include <ctype.h>
13 #include <stdlib.h>
14 #include <drivemap.h>
15
16 BOOL Config_ReadString (LPCTSTR pszLHS, LPTSTR pszRHS, size_t cchMax);
17
18 extern TCHAR AFSConfigKeyName[] = TEXT("SYSTEM\\CurrentControlSet\\Services\\TransarcAFSDaemon\\Parameters");
19
20 void Config_GetGlobalDriveList (DRIVEMAPLIST *pDriveList)
21 {
22    // Read the GlobalAutoMapper registry key
23    TCHAR szDriveToMapTo[5];
24    DWORD dwResult;
25    TCHAR szKeyName[256];
26    HKEY hKey;
27    DWORD dwIndex = 0;
28    DWORD dwDriveSize;
29    DWORD dwSubMountSize;
30    TCHAR szSubMount[256];
31    DWORD dwType;
32
33    if (!pDriveList)
34       return;
35
36    memset(pDriveList, 0, sizeof(DRIVEMAPLIST));
37
38    lstrcpy(szKeyName, AFSConfigKeyName);
39    lstrcat(szKeyName, TEXT("\\GlobalAutoMapper"));
40
41    dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKeyName, 0, KEY_QUERY_VALUE, &hKey);
42    if (dwResult != ERROR_SUCCESS)
43       return;
44
45    // Get the drive map list so we can lookup the paths that go with our submounts
46         DRIVEMAPLIST DriveMapList;
47    memset(&DriveMapList, 0, sizeof(DRIVEMAPLIST));
48    QueryDriveMapList (&DriveMapList);
49
50    while (1) {
51       dwDriveSize = sizeof(szDriveToMapTo);
52       dwSubMountSize = sizeof(szSubMount);
53       
54       dwResult = RegEnumValue(hKey, dwIndex++, szDriveToMapTo, &dwDriveSize, 0, &dwType, (BYTE*)szSubMount, &dwSubMountSize);
55       if (dwResult != ERROR_SUCCESS)
56          break;
57       
58       szDriveToMapTo[0] = _totupper(szDriveToMapTo[0]);
59         
60       int nCurDrive = szDriveToMapTo[0] - TEXT('A');
61         
62       pDriveList->aDriveMap[nCurDrive].chDrive = szDriveToMapTo[0];
63       lstrcpy(pDriveList->aDriveMap[nCurDrive].szSubmount, szSubMount);
64
65       // Find the path that goes with this submount
66       SubmountToPath (&DriveMapList, pDriveList->aDriveMap[nCurDrive].szMapping, szSubMount, FALSE);
67    }        
68
69    FreeDriveMapList(&DriveMapList);
70
71    RegCloseKey(hKey);
72 }
73
74 BOOL Config_ReadNum (LPCTSTR pszLHS, DWORD *pdwRHS)
75 {
76    HKEY hk;
77    if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, AFSConfigKeyName, 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS)
78       return FALSE;
79
80    DWORD dwSize = sizeof(*pdwRHS);
81    if (RegQueryValueEx (hk, pszLHS, NULL, NULL, (PBYTE)pdwRHS, &dwSize) != ERROR_SUCCESS)
82       {
83       RegCloseKey (hk);
84       return FALSE;
85       }
86
87    RegCloseKey (hk);
88    return TRUE;
89 }
90
91
92 BOOL Config_ReadString (LPCTSTR pszLHS, LPTSTR pszRHS, size_t cchMax)
93 {
94    HKEY hk;
95    if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, AFSConfigKeyName, 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS)
96       return FALSE;
97
98    DWORD dwSize = sizeof(TCHAR) * cchMax;
99    if (RegQueryValueEx (hk, pszLHS, NULL, NULL, (PBYTE)pszRHS, &dwSize) != ERROR_SUCCESS)
100       {
101       RegCloseKey (hk);
102       return FALSE;
103       }
104
105    RegCloseKey (hk);
106    return TRUE;
107 }
108
109
110 void Config_WriteNum (LPCTSTR pszLHS, DWORD dwRHS)
111 {
112    HKEY hk;
113    DWORD dwDisp;
114    if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, AFSConfigKeyName, 0, TEXT("container"), 0, KEY_SET_VALUE, NULL, &hk, &dwDisp) == ERROR_SUCCESS)
115       {
116       RegSetValueEx (hk, pszLHS, NULL, REG_DWORD, (PBYTE)&dwRHS, sizeof(dwRHS));
117       RegCloseKey (hk);
118       }
119 }
120
121
122 void Config_WriteString (LPCTSTR pszLHS, LPCTSTR pszRHS)
123 {
124    HKEY hk;
125    DWORD dwDisp;
126    if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, AFSConfigKeyName, 0, TEXT("container"), 0, KEY_SET_VALUE, NULL, &hk, &dwDisp) == ERROR_SUCCESS)
127       {
128       RegSetValueEx (hk, pszLHS, NULL, REG_SZ, (PBYTE)pszRHS, sizeof(TCHAR) * (1+lstrlen(pszRHS)));
129       RegCloseKey (hk);
130       }
131 }
132