summaryrefslogtreecommitdiff
path: root/xmerge/source/activesync/XMergeSync.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xmerge/source/activesync/XMergeSync.cpp')
-rw-r--r--xmerge/source/activesync/XMergeSync.cpp850
1 files changed, 0 insertions, 850 deletions
diff --git a/xmerge/source/activesync/XMergeSync.cpp b/xmerge/source/activesync/XMergeSync.cpp
deleted file mode 100644
index 8c8178c8e613..000000000000
--- a/xmerge/source/activesync/XMergeSync.cpp
+++ /dev/null
@@ -1,850 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include "stdafx.h"
-
-#include "XMergeFilter.h"
-#include "XMergeFactory.h"
-
-
-CXMergeSyncModule _Module;
-
-
-//////////////////////////////////////////////////////////////////////
-// DLL Functions
-//////////////////////////////////////////////////////////////////////
-BOOL WINAPI DllMain(HANDLE hInst, ULONG ulReason, LPVOID lpReserved)
-{
- switch (ulReason)
- {
- case DLL_PROCESS_ATTACH:
- _Module.m_hInst = reinterpret_cast<HINSTANCE>(hInst);
- break;
-
- case DLL_PROCESS_DETACH:
- _Module.m_hInst = NULL;
- break;
-
- case DLL_THREAD_ATTACH:
- break;
-
- case DLL_THREAD_DETACH:
- break;
- }
-
- return TRUE;
-}
-
-
-STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
- // Create the factory object
- CXMergeFactory *pFactory = new CXMergeFactory();
- HRESULT hr = pFactory->QueryInterface(riid, ppv);
- pFactory->Release();
-
- return hr;
-}
-
-
-STDAPI DllCanUnloadNow()
-{
- if (_Module.GetLockCount() == 0)
- return S_OK;
-
- return S_FALSE;
-}
-
-
-// Utility function to close open keys during registration
-static _signalRegError(long lRet, HKEY hKey, HKEY hDataKey)
-{
- if (hKey)
- ::RegCloseKey(hKey);
-
-
- if (hDataKey)
- ::RegCloseKey(hDataKey);
-
- return HRESULT_FROM_WIN32(lRet);
-}
-
-
-STDAPI DllRegisterServer()
-{
- HKEY hKey = NULL;
- HKEY hDataKey = NULL;
-
- long lRet = 0;
- TCHAR sTemp[_MAX_PATH + 1] = "\0";
-
-
- /*
- * Following calls create the HKEY_CLASSES_ROOT\CLSID entry for the Writer export filter.
- *
- * Note that import are export are relative to the WinCE device, so files are
- * exported to the desktop format.
- */
-
- // Get a handle to the CLSID key
- lRet = ::RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("CLSID"), 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- // Create the CLSID key for the XMergeFilter
- lRet = ::RegCreateKeyEx(hKey, CXMergeFilter::m_pszPSWExportCLSID, 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hKey, _T(""), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPSWExportShortDesc,
- (::_tcslen(CXMergeFilter::m_pszPSWExportShortDesc) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // Create the DefaultIcon key. For the moment, use one of the Async supplied ones
- lRet = ::RegCreateKeyEx(hKey, _T("DefaultIcon"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, NULL, 0, REG_SZ, (LPBYTE)_T("C:\\Program Files\\Microsoft ActiveSync\\pwdcnv.dll,0"),
- (::_tcslen(_T("C:\\Program Files\\Microsoft ActiveSync\\pwdcnv.dll,0"))
- * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
- // Create the InprocServer32 key
- lRet = ::RegCreateKeyEx(hKey, _T("InProcServer32"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("ThreadingModel"), 0, REG_SZ, (LPBYTE)_T("Apartment"), 10);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- // Create the key for the DLL file. First find the filename of the dll
- if (!::GetModuleFileName((HMODULE)_Module.m_hInst, sTemp, (_MAX_PATH + 1)))
- {
- lRet = ::GetLastError();
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- }
-
-
- lRet = ::RegSetValueEx(hDataKey, NULL, 0, REG_SZ, (LPBYTE)sTemp,
- (::_tcslen(sTemp) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Setup the PegasusFilter key values
- lRet = ::RegCreateKeyEx(hKey, _T("PegasusFilter"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("Description"), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPSWExportDesc,
- (::_tcslen(CXMergeFilter::m_pszPSWExportDesc) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, _T("Export"), 0, REG_SZ, (LPBYTE)_T(""), (1 * sizeof(TCHAR)));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, _T("NewExtension"), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPSWExportExt,
- (::_tcslen(CXMergeFilter::m_pszPSWExportExt) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- ::RegCloseKey(hKey); hKey = NULL;
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
-
-
- /*
- * Following calls create the entries for the filter in
- * HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows CE Services\Filters
- */
-
- lRet = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows CE Services\\Filters"),
- 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- _snprintf(sTemp, _MAX_PATH + 1, "%c%s\\InstalledFilters\0", '.', CXMergeFilter::m_pszPSWImportExt);
- lRet = ::RegCreateKeyEx(hKey, _T(sTemp),
- 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, CXMergeFilter::m_pszPSWExportCLSID, 0, REG_SZ, (LPBYTE)_T(""), (1 * sizeof(TCHAR)));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::RegCloseKey(hKey); hKey = NULL;
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
-
- /*
- * Following calls create the HKEY_CLASSES_ROOT\CLSID entry for the Writer import filter.
- *
- * Note that import are export are relative to the WinCE device, so files are
- * exported to the desktop format.
- */
- // Get a handle to the CLSID key
- lRet = ::RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("CLSID"), 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- // Create the CLSID key for the XMergeFilter
- lRet = ::RegCreateKeyEx(hKey, CXMergeFilter::m_pszPSWImportCLSID, 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hKey, _T(""), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPSWImportShortDesc,
- (::_tcslen(CXMergeFilter::m_pszPSWImportShortDesc) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // Create the DefaultIcon key. For the moment, use one of the Async supplied ones
- lRet = ::RegCreateKeyEx(hKey, _T("DefaultIcon"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, NULL, 0, REG_SZ, (LPBYTE)_T("C:\\Program Files\\Microsoft ActiveSync\\pwdcnv.dll,0"),
- (::_tcslen(_T("C:\\Program Files\\Microsoft ActiveSync\\pwdcnv.dll,0"))
- * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Create the InprocServer32 key
- lRet = ::RegCreateKeyEx(hKey, _T("InProcServer32"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("ThreadingModel"), 0, REG_SZ, (LPBYTE)_T("Apartment"), 10);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // Create the key for the DLL file. First find the filename of the dll
- if (!::GetModuleFileName((HMODULE)_Module.m_hInst, sTemp, (_MAX_PATH + 1)))
- {
- lRet = ::GetLastError();
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- }
-
-
- lRet = ::RegSetValueEx(hDataKey, NULL, 0, REG_SZ, (LPBYTE)sTemp,
- (::_tcslen(sTemp) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Setup the PegasusFilter key values
- lRet = ::RegCreateKeyEx(hKey, _T("PegasusFilter"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("Description"), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPSWImportDesc,
- (::_tcslen(CXMergeFilter::m_pszPSWImportDesc) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, _T("Import"), 0, REG_SZ, (LPBYTE)_T(""), (1 * sizeof(TCHAR)));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, _T("NewExtension"), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPSWImportExt,
- (::_tcslen(CXMergeFilter::m_pszPSWImportExt) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- ::RegCloseKey(hKey); hKey = NULL;
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- /*
- * Following calls create the entries for the filter in
- * HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows CE Services\Filters
- */
- lRet = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows CE Services\\Filters"),
- 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- // Add in defaults for import and export
- _snprintf(sTemp, _MAX_PATH +1, "%c%s\0", '.', CXMergeFilter::m_pszPSWExportExt);
- lRet = ::RegCreateKeyEx(hKey, _T(sTemp), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("DefaultImport"), 0, REG_SZ,
- (LPBYTE)CXMergeFilter::m_pszPSWImportCLSID,
- (::_tcslen(CXMergeFilter::m_pszPSWImportDesc) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, _T("DefaultExport"), 0, REG_SZ, (LPBYTE)_T("Binary Copy"),
- (::_tcslen(_T("Binary Copy")) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::RegCloseKey(hDataKey);
-
- // Update registered filters
- _snprintf(sTemp, _MAX_PATH + 1, "%c%s\\InstalledFilters\0", '.', CXMergeFilter::m_pszPSWExportExt);
- lRet = ::RegCreateKeyEx(hKey, _T(sTemp),
- 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, CXMergeFilter::m_pszPSWImportCLSID, 0, REG_SZ, (LPBYTE)_T(""), (1 * sizeof(TCHAR)));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::RegCloseKey(hKey); hKey = NULL;
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
-
- /*
- * Following calls create the HKEY_CLASSES_ROOT\CLSID entry for the Calc export filter.
- *
- * Note that import are export are relative to the WinCE device, so files are
- * exported to the desktop format.
- */
-
- // Get a handle to the CLSID key
- lRet = ::RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("CLSID"), 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- // Create the CLSID key for the XMerge Filter
- lRet = ::RegCreateKeyEx(hKey, CXMergeFilter::m_pszPXLExportCLSID, 0, _T(""),
- 0, KEY_ALL_ACCESS, NULL, &hKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hKey, _T(""), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPXLExportShortDesc,
- (::_tcslen(CXMergeFilter::m_pszPXLExportShortDesc) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // Create the DefaultIcon key. For the moment, use one of the Async supplied ones
- lRet = ::RegCreateKeyEx(hKey, _T("DefaultIcon"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, NULL, 0, REG_SZ, (LPBYTE)_T("C:\\Program Files\\Microsoft ActiveSync\\pwdcnv.dll,0"),
- (::_tcslen(_T("C:\\Program Files\\Microsoft ActiveSync\\pwdcnv.dll,0"))
- * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Create the InprocServer32 key
- lRet = ::RegCreateKeyEx(hKey, _T("InProcServer32"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("ThreadingModel"), 0, REG_SZ, (LPBYTE)_T("Apartment"), 10);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // Create the key for the DLL file. First find the filename of the dll
- if (!::GetModuleFileName((HMODULE)_Module.m_hInst, sTemp, (_MAX_PATH + 1)))
- {
- lRet = ::GetLastError();
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- }
-
-
- lRet = ::RegSetValueEx(hDataKey, NULL, 0, REG_SZ, (LPBYTE)sTemp,
- (::_tcslen(sTemp) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Setup the PegasusFilter key values
- lRet = ::RegCreateKeyEx(hKey, _T("PegasusFilter"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("Description"), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPXLExportDesc,
- (::_tcslen(CXMergeFilter::m_pszPXLExportDesc) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, _T("Export"), 0, REG_SZ, (LPBYTE)_T(""), (1 * sizeof(TCHAR)));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, _T("NewExtension"), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPXLExportExt,
- (::_tcslen(CXMergeFilter::m_pszPXLExportExt) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- ::RegCloseKey(hKey); hKey = NULL;
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
-
-
- /*
- * Following calls create the entries for the filter in
- * HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows CE Services\Filters
- */
-
- lRet = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows CE Services\\Filters"),
- 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- _snprintf(sTemp, _MAX_PATH + 1, "%c%s\\InstalledFilters\0", '.', CXMergeFilter::m_pszPXLImportExt);
- lRet = ::RegCreateKeyEx(hKey, _T(sTemp),
- 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, CXMergeFilter::m_pszPXLExportCLSID, 0, REG_SZ, (LPBYTE)_T(""), (1 * sizeof(TCHAR)));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::RegCloseKey(hKey); hKey = NULL;
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
-
- /*
- * Following calls create the HKEY_CLASSES_ROOT\CLSID entry for the Calc import filter.
- *
- * Note that import are export are relative to the WinCE device, so files are
- * exported to the desktop format.
- */
- // Get a handle to the CLSID key
- lRet = ::RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("CLSID"), 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // Create the CLSID key for the XMergeFilter
- lRet = ::RegCreateKeyEx(hKey, CXMergeFilter::m_pszPXLImportCLSID, 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hKey, _T(""), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPXLImportShortDesc,
- (::_tcslen(CXMergeFilter::m_pszPXLImportShortDesc) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- // Create the DefaultIcon key. For the moment, use one of the Async supplied ones
- lRet = ::RegCreateKeyEx(hKey, _T("DefaultIcon"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, NULL, 0, REG_SZ, (LPBYTE)_T("C:\\Program Files\\Microsoft ActiveSync\\pwdcnv.dll,0"),
- (::_tcslen(_T("C:\\Program Files\\Microsoft ActiveSync\\pwdcnv.dll,0"))
- * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Create the InprocServer32 key
- lRet = ::RegCreateKeyEx(hKey, _T("InProcServer32"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("ThreadingModel"), 0, REG_SZ, (LPBYTE)_T("Apartment"), 10);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // Create the key for the DLL file. First find the filename of the dll
- if (!::GetModuleFileName((HMODULE)_Module.m_hInst, sTemp, (_MAX_PATH + 1)))
- {
- lRet = ::GetLastError();
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- }
-
-
- lRet = ::RegSetValueEx(hDataKey, NULL, 0, REG_SZ, (LPBYTE)sTemp,
- (::_tcslen(sTemp) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Setup the PegasusFilter key values
- lRet = ::RegCreateKeyEx(hKey, _T("PegasusFilter"), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("Description"), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPXLImportDesc,
- (::_tcslen(CXMergeFilter::m_pszPXLImportDesc) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, _T("Import"), 0, REG_SZ, (LPBYTE)_T(""), (1 * sizeof(TCHAR)));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, _T("NewExtension"), 0, REG_SZ, (LPBYTE)CXMergeFilter::m_pszPXLImportExt,
- (::_tcslen(CXMergeFilter::m_pszPXLImportExt) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- ::RegCloseKey(hKey); hKey = NULL;
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
-
- /*
- * Following calls create the entries for the filter in
- * HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows CE Services\Filters
- */
- lRet = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows CE Services\\Filters"),
- 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- // Add in defaults for import and export
- _snprintf(sTemp, _MAX_PATH +1, "%c%s\0", '.', CXMergeFilter::m_pszPXLExportExt);
- lRet = ::RegCreateKeyEx(hKey, _T(sTemp), 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("DefaultImport"), 0, REG_SZ,
- (LPBYTE)CXMergeFilter::m_pszPXLImportCLSID,
- (::_tcslen(CXMergeFilter::m_pszPSWImportDesc) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- lRet = ::RegSetValueEx(hDataKey, _T("DefaultExport"), 0, REG_SZ, (LPBYTE)_T("Binary Copy"),
- (::_tcslen(_T("Binary Copy")) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::RegCloseKey(hDataKey);
-
- // Update registered filters
-
-
- _snprintf(sTemp, _MAX_PATH + 1, "%c%s\\InstalledFilters\0", '.', CXMergeFilter::m_pszPXLExportExt);
- lRet = ::RegCreateKeyEx(hKey, _T(sTemp),
- 0, _T(""), 0, KEY_ALL_ACCESS, NULL, &hDataKey, NULL);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, CXMergeFilter::m_pszPXLImportCLSID, 0, REG_SZ, (LPBYTE)_T(""), (1 * sizeof(TCHAR)));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::RegCloseKey(hKey); hKey = NULL;
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
-
- return HRESULT_FROM_WIN32(lRet);
-}
-
-
-STDAPI DllUnregisterServer()
-{
- long lRet = 0;
- HKEY hKey = NULL;
- HKEY hDataKey = NULL;
-
- TCHAR szClassName[_MAX_PATH] = "\0";
- TCHAR szKeyName[_MAX_PATH] = "\0";
- DWORD dwClassName = _MAX_PATH;
- DWORD dwKeyName = _MAX_PATH;
-
- /*
- * Remove HKEY_CLASS_ROOT\CLSID\{XXX} entry for the export and import filters
- *
- * Windows 95/98/Me allow one step deletion of a key and all subkeys.
- * Windows NT/2000/XP do not so the subkeys must be deleted individually.
- */
- lRet = ::RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("CLSID"), 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // First up, the Writer export filter
- lRet = ::RegOpenKeyEx(hKey, CXMergeFilter::m_pszPSWExportCLSID, 0, KEY_ALL_ACCESS, &hDataKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- while ((lRet = ::RegEnumKeyEx(hDataKey, 0, szKeyName, &dwKeyName, 0, szClassName, &dwClassName, NULL))
- != ERROR_NO_MORE_ITEMS)
- {
- lRet = ::RegDeleteKey(hDataKey, szKeyName);
-
- ::lstrcpy(szKeyName, "\0");
- ::lstrcpy(szClassName, "\0");
-
- dwClassName = _MAX_PATH;
- dwKeyName = _MAX_PATH;
- }
-
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
- lRet = ::RegDeleteKey(hKey, CXMergeFilter::m_pszPSWExportCLSID);
- if (lRet != ERROR_SUCCESS && lRet != ERROR_FILE_NOT_FOUND)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
-
- // Next, the Writer import filter
- lRet = ::RegOpenKeyEx(hKey, CXMergeFilter::m_pszPSWImportCLSID, 0, KEY_ALL_ACCESS, &hDataKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- while ((lRet = ::RegEnumKeyEx(hDataKey, 0, szKeyName, &dwKeyName, 0, szClassName, &dwClassName, NULL))
- != ERROR_NO_MORE_ITEMS)
- {
- lRet = ::RegDeleteKey(hDataKey, szKeyName);
-
- ::lstrcpy(szKeyName, "\0");
- ::lstrcpy(szClassName, "\0");
-
- dwClassName = _MAX_PATH;
- dwKeyName = _MAX_PATH;
- }
-
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
- lRet = ::RegDeleteKey(hKey, CXMergeFilter::m_pszPSWImportCLSID);
- if (lRet != ERROR_SUCCESS && lRet != ERROR_FILE_NOT_FOUND)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // Next up, the Calc export filter
- lRet = ::RegOpenKeyEx(hKey, CXMergeFilter::m_pszPXLExportCLSID, 0, KEY_ALL_ACCESS, &hDataKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- while ((lRet = ::RegEnumKeyEx(hDataKey, 0, szKeyName, &dwKeyName, 0, szClassName, &dwClassName, NULL))
- != ERROR_NO_MORE_ITEMS)
- {
- lRet = ::RegDeleteKey(hDataKey, szKeyName);
-
- ::lstrcpy(szKeyName, "\0");
- ::lstrcpy(szClassName, "\0");
-
- dwClassName = _MAX_PATH;
- dwKeyName = _MAX_PATH;
- }
-
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
- lRet = ::RegDeleteKey(hKey, CXMergeFilter::m_pszPXLExportCLSID);
- if (lRet != ERROR_SUCCESS && lRet != ERROR_FILE_NOT_FOUND)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // Next, the Calc import filter
- lRet = ::RegOpenKeyEx(hKey, CXMergeFilter::m_pszPXLImportCLSID, 0, KEY_ALL_ACCESS, &hDataKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- while ((lRet = ::RegEnumKeyEx(hDataKey, 0, szKeyName, &dwKeyName, 0, szClassName, &dwClassName, NULL))
- != ERROR_NO_MORE_ITEMS)
- {
- lRet = ::RegDeleteKey(hDataKey, szKeyName);
-
- ::lstrcpy(szKeyName, "\0");
- ::lstrcpy(szClassName, "\0");
-
- dwClassName = _MAX_PATH;
- dwKeyName = _MAX_PATH;
- }
-
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
- lRet = ::RegDeleteKey(hKey, CXMergeFilter::m_pszPXLImportCLSID);
- if (lRet != ERROR_SUCCESS && lRet != ERROR_FILE_NOT_FOUND)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::RegCloseKey(hKey); hKey = NULL;
-
-
-
- /*
- * Remove the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows CE Services\Filters
- */
- lRet = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows CE Services\\Filters"),
- 0, KEY_ALL_ACCESS, &hKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
-
- // Remove the Writer export filter from the Writer import file extension subkey.
- _snprintf(szKeyName, _MAX_PATH, ".%s\\InstalledFilters", CXMergeFilter::m_pszPSWImportExt);
- lRet = ::RegOpenKeyEx(hKey, _T(szKeyName), 0, KEY_ALL_ACCESS, &hDataKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegDeleteValue(hDataKey, CXMergeFilter::m_pszPSWExportCLSID);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::lstrcpyn(szKeyName, "\0", _MAX_PATH);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Remove the Writer import filter from the Writer export file extension subkey.
- _snprintf(szKeyName, _MAX_PATH, ".%s\\InstalledFilters", CXMergeFilter::m_pszPSWExportExt);
- lRet = ::RegOpenKeyEx(hKey, _T(szKeyName), 0, KEY_ALL_ACCESS, &hDataKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegDeleteValue(hDataKey, CXMergeFilter::m_pszPSWImportCLSID);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::lstrcpyn(szKeyName, "\0", _MAX_PATH);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Make Binary Copy the default for Writer export file extension subkey DefaultImport
- _snprintf(szKeyName, _MAX_PATH, ".%s\0", CXMergeFilter::m_pszPSWExportExt);
- lRet = ::RegOpenKeyEx(hKey, _T(szKeyName), 0, KEY_ALL_ACCESS, &hDataKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("DefaultImport"), 0, REG_SZ, (LPBYTE)_T("Binary Copy"),
- (::_tcslen(_T("Binary Copy")) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::lstrcpyn(szKeyName, "\0", _MAX_PATH);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Remove the Calc export filter from the Calc import file extension subkey.
- _snprintf(szKeyName, _MAX_PATH, ".%s\\InstalledFilters", CXMergeFilter::m_pszPXLImportExt);
- lRet = ::RegOpenKeyEx(hKey, _T(szKeyName), 0, KEY_ALL_ACCESS, &hDataKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegDeleteValue(hDataKey, CXMergeFilter::m_pszPXLExportCLSID);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::lstrcpyn(szKeyName, "\0", _MAX_PATH);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
- // Remove the Calc import filter from the Calc export file extension subkey.
- _snprintf(szKeyName, _MAX_PATH, ".%s\\InstalledFilters", CXMergeFilter::m_pszPXLExportExt);
- lRet = ::RegOpenKeyEx(hKey, _T(szKeyName), 0, KEY_ALL_ACCESS, &hDataKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegDeleteValue(hDataKey, CXMergeFilter::m_pszPXLImportCLSID);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::lstrcpyn(szKeyName, "\0", _MAX_PATH);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
- // Make Binary Copy the default for Calc export file extension subkey DefaultImport
- _snprintf(szKeyName, _MAX_PATH, ".%s\0", CXMergeFilter::m_pszPXLExportExt);
- lRet = ::RegOpenKeyEx(hKey, _T(szKeyName), 0, KEY_ALL_ACCESS, &hDataKey);
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- lRet = ::RegSetValueEx(hDataKey, _T("DefaultImport"), 0, REG_SZ, (LPBYTE)_T("Binary Copy"),
- (::_tcslen(_T("Binary Copy")) * sizeof(TCHAR) + (1 * sizeof(TCHAR))));
- if (lRet != ERROR_SUCCESS)
- return _signalRegError(lRet, hKey, hDataKey);
-
- ::lstrcpyn(szKeyName, "\0", _MAX_PATH);
- ::RegCloseKey(hDataKey); hDataKey = NULL;
-
-
-
- ::RegCloseKey(hKey); hKey = NULL;
-
- return HRESULT_FROM_WIN32(lRet);
-}
-
-
-//////////////////////////////////////////////////////////////////////
-// CXMergeSyncModule methods
-//////////////////////////////////////////////////////////////////////
-CXMergeSyncModule::CXMergeSyncModule () : m_lLocks(0), m_lObjs(0)
-{
-}
-
-CXMergeSyncModule::~CXMergeSyncModule ()
-{
-}
-
-long CXMergeSyncModule::LockServer(BOOL fLock)
-{
- if(fLock)
- return ::InterlockedIncrement(&m_lLocks);
- else
- return ::InterlockedDecrement(&m_lLocks);
-}
-
-long CXMergeSyncModule::GetLockCount() const
-{
- return m_lLocks + m_lObjs;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */