227 lines
5.8 KiB
C
227 lines
5.8 KiB
C
|
/********************************************************************/
|
|||
|
/** Copyright(c) 1985-1997 Microsoft Corporation. **/
|
|||
|
/********************************************************************/
|
|||
|
|
|||
|
//***
|
|||
|
//
|
|||
|
// Filename: pnphand.c
|
|||
|
//
|
|||
|
// Description: Will receive and handle pnp notifications to add/remove devices
|
|||
|
//
|
|||
|
// History: May 11,1997 NarenG Created original version.
|
|||
|
//
|
|||
|
#include "ddm.h"
|
|||
|
#include "timer.h"
|
|||
|
#include "handlers.h"
|
|||
|
#include "objects.h"
|
|||
|
#include "util.h"
|
|||
|
#include "routerif.h"
|
|||
|
#include <raserror.h>
|
|||
|
#include <rassrvr.h>
|
|||
|
#include <rasppp.h>
|
|||
|
#include <ddmif.h>
|
|||
|
#include <serial.h>
|
|||
|
#include <string.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <memory.h>
|
|||
|
|
|||
|
//**
|
|||
|
//
|
|||
|
// Call: DdmDevicePnpHandler
|
|||
|
//
|
|||
|
// Returns: NO_ERROR - Success
|
|||
|
// Non-zero returns - Failure
|
|||
|
//
|
|||
|
// Description: Will handle and act upon a device addition or removal.
|
|||
|
//
|
|||
|
DWORD
|
|||
|
DdmDevicePnpHandler(
|
|||
|
HANDLE pdwArg
|
|||
|
)
|
|||
|
{
|
|||
|
PNP_EVENT_NOTIF * ppnpEvent = ( PPNP_EVENT_NOTIF )pdwArg;
|
|||
|
PPP_MESSAGE PppMessage;
|
|||
|
|
|||
|
ZeroMemory( &PppMessage, sizeof( PppMessage ) );
|
|||
|
|
|||
|
PppMessage.dwMsgId = PPPDDMMSG_PnPNotification;
|
|||
|
|
|||
|
PppMessage.ExtraInfo.DdmPnPNotification.PnPNotification = *ppnpEvent;
|
|||
|
|
|||
|
SendPppMessageToDDM( &PppMessage );
|
|||
|
|
|||
|
LocalFree( ppnpEvent );
|
|||
|
|
|||
|
return( NO_ERROR );
|
|||
|
}
|
|||
|
|
|||
|
//**
|
|||
|
//
|
|||
|
// Call: ChangeNotificationEventHandler
|
|||
|
//
|
|||
|
// Returns: NO_ERROR - Success
|
|||
|
// Non-zero returns - Failure
|
|||
|
//
|
|||
|
// Description:
|
|||
|
//
|
|||
|
VOID
|
|||
|
ChangeNotificationEventHandler(
|
|||
|
VOID
|
|||
|
)
|
|||
|
{
|
|||
|
DWORD dwRetCode;
|
|||
|
BOOL fIpAllowed = FALSE;
|
|||
|
|
|||
|
DDMTRACE( "ChangeNotificationEventHandler called" );
|
|||
|
|
|||
|
dwRetCode = LoadDDMParameters( gblDDMConfigInfo.hkeyParameters,
|
|||
|
&fIpAllowed );
|
|||
|
|
|||
|
DeviceObjIterator( DeviceObjForceIpSec, FALSE, NULL );
|
|||
|
|
|||
|
if ( fIpAllowed && ( !gblDDMConfigInfo.fRasSrvrInitialized ) )
|
|||
|
{
|
|||
|
dwRetCode = RasSrvrInitialize(
|
|||
|
gblDDMConfigInfo.lpfnMprAdminGetIpAddressForUser,
|
|||
|
gblDDMConfigInfo.lpfnMprAdminReleaseIpAddress );
|
|||
|
|
|||
|
if ( dwRetCode != NO_ERROR )
|
|||
|
{
|
|||
|
DDMLogErrorString( ROUTERLOG_CANT_INITIALIZE_IP_SERVER,
|
|||
|
0, NULL, dwRetCode, 0 );
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
gblDDMConfigInfo.fRasSrvrInitialized = TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if ( NULL != gblDDMConfigInfo.lpfnRasAuthConfigChangeNotification )
|
|||
|
{
|
|||
|
gblDDMConfigInfo.lpfnRasAuthConfigChangeNotification(
|
|||
|
gblDDMConfigInfo.dwLoggingLevel );
|
|||
|
}
|
|||
|
|
|||
|
if ( NULL != gblDDMConfigInfo.lpfnRasAcctConfigChangeNotification )
|
|||
|
{
|
|||
|
gblDDMConfigInfo.lpfnRasAcctConfigChangeNotification(
|
|||
|
gblDDMConfigInfo.dwLoggingLevel );
|
|||
|
}
|
|||
|
|
|||
|
PppDdmChangeNotification( gblDDMConfigInfo.dwServerFlags,
|
|||
|
gblDDMConfigInfo.dwLoggingLevel );
|
|||
|
|
|||
|
RegNotifyChangeKeyValue( gblDDMConfigInfo.hkeyParameters,
|
|||
|
TRUE,
|
|||
|
REG_NOTIFY_CHANGE_LAST_SET,
|
|||
|
gblSupervisorEvents[DDM_EVENT_CHANGE_NOTIFICATION],
|
|||
|
TRUE );
|
|||
|
RegNotifyChangeKeyValue( gblDDMConfigInfo.hkeyAccounting,
|
|||
|
TRUE,
|
|||
|
REG_NOTIFY_CHANGE_LAST_SET,
|
|||
|
gblSupervisorEvents[DDM_EVENT_CHANGE_NOTIFICATION1],
|
|||
|
TRUE );
|
|||
|
|
|||
|
RegNotifyChangeKeyValue( gblDDMConfigInfo.hkeyAuthentication,
|
|||
|
TRUE,
|
|||
|
REG_NOTIFY_CHANGE_LAST_SET,
|
|||
|
gblSupervisorEvents[DDM_EVENT_CHANGE_NOTIFICATION2],
|
|||
|
TRUE );
|
|||
|
}
|
|||
|
|
|||
|
//**
|
|||
|
//
|
|||
|
// Call: DDMTransportCreate
|
|||
|
//
|
|||
|
// Returns: NO_ERROR - Success
|
|||
|
// Non-zero returns - Failure
|
|||
|
//
|
|||
|
// Description:
|
|||
|
//
|
|||
|
DWORD
|
|||
|
DDMTransportCreate(
|
|||
|
IN DWORD dwTransportId
|
|||
|
)
|
|||
|
{
|
|||
|
static const TCHAR c_szRegKeyRemoteAccessParams[]
|
|||
|
= TEXT("SYSTEM\\CurrentControlSet\\Services\\RemoteAccess\\Parameters");
|
|||
|
DWORD dwRetCode = NO_ERROR;
|
|||
|
BOOL fEnabled = FALSE;
|
|||
|
HKEY hKey = NULL;
|
|||
|
|
|||
|
DDMTRACE1( "DDMTransportCreate called for Transport Id = %d", dwTransportId );
|
|||
|
|
|||
|
//
|
|||
|
// Find out if this transport is set to allow for dialin clients
|
|||
|
//
|
|||
|
|
|||
|
dwRetCode = RegOpenKey( HKEY_LOCAL_MACHINE, c_szRegKeyRemoteAccessParams, &hKey );
|
|||
|
|
|||
|
if ( dwRetCode != NO_ERROR )
|
|||
|
{
|
|||
|
return( dwRetCode );
|
|||
|
}
|
|||
|
|
|||
|
dwRetCode = lProtocolEnabled( hKey, dwTransportId, TRUE, FALSE, &fEnabled );
|
|||
|
|
|||
|
if ( dwRetCode != NO_ERROR )
|
|||
|
{
|
|||
|
return( dwRetCode );
|
|||
|
}
|
|||
|
|
|||
|
RegCloseKey( hKey );
|
|||
|
|
|||
|
//
|
|||
|
// Not enabled for dialin so we are done
|
|||
|
//
|
|||
|
|
|||
|
if ( !fEnabled )
|
|||
|
{
|
|||
|
return( NO_ERROR );
|
|||
|
}
|
|||
|
|
|||
|
if ( ( dwTransportId == PID_IP ) && ( !gblDDMConfigInfo.fRasSrvrInitialized ) )
|
|||
|
{
|
|||
|
dwRetCode = RasSrvrInitialize(
|
|||
|
gblDDMConfigInfo.lpfnMprAdminGetIpAddressForUser,
|
|||
|
gblDDMConfigInfo.lpfnMprAdminReleaseIpAddress );
|
|||
|
|
|||
|
if ( dwRetCode != NO_ERROR )
|
|||
|
{
|
|||
|
DDMLogErrorString( ROUTERLOG_CANT_INITIALIZE_IP_SERVER,
|
|||
|
0, NULL, dwRetCode, 0 );
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
gblDDMConfigInfo.fRasSrvrInitialized = TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Insert allowed protocols in the ServerFlags which will be sent to PPP engine
|
|||
|
//
|
|||
|
|
|||
|
switch( dwTransportId )
|
|||
|
{
|
|||
|
case PID_IP:
|
|||
|
gblDDMConfigInfo.dwServerFlags |= PPPCFG_ProjectIp;
|
|||
|
break;
|
|||
|
|
|||
|
case PID_IPX:
|
|||
|
gblDDMConfigInfo.dwServerFlags |= PPPCFG_ProjectIpx;
|
|||
|
break;
|
|||
|
|
|||
|
case PID_ATALK:
|
|||
|
gblDDMConfigInfo.dwServerFlags |= PPPCFG_ProjectAt;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
PppDdmChangeNotification( gblDDMConfigInfo.dwServerFlags,
|
|||
|
gblDDMConfigInfo.dwLoggingLevel );
|
|||
|
|
|||
|
return( dwRetCode );
|
|||
|
}
|