Windows2003-3790/inetsrv/iis/svcs/nntp/isrpc/main.cxx
2020-09-30 16:53:55 +02:00

236 lines
4.9 KiB
C++

/**********************************************************************/
/** 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 <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <winsock2.h>
#include <lm.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
//#include "dbgutil.h"
//
// Project include files.
//
//#include <inetcom.h>
//#include <inetamsg.h>
//#include <tcpproc.h>
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
//#include <svcloc.h>
//#define SECURITY_WIN32
//#include <sspi.h> // Security Support Provider APIs
//#include <schnlsp.h>
//#include <lonsi.hxx>
//#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