X-Git-Url: https://git.saurik.com/apple/mdnsresponder.git/blobdiff_plain/8e92c31c9a45a66732f5bc7afbc9f5596c17e91d..7f0064bd55e3fa98568d2c359429ff8a38b23a6c:/mDNSWindows/Applications/ExplorerPlugin/ExplorerPlugin.cpp diff --git a/mDNSWindows/Applications/ExplorerPlugin/ExplorerPlugin.cpp b/mDNSWindows/Applications/ExplorerPlugin/ExplorerPlugin.cpp deleted file mode 100644 index 9528577..0000000 --- a/mDNSWindows/Applications/ExplorerPlugin/ExplorerPlugin.cpp +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Copyright (c) 2003-2004 Apple Computer, Inc. All rights reserved. - * - * @APPLE_LICENSE_HEADER_START@ - * - * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. - * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. - * - * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and - * limitations under the License. - * - * @APPLE_LICENSE_HEADER_END@ - - Change History (most recent first): - -$Log: ExplorerPlugin.cpp,v $ -Revision 1.1 2004/01/30 03:01:56 bradley -Explorer Plugin to browse for Rendezvous-enabled Web and FTP servers from within Internet Explorer. - -*/ - -#include "StdAfx.h" - -// The following 2 includes have to be in this order and INITGUID must be defined here, before including the file -// that specifies the GUID(s), and nowhere else. The reason for this is that initguid.h doesn't provide separate -// define and declare macros for GUIDs so you have to #define INITGUID in the single file where you want to define -// your GUID then in all the other files that just need the GUID declared, INITGUID must not be defined. - -#define INITGUID -#include -#include "ExplorerPlugin.h" - -#include -#include - -#include "CommonServices.h" -#include "DebugServices.h" - -#include "ClassFactory.h" -#include "Resource.h" - -// MFC Debugging - -#ifdef _DEBUG -#define new DEBUG_NEW -#undef THIS_FILE -static char THIS_FILE[] = __FILE__; -#endif - -#if 0 -#pragma mark == Prototypes == -#endif - -//=========================================================================================================================== -// Prototypes -//=========================================================================================================================== - -// DLL Exports - -extern "C" BOOL WINAPI DllMain( HINSTANCE inInstance, DWORD inReason, LPVOID inReserved ); - -// MFC Support - -DEBUG_LOCAL OSStatus MFCDLLProcessAttach( HINSTANCE inInstance ); -DEBUG_LOCAL void MFCDLLProcessDetach( HINSTANCE inInstance ); -DEBUG_LOCAL void MFCDLLThreadDetach( HINSTANCE inInstance ); - -// Utilities - -DEBUG_LOCAL OSStatus RegisterServer( HINSTANCE inInstance, CLSID inCLSID, LPCTSTR inName ); -DEBUG_LOCAL OSStatus RegisterCOMCategory( CLSID inCLSID, CATID inCategoryID, BOOL inRegister ); - -#if 0 -#pragma mark == Globals == -#endif - -//=========================================================================================================================== -// Globals -//=========================================================================================================================== - -HINSTANCE gInstance = NULL; -int gDLLRefCount = 0; -CWinApp gApp; - -#if 0 -#pragma mark - -#pragma mark == DLL Exports == -#endif - -//=========================================================================================================================== -// DllMain -//=========================================================================================================================== - -BOOL WINAPI DllMain( HINSTANCE inInstance, DWORD inReason, LPVOID inReserved ) -{ - BOOL ok; - OSStatus err; - - DEBUG_UNUSED( inReserved ); - - ok = TRUE; - switch( inReason ) - { - case DLL_PROCESS_ATTACH: - gInstance = inInstance; - debug_initialize( kDebugOutputTypeWindowsEventLog, "RendezvousBar", inInstance ); - debug_set_property( kDebugPropertyTagPrintLevel, kDebugLevelTrace ); - dlog( kDebugLevelTrace, "\nDllMain: process attach\n" ); - - err = MFCDLLProcessAttach( inInstance ); - ok = ( err == kNoErr ); - require_noerr( err, exit ); - break; - - case DLL_PROCESS_DETACH: - dlog( kDebugLevelTrace, "DllMain: process detach\n" ); - MFCDLLProcessDetach( inInstance ); - break; - - case DLL_THREAD_ATTACH: - dlog( kDebugLevelTrace, "DllMain: thread attach\n" ); - break; - - case DLL_THREAD_DETACH: - dlog( kDebugLevelTrace, "DllMain: thread detach\n" ); - MFCDLLThreadDetach( inInstance ); - break; - - default: - dlog( kDebugLevelTrace, "DllMain: unknown reason code (%d)\n",inReason ); - break; - } - -exit: - return( ok ); -} - -//=========================================================================================================================== -// DllCanUnloadNow -//=========================================================================================================================== - -STDAPI DllCanUnloadNow( void ) -{ - dlog( kDebugLevelTrace, "DllCanUnloadNow (refCount=%d)\n", gDLLRefCount ); - - return( gDLLRefCount == 0 ); -} - -//=========================================================================================================================== -// DllGetClassObject -//=========================================================================================================================== - -STDAPI DllGetClassObject( REFCLSID inCLSID, REFIID inIID, LPVOID *outResult ) -{ - HRESULT err; - BOOL ok; - ClassFactory * factory; - - dlog( kDebugLevelTrace, "DllGetClassObject\n" ); - - *outResult = NULL; - - // Check if the class ID is supported. - - ok = IsEqualCLSID( inCLSID, CLSID_ExplorerBar ); - require_action_quiet( ok, exit, err = CLASS_E_CLASSNOTAVAILABLE ); - - // Create the ClassFactory object. - - factory = NULL; - try - { - factory = new ClassFactory( inCLSID ); - } - catch( ... ) - { - // Do not let exception escape. - } - require_action( factory, exit, err = E_OUTOFMEMORY ); - - // Query for the specified interface. Release the factory since QueryInterface retains it. - - err = factory->QueryInterface( inIID, outResult ); - factory->Release(); - -exit: - return( err ); -} - -//=========================================================================================================================== -// DllRegisterServer -//=========================================================================================================================== - -STDAPI DllRegisterServer( void ) -{ - HRESULT err; - BOOL ok; - CString s; - - dlog( kDebugLevelTrace, "DllRegisterServer\n" ); - - ok = s.LoadString( IDS_NAME ); - require_action( ok, exit, err = E_UNEXPECTED ); - - err = RegisterServer( gInstance, CLSID_ExplorerBar, s ); - require_noerr( err, exit ); - - err = RegisterCOMCategory( CLSID_ExplorerBar, CATID_InfoBand, TRUE ); - require_noerr( err, exit ); - -exit: - return( err ); -} - -//=========================================================================================================================== -// DllUnregisterServer -//=========================================================================================================================== - -STDAPI DllUnregisterServer( void ) -{ - HRESULT err; - - dlog( kDebugLevelTrace, "DllUnregisterServer\n" ); - - err = RegisterCOMCategory( CLSID_ExplorerBar, CATID_InfoBand, FALSE ); - require_noerr( err, exit ); - -exit: - return( err ); -} - -#if 0 -#pragma mark - -#pragma mark == MFC Support == -#endif - -//=========================================================================================================================== -// MFCDLLProcessAttach -//=========================================================================================================================== - -DEBUG_LOCAL OSStatus MFCDLLProcessAttach( HINSTANCE inInstance ) -{ - OSStatus err; - _AFX_THREAD_STATE * threadState; - AFX_MODULE_STATE * previousModuleState; - BOOL ok; - CWinApp * app; - - app = NULL; - - // Simulate what is done in dllmodul.cpp. - - threadState = AfxGetThreadState(); - check( threadState ); - previousModuleState = threadState->m_pPrevModuleState; - - ok = AfxWinInit( inInstance, NULL, TEXT( "" ), 0 ); - require_action( ok, exit, err = kUnknownErr ); - - app = AfxGetApp(); - require_action( ok, exit, err = kNotInitializedErr ); - - ok = app->InitInstance(); - require_action( ok, exit, err = kUnknownErr ); - - threadState->m_pPrevModuleState = previousModuleState; - threadState = NULL; - AfxInitLocalData( inInstance ); - err = kNoErr; - -exit: - if( err ) - { - if( app ) - { - app->ExitInstance(); - } - AfxWinTerm(); - } - if( threadState ) - { - threadState->m_pPrevModuleState = previousModuleState; - } - return( err ); -} - -//=========================================================================================================================== -// MFCDLLProcessDetach -//=========================================================================================================================== - -DEBUG_LOCAL void MFCDLLProcessDetach( HINSTANCE inInstance ) -{ - CWinApp * app; - - // Simulate what is done in dllmodul.cpp. - - app = AfxGetApp(); - if( app ) - { - app->ExitInstance(); - } - -#if( DEBUG ) - if( AfxGetModuleThreadState()->m_nTempMapLock != 0 ) - { - dlog( kDebugLevelWarning, "Warning: Temp map lock count non-zero (%ld).\n", AfxGetModuleThreadState()->m_nTempMapLock ); - } -#endif - - AfxLockTempMaps(); - AfxUnlockTempMaps( -1 ); - - // Terminate the library before destructors are called. - - AfxWinTerm(); - AfxTermLocalData( inInstance, TRUE ); -} - -//=========================================================================================================================== -// MFCDLLFinalize -//=========================================================================================================================== - -DEBUG_LOCAL void MFCDLLThreadDetach( HINSTANCE inInstance ) -{ - // Simulate what is done in dllmodul.cpp. - -#if( DEBUG ) - if( AfxGetModuleThreadState()->m_nTempMapLock != 0 ) - { - dlog( kDebugLevelWarning, "Warning: Temp map lock count non-zero (%ld).\n", AfxGetModuleThreadState()->m_nTempMapLock ); - } -#endif - - AfxLockTempMaps(); - AfxUnlockTempMaps( -1 ); - AfxTermThread( inInstance ); -} - -#if 0 -#pragma mark - -#pragma mark == Utilities == -#endif - -//=========================================================================================================================== -// RegisterServer -//=========================================================================================================================== - -DEBUG_LOCAL OSStatus RegisterServer( HINSTANCE inInstance, CLSID inCLSID, LPCTSTR inName ) -{ - typedef struct RegistryBuilder RegistryBuilder; - struct RegistryBuilder - { - HKEY rootKey; - LPCTSTR subKey; - LPCTSTR valueName; - LPCTSTR data; - }; - - OSStatus err; - LPWSTR clsidWideString; - TCHAR clsidString[ 64 ]; - DWORD nChars; - size_t n; - size_t i; - HKEY key; - TCHAR keyName[ MAX_PATH ]; - TCHAR moduleName[ MAX_PATH ] = TEXT( "" ); - TCHAR data[ MAX_PATH ]; - RegistryBuilder entries[] = - { - { HKEY_CLASSES_ROOT, TEXT( "CLSID\\%s" ), NULL, inName }, - { HKEY_CLASSES_ROOT, TEXT( "CLSID\\%s\\InprocServer32" ), NULL, moduleName }, - { HKEY_CLASSES_ROOT, TEXT( "CLSID\\%s\\InprocServer32" ), TEXT( "ThreadingModel" ), TEXT( "Apartment" ) } - }; - DWORD size; - OSVERSIONINFO versionInfo; - - // Convert the CLSID to a string based on the encoding of this code (ANSI or Unicode). - - err = StringFromIID( inCLSID, &clsidWideString ); - require_noerr( err, exit ); - require_action( clsidWideString, exit, err = kNoMemoryErr ); - - #ifdef UNICODE - lstrcpyn( clsidString, clsidWideString, sizeof_array( clsidString ) ); - CoTaskMemFree( clsidWideString ); - #else - nChars = WideCharToMultiByte( CP_ACP, 0, clsidWideString, -1, clsidString, sizeof_array( clsidString ), NULL, NULL ); - err = translate_errno( nChars > 0, (OSStatus) GetLastError(), kUnknownErr ); - CoTaskMemFree( clsidWideString ); - require_noerr( err, exit ); - #endif - - // Register the CLSID entries. - - nChars = GetModuleFileName( inInstance, moduleName, sizeof_array( moduleName ) ); - err = translate_errno( nChars > 0, (OSStatus) GetLastError(), kUnknownErr ); - require_noerr( err, exit ); - - n = sizeof_array( entries ); - for( i = 0; i < n; ++i ) - { - wsprintf( keyName, entries[ i ].subKey, clsidString ); - err = RegCreateKeyEx( entries[ i ].rootKey, keyName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, NULL ); - require_noerr( err, exit ); - - size = (DWORD)( ( lstrlen( entries[ i ].data ) + 1 ) * sizeof( TCHAR ) ); - err = RegSetValueEx( key, entries[ i ].valueName, 0, REG_SZ, (LPBYTE) entries[ i ].data, size ); - RegCloseKey( key ); - require_noerr( err, exit ); - } - - // If running on NT, register the extension as approved. - - versionInfo.dwOSVersionInfoSize = sizeof( versionInfo ); - GetVersionEx( &versionInfo ); - if( versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT ) - { - lstrcpyn( keyName, TEXT( "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved" ), sizeof_array( keyName ) ); - err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, keyName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, NULL ); - require_noerr( err, exit ); - - lstrcpyn( data, inName, sizeof_array( data ) ); - size = (DWORD)( ( lstrlen( data ) + 1 ) * sizeof( TCHAR ) ); - err = RegSetValueEx( key, clsidString, 0, REG_SZ, (LPBYTE) data, size ); - RegCloseKey( key ); - } - err = kNoErr; - -exit: - return( err ); -} - -//=========================================================================================================================== -// RegisterCOMCategory -//=========================================================================================================================== - -DEBUG_LOCAL OSStatus RegisterCOMCategory( CLSID inCLSID, CATID inCategoryID, BOOL inRegister ) -{ - HRESULT err; - ICatRegister * cat; - - err = CoInitialize( NULL ); - require( SUCCEEDED( err ), exit ); - - err = CoCreateInstance( CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (LPVOID *) &cat ); - check( SUCCEEDED( err ) ); - if( SUCCEEDED( err ) ) - { - if( inRegister ) - { - err = cat->RegisterClassImplCategories( inCLSID, 1, &inCategoryID ); - check_noerr( err ); - } - else - { - err = cat->UnRegisterClassImplCategories( inCLSID, 1, &inCategoryID ); - check_noerr( err ); - } - cat->Release(); - } - CoUninitialize(); - -exit: - return( err ); -}