1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 #if defined _MSC_VER
25 #pragma warning(push, 1)
26 #endif
27 #include <windows.h>
28 #if defined _MSC_VER
29 #pragma warning(pop)
30 #endif
31 #include <Winreg.h>
32 #include <Shlwapi.h>
33 #include <stdio.h>
34
35
36 #define SO_PATH_SIZE 4096
37 #define MOZ_PLUGIN_DLL_NAME "npsopluginmi.dll"
38 extern "C" {
lc_isInstalled(const char * realFilePath)39 int lc_isInstalled(const char* realFilePath)
40 {
41 HKEY hKeySoftware;
42 HKEY hMozillaPlugins;
43 HKEY hStarOffice;
44 char sSoPath[SO_PATH_SIZE];
45 char sPluginPath[SO_PATH_SIZE];
46
47 LONG ret;
48 ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ, &hKeySoftware);
49 if(ret != ERROR_SUCCESS){
50 ret = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE", 0, KEY_READ, &hKeySoftware);
51 if(ret != ERROR_SUCCESS){
52 return -1;
53 }
54 }
55 ret = RegOpenKeyEx(hKeySoftware, "MozillaPlugins", 0, KEY_READ, &hMozillaPlugins);
56 if(ret != ERROR_SUCCESS){
57 RegCloseKey(hKeySoftware);
58 if( ret == ERROR_FILE_NOT_FOUND)
59 return 1;
60 else
61 return -1;
62 }
63 ret = RegOpenKeyEx(hMozillaPlugins, "@sun.com/npsopluginmi;version=1.0", 0, KEY_READ, &hStarOffice);
64 if(ret != ERROR_SUCCESS){
65 RegCloseKey(hKeySoftware);
66 RegCloseKey(hMozillaPlugins);
67 if( ret == ERROR_FILE_NOT_FOUND)
68 return 1;
69 else
70 return -1;
71 }
72
73 if((realFilePath == NULL) || (strlen(realFilePath) == 0) || (strlen(realFilePath) >= SO_PATH_SIZE))
74 ret = -1;
75 else{
76 sprintf(sSoPath,"%s", realFilePath);
77 ret = 0;
78 }
79 //ret = GetCurrentDirectory( SO_PATH_SIZE, sSoPath);
80 //ret = GetEnvironmentVariable("prog", sSoPath, SO_PATH_SIZE);
81 // GetCurrentDirectory return the char number of the string
82 if(ret == 0){
83 DWORD dType = REG_SZ;
84 DWORD dSize = SO_PATH_SIZE;
85 ret = RegQueryValueEx (hStarOffice, "Path", NULL, &dType , (LPBYTE) sPluginPath, &dSize);
86 if(ret == ERROR_SUCCESS){
87 if(strcmp(sPluginPath, sSoPath) == 0)
88 ret = 0;
89 else
90 ret = 1;
91 }
92 else
93 ret = -1;
94 }
95 else
96 ret = -1;
97 RegCloseKey(hStarOffice);
98 RegCloseKey(hMozillaPlugins);
99 RegCloseKey(hKeySoftware);
100 return ret;
101 }
102
lc_uninstallPlugin(const char *)103 int lc_uninstallPlugin(const char*)
104 {
105 HKEY hKeySoftware;
106 HKEY hMozillaPlugins;
107 HKEY hStarOffice;
108
109 LONG ret;
110 ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WRITE, &hKeySoftware);
111 if(ret != ERROR_SUCCESS){
112 ret = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE", 0, KEY_READ|KEY_WRITE, &hKeySoftware);
113 if(ret != ERROR_SUCCESS){
114 return -1;
115 }
116 }
117 ret = RegOpenKeyEx(hKeySoftware, "MozillaPlugins", 0, KEY_READ|KEY_WRITE, &hMozillaPlugins);
118 if(ret != ERROR_SUCCESS){
119 RegCloseKey(hKeySoftware);
120 if( ret == ERROR_FILE_NOT_FOUND)
121 return 0;
122 else
123 return -1;
124 }
125
126 ret = RegOpenKeyEx(hMozillaPlugins, "@sun.com/npsopluginmi;version=1.0", 0, KEY_READ|KEY_WRITE, &hStarOffice);
127 if(ret != ERROR_SUCCESS){
128 RegCloseKey(hKeySoftware);
129 RegCloseKey(hMozillaPlugins);
130 if( ret == ERROR_FILE_NOT_FOUND)
131 return 0;
132 else
133 return -1;
134 }
135 RegCloseKey(hStarOffice);
136 ret = SHDeleteKey(hMozillaPlugins, "@sun.com/npsopluginmi;version=1.0");
137 if(ret != ERROR_SUCCESS){
138 ret = -1;
139 }
140 RegFlushKey(hMozillaPlugins);
141 RegCloseKey(hMozillaPlugins);
142 RegCloseKey(hKeySoftware);
143 return ret;
144 }
145
lc_installPlugin(const char * realFilePath)146 int lc_installPlugin(const char* realFilePath)
147 {
148 HKEY hKeySoftware;
149 HKEY hMozillaPlugins;
150 HKEY hStarOffice;
151 char sSoPath[SO_PATH_SIZE];
152 DWORD sState;
153
154
155 LONG ret;
156 ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ|KEY_WRITE, &hKeySoftware);
157 if(ret != ERROR_SUCCESS){
158 ret = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE", 0, KEY_READ|KEY_WRITE, &hKeySoftware);
159 if(ret != ERROR_SUCCESS){
160 return -1;
161 }
162 }
163 ret = RegOpenKeyEx(hKeySoftware, "MozillaPlugins", 0, KEY_READ|KEY_WRITE, &hMozillaPlugins);
164 if(ret != ERROR_SUCCESS){
165 RegCreateKeyEx(hKeySoftware,
166 "MozillaPlugins",
167 0,
168 NULL,
169 REG_OPTION_NON_VOLATILE,
170 KEY_READ|KEY_WRITE,
171 NULL,
172 &hMozillaPlugins,
173 &sState);
174 }
175
176 ret = RegCreateKeyEx(hMozillaPlugins,
177 "@sun.com/npsopluginmi;version=1.0",
178 0,
179 NULL,
180 REG_OPTION_NON_VOLATILE,
181 KEY_READ|KEY_WRITE,
182 NULL,
183 &hStarOffice,
184 &sState);
185 if(ret != ERROR_SUCCESS){
186 RegCloseKey(hKeySoftware);
187 RegCloseKey(hMozillaPlugins);
188 return -1;
189 }
190
191 RegFlushKey(hStarOffice);
192 RegFlushKey(hMozillaPlugins);
193
194
195 if((realFilePath == NULL) || (strlen(realFilePath) == 0) || (strlen(realFilePath) >= SO_PATH_SIZE))
196 ret = -1;
197 else{
198 sprintf(sSoPath,"%s", realFilePath);
199 ret = 0;
200 }
201
202 //ret = GetCurrentDirectory( SO_PATH_SIZE, sSoPath);
203 // GetCurrentDirectory return the char number of the string
204 if(ret == 0){
205 ret = RegSetValueEx( hStarOffice, "Path", 0, REG_SZ, (LPBYTE) sSoPath, strlen(sSoPath) + 1);
206 if(ret == ERROR_SUCCESS)
207 ret = 0;
208 else
209 ret = -1;
210 }
211 else
212 ret = -1;
213 RegFlushKey(hStarOffice);
214 RegFlushKey(hMozillaPlugins);
215 RegCloseKey(hStarOffice);
216 RegCloseKey(hMozillaPlugins);
217 RegCloseKey(hKeySoftware);
218 RegFlushKey(HKEY_LOCAL_MACHINE);
219
220 return ret;
221 }
222 }
223