/**********************************************************************/ /** Microsoft Windows NT **/ /** Copyright(c) Microsoft Corp., 1994 **/ /**********************************************************************/ /* main.cxx Library initialization for infocomm.dll -- Internet Information Services Common dll. FILE HISTORY: Johnl 06-Oct-1994 Created. */ #ifndef dllexp #define dllexp __declspec( dllexport ) #endif // // System include files. // #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include #include #include #include #include #include #include //#include "dbgutil.h" // // Project include files. // //#include //#include //#include #ifdef __cplusplus } // extern "C" #endif // __cplusplus //#include //#define SECURITY_WIN32 //#include // Security Support Provider APIs //#include //#include //#include "globals.hxx" #include "isrpc.hxx" #include "isrpcexp.h" PISRPC g_pIsrpc = NULL; HINSTANCE g_hDll = NULL; PISRPC sm_isrpc = NULL; BOOL InitializeServiceRpc( IN LPCSTR pszServiceName, IN RPC_IF_HANDLE hRpcInterface ); BOOL CleanupServiceRpc( VOID ); extern "C" BOOL WINAPI DLLEntry( HINSTANCE hDll, DWORD dwReason, LPVOID lpvReserved ) { BOOL fReturn = TRUE; switch ( dwReason ) { case DLL_PROCESS_ATTACH: g_hDll = hDll; break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: default: break ; } return ( fReturn); } // main() BOOL InitializeServiceRpc( IN LPCSTR pszServiceName, IN RPC_IF_HANDLE hRpcInterface ) /*++ Description: Initializes the rpc endpoint for the infocomm service. Arguments: pszServiceName - pointer to null-terminated string containing the name of the service. hRpcInterface - Handle for RPC interface. Returns: Win32 Error Code. --*/ { DWORD dwError = NO_ERROR; PISRPC pIsrpc; //DBG_ASSERT( pszServiceName != NULL); //DBG_ASSERT( sm_isrpc == NULL ); pIsrpc = new ISRPC( pszServiceName); if ( pIsrpc == NULL) { dwError = ERROR_NOT_ENOUGH_MEMORY; goto exit; } // // bind over Named pipe only. // If needed to bind over TCP, bind with bit flag ISRPC_OVER_TCPIP on. // dwError = pIsrpc->AddProtocol( ISRPC_OVER_TCPIP | ISRPC_OVER_NP | ISRPC_OVER_LPC ); if( (dwError == RPC_S_DUPLICATE_ENDPOINT) || (dwError == RPC_S_OK) ) { dwError = pIsrpc->RegisterInterface(hRpcInterface); } if ( dwError != RPC_S_OK ) { goto exit; } // // Start the RPC listen thread // #if 0 dwError = pIsrpc->StartServer( ); #endif exit: if ( dwError != NO_ERROR ) { //DBGPRINTF(( DBG_CONTEXT, // "Cannot start RPC Server for %s, error %lu\n", // pszServiceName, dwError )); delete pIsrpc; SetLastError(dwError); return(FALSE); } sm_isrpc = pIsrpc; return(TRUE); } // IIS_SERVICE::InitializeServiceRpc BOOL CleanupServiceRpc( VOID ) /*++ Description: Cleanup the data stored and services running. This function should be called only after freeing all the services running using this DLL. This function is called typically when the DLL is unloaded. Arguments: pszServiceName - pointer to null-terminated string containing the name of the service. hRpcInterface - Handle for RPC interface. Returns: Win32 Error Code. --*/ { DWORD dwError = NO_ERROR; if ( sm_isrpc == NULL ) { //DBGPRINTF((DBG_CONTEXT, // "no isrpc object to cleanup. Returning success\n")); return(TRUE); } #if 0 (VOID) sm_isrpc->StopServer( ); #endif //dwError = sm_isrpc->CleanupData(); dwError = sm_isrpc->UnRegisterInterface(); if( dwError != RPC_S_OK ) { //DBGPRINTF(( DBG_CONTEXT, // "ISRPC(%08x) Cleanup returns %lu\n", sm_isrpc, dwError )); //DBG_ASSERT( !"RpcServerUnregisterIf failure" ); SetLastError( dwError); } delete sm_isrpc; sm_isrpc = NULL; return TRUE; } // CleanupServiceRpc