///////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1996-1999 Microsoft Corporation // // Module Name: // RegCOMObj.cpp // // Abstract: // The functions in this file are used to register and unregister the COM // objects used by Cluster Server. // // Author: // C. Brent Thomas (a-brentt) April 1 1998 // // Revision History: // // Notes: // ///////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include "SetupCommonLibRes.h" typedef HRESULT (*PFDLLREGISTERSERVER)(void); ///////////////////////////////////////////////////////////////////////////// //++ // // RegisterCOMObject // // Routine Description: // This function attempts to register a COM object. // // Arguments: // ptszCOMObjectFileName - points to the name of the COM object file. // ptszPathToCOMObject - points to the location of the COM object. // // // Return Value: // ERROR_SUCCESS - indicated success // Any other value is an NT error code retrunde by GetLastError() // //-- ///////////////////////////////////////////////////////////////////////////// DWORD RegisterCOMObject( LPCTSTR ptszCOMObjectFileName, LPCTSTR ptszPathToCOMObject ) { DWORD dwStatus; HINSTANCE hLib = NULL; TCHAR tszComObjFileName[_MAX_PATH]; LPSTR pszEntryPoint; PFDLLREGISTERSERVER pfnRegisterServer; // ASSERT(ptszCOMObjectFileName != NULL); BUGBUG // ASSERT(ptszPathToCOMObject != NULL); // // Construct the file name. // wsprintf( tszComObjFileName, TEXT("%s\\%s"), ptszPathToCOMObject, ptszCOMObjectFileName ); // // Load the DLL. // hLib = LoadLibrary( tszComObjFileName ); if ( hLib != NULL ) { // // Get the DllRegisterServer entry point. // pfnRegisterServer = (PFDLLREGISTERSERVER) GetProcAddress( hLib, "DllRegisterServer" ); if ( pfnRegisterServer != NULL ) { // // Call the entry point. // dwStatus = (*pfnRegisterServer)(); } else { dwStatus = GetLastError(); } FreeLibrary( hLib ); } else { dwStatus = GetLastError(); } return ( dwStatus ); } // RegisterCOMObject ///////////////////////////////////////////////////////////////////////////// //++ // // UnRegisterCOMObject // // Routine Description: // This function attempts to unregister a COM object. // // Arguments: // ptszCOMObjectFileName - points to the name of the COM object file. // ptszPathToCOMObject - points to the location of the COM object. // // // Return Value: // ERROR_SUCCESS - indicated success // Any other value is an NT error code retrunde by GetLastError() // //-- ///////////////////////////////////////////////////////////////////////////// DWORD UnRegisterCOMObject( LPCTSTR ptszCOMObjectFileName, LPCTSTR ptszPathToCOMObject ) { DWORD dwStatus; HINSTANCE hLib = NULL; TCHAR tszComObjFileName[_MAX_PATH]; LPSTR pszEntryPoint; PFDLLREGISTERSERVER pfnRegisterServer; // ASSERT(ptszCOMObjectFileName != NULL); BUGBUG // ASSERT(ptszPathToCOMObject != NULL); // // Construct the file name. // wsprintf( tszComObjFileName, TEXT("%s\\%s"), ptszPathToCOMObject, ptszCOMObjectFileName ); // // Load the DLL. // hLib = LoadLibrary( tszComObjFileName ); if ( hLib != NULL ) { // // Get the DllRegisterServer entry point. // pfnRegisterServer = (PFDLLREGISTERSERVER) GetProcAddress( hLib, "DllUnregisterServer" ); if ( pfnRegisterServer != NULL ) { // // Call the entry point. // dwStatus = (*pfnRegisterServer)(); } else { dwStatus = GetLastError(); } FreeLibrary( hLib ); } else { dwStatus = GetLastError(); } return ( dwStatus ); } // UnRegisterCOMObject ///////////////////////////////////////////////////////////////////////////// //++ // // UnRegisterClusterCOMObjects // // Routine Description: // This function unregisters the COM objects that are components of Cluster // Server. // // Arguments: // hWnd - the handle to the parent window. // ptszPathToCOMObject - points to the location of the COM objects to be // unregistered.. // // Return Value: // (BOOL) TRUE - indicates success // (BOOL) FALSE - indicates that an error was encountered // //-- ///////////////////////////////////////////////////////////////////////////// BOOL UnRegisterClusterCOMObjects( HINSTANCE hInstance, LPCTSTR ptszPathToCOMObject ) { BOOL fReturnValue = (BOOL) TRUE; DWORD dwURCORv; TCHAR tszMessage[256]; // arbitrary size TCHAR tszFormatString[256]; // // Unregister CluAdMMC. // dwURCORv = UnRegisterCOMObject( TEXT("CluAdMMC.dll"), ptszPathToCOMObject ); if ( (dwURCORv != (DWORD) ERROR_SUCCESS) && (dwURCORv != (DWORD) ERROR_MOD_NOT_FOUND) ) { if ( LoadString( hInstance, IDS_ERROR_UNREGISTERING_COM_OBJECT, tszFormatString, 256 ) > 0 ) { wsprintf( tszMessage, tszFormatString, dwURCORv, TEXT("CluAdMMC.dll") ); MessageBox( NULL, tszMessage, NULL, MB_OK | MB_ICONEXCLAMATION ); } // Did LoadString succeed? fReturnValue = (BOOL) FALSE; } // // Unregister ClAdmWiz. // dwURCORv = UnRegisterCOMObject( TEXT("ClAdmWiz.dll"), ptszPathToCOMObject ); if ( (dwURCORv != (DWORD) ERROR_SUCCESS) && (dwURCORv != (DWORD) ERROR_MOD_NOT_FOUND) ) { if ( LoadString( hInstance, IDS_ERROR_UNREGISTERING_COM_OBJECT, tszFormatString, 256 ) > 0 ) { wsprintf( tszMessage, tszFormatString, dwURCORv, TEXT("ClAdmWiz.dll") ); MessageBox( NULL, tszMessage, NULL, MB_OK | MB_ICONEXCLAMATION ); } // Did LoadString succeed? fReturnValue = (BOOL) FALSE; } // // Unregister IISClEx3. // dwURCORv = UnRegisterCOMObject( TEXT("IISClEx3.dll"), ptszPathToCOMObject ); if ( (dwURCORv != (DWORD) ERROR_SUCCESS) && (dwURCORv != (DWORD) ERROR_MOD_NOT_FOUND) ) { if ( LoadString( hInstance, IDS_ERROR_UNREGISTERING_COM_OBJECT, tszFormatString, 256 ) > 0 ) { wsprintf( tszMessage, tszFormatString, dwURCORv, TEXT("IISClEx3.dll") ); MessageBox( NULL, tszMessage, NULL, MB_OK | MB_ICONEXCLAMATION ); } // Did LoadString succeed? fReturnValue = (BOOL) FALSE; } // // Unregister ClNetREx. // dwURCORv = UnRegisterCOMObject( TEXT("ClNetREx.dll"), ptszPathToCOMObject ); if ( (dwURCORv != (DWORD) ERROR_SUCCESS) && (dwURCORv != (DWORD) ERROR_MOD_NOT_FOUND) ) { if ( LoadString( hInstance, IDS_ERROR_UNREGISTERING_COM_OBJECT, tszFormatString, 256 ) > 0 ) { wsprintf( tszMessage, tszFormatString, dwURCORv, TEXT("ClNetREx.dll") ); MessageBox( NULL, tszMessage, NULL, MB_OK | MB_ICONEXCLAMATION ); } // Did LoadString succeed? fReturnValue = (BOOL) FALSE; } // // Unregister CluAdmEx. // dwURCORv = UnRegisterCOMObject( TEXT("CluAdmEx.dll"), ptszPathToCOMObject ); if ( (dwURCORv != (DWORD) ERROR_SUCCESS) && (dwURCORv != (DWORD) ERROR_MOD_NOT_FOUND) ) { if ( LoadString( hInstance, IDS_ERROR_UNREGISTERING_COM_OBJECT, tszFormatString, 256 ) > 0 ) { wsprintf( tszMessage, tszFormatString, dwURCORv, TEXT("CluAdmEx.dll") ); MessageBox( NULL, tszMessage, NULL, MB_OK | MB_ICONEXCLAMATION ); } // Did LoadString succeed? fReturnValue = (BOOL) FALSE; } return ( fReturnValue ); }