You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
260 lines
7.1 KiB
260 lines
7.1 KiB
/********************************************************************/
|
|
/** 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 ) )
|
|
{
|
|
DWORD i;
|
|
BOOL bCalled = FALSE;
|
|
|
|
for (i=0; i<gblDDMConfigInfo.NumAdminDlls; i++)
|
|
{
|
|
PADMIN_DLL_CALLBACKS AdminDllCallbacks = &gblDDMConfigInfo.AdminDllCallbacks[i];
|
|
if (AdminDllCallbacks[i].lpfnMprAdminGetIpAddressForUser!=NULL)
|
|
{
|
|
dwRetCode = RasSrvrInitialize(
|
|
AdminDllCallbacks[i].lpfnMprAdminGetIpAddressForUser,
|
|
AdminDllCallbacks[i].lpfnMprAdminReleaseIpAddress );
|
|
|
|
bCalled = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
if (!bCalled)
|
|
{
|
|
dwRetCode = RasSrvrInitialize(NULL, NULL);
|
|
}
|
|
|
|
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 ) )
|
|
{
|
|
DWORD i;
|
|
BOOL bCalled = FALSE;
|
|
|
|
for (i=0; i<gblDDMConfigInfo.NumAdminDlls; i++)
|
|
{
|
|
PADMIN_DLL_CALLBACKS AdminDllCallbacks = &gblDDMConfigInfo.AdminDllCallbacks[i];
|
|
if (AdminDllCallbacks[i].lpfnMprAdminGetIpAddressForUser!=NULL)
|
|
{
|
|
dwRetCode = RasSrvrInitialize(
|
|
AdminDllCallbacks[i].lpfnMprAdminGetIpAddressForUser,
|
|
AdminDllCallbacks[i].lpfnMprAdminReleaseIpAddress );
|
|
|
|
bCalled = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
if (!bCalled)
|
|
{
|
|
dwRetCode = RasSrvrInitialize(NULL, NULL);
|
|
}
|
|
|
|
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 );
|
|
}
|