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