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