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" { 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 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 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