]> git.saurik.com Git - apple/mdnsresponder.git/blobdiff - mDNSWindows/Applications/ExplorerPlugin/ExplorerPlugin.cpp
mDNSResponder-87.tar.gz
[apple/mdnsresponder.git] / mDNSWindows / Applications / ExplorerPlugin / ExplorerPlugin.cpp
diff --git a/mDNSWindows/Applications/ExplorerPlugin/ExplorerPlugin.cpp b/mDNSWindows/Applications/ExplorerPlugin/ExplorerPlugin.cpp
deleted file mode 100644 (file)
index 9528577..0000000
+++ /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       <initguid.h>
-#include       "ExplorerPlugin.h"
-
-#include       <comcat.h>
-#include       <Shlwapi.h>
-
-#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 );
-}