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 );
|
||
}
|