2025-04-27 07:49:33 -04:00

1405 lines
42 KiB
C

/* Copyright (c) 1996, Microsoft Corporation, all rights reserved
**
** loaddlls.c
** RAS DLL load routines
** Listed alphabetically
**
** 02/17/96 Steve Cobb
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <rpc.h>
#include <rasrpc.h>
#include <debug.h> // Trace and assert
#include <nouiutil.h>
#include <loaddlls.h> // Our public header
#include <rasrpclb.h>
/*----------------------------------------------------------------------------
** Constants
**----------------------------------------------------------------------------
*/
#ifdef UNICODE
#define SZ_RasConnectionNotification "RasConnectionNotificationW"
#define SZ_RasDeleteEntry "RasDeleteEntryW"
#define SZ_RasDial "RasDialW"
#define SZ_RasGetEntryDialParams "RasGetEntryDialParamsW"
#define SZ_RasEnumEntries "RasEnumEntriesW"
#define SZ_RasEnumConnections "RasEnumConnectionsW"
#define SZ_RasGetAutodialEnable "RasGetAutodialEnableW"
#define SZ_RasGetAutodialParam "RasGetAutodialParamW"
#define SZ_RasGetConnectStatus "RasGetConnectStatusW"
#define SZ_RasGetConnectResponse "RasGetConnectResponse"
#define SZ_RasGetCredentials "RasGetCredentialsW"
#define SZ_RasGetErrorString "RasGetErrorStringW"
#define SZ_RasGetProjectionInfo "RasGetProjectionInfoW"
#define SZ_RasGetSubEntryHandle "RasGetSubEntryHandleW"
#define SZ_RasSetAutodialEnable "RasSetAutodialEnableW"
#define SZ_RasSetAutodialParam "RasSetAutodialParamW"
#define SZ_RasSetCredentials "RasSetCredentialsW"
#define SZ_RasHangUp "RasHangUpW"
#define SZ_RasPhonebookDlg "RasPhonebookDlgW"
#define SZ_RasEntryDlg "RasEntryDlgW"
#define SZ_RouterEntryDlg "RouterEntryDlgW"
#define SZ_RasDialDlg "RasDialDlgW"
#define SZ_RasMonitorDlg "RasMonitorDlgW"
#define SZ_RasGetCountryInfo "RasGetCountryInfoW"
#else
#define SZ_RasConnectionNotification "RasConnectionNotificationA"
#define SZ_RasDeleteEntry "RasDeleteEntryA"
#define SZ_RasDial "RasDialA"
#define SZ_RasGetEntryDialParams "RasGetEntryDialParamsA"
#define SZ_RasEnumEntries "RasEnumEntriesA"
#define SZ_RasEnumConnections "RasEnumConnectionsA"
#define SZ_RasGetAutodialEnable "RasGetAutodialEnableA"
#define SZ_RasGetAutodialParam "RasGetAutodialParamA"
#define SZ_RasGetConnectStatus "RasGetConnectStatusA"
#define SZ_RasGetConnectResponse "RasGetConnectResponse"
#define SZ_RasGetCredentials "RasGetCredentialsA"
#define SZ_RasGetErrorString "RasGetErrorStringA"
#define SZ_RasGetProjectionInfo "RasGetProjectionInfoA"
#define SZ_RasGetSubEntryHandle "RasGetSubEntryHandleA"
#define SZ_RasSetAutodialEnable "RasSetAutodialEnableA"
#define SZ_RasSetAutodialParam "RasSetAutodialParamA"
#define SZ_RasSetCredentials "RasSetCredentialsA"
#define SZ_RasHangUp "RasHangUpA"
#define SZ_RasPhonebookDlg "RasPhonebookDlgA"
#define SZ_RouterEntryDlg "RouterEntryDlgA"
#define SZ_RasDialDlg "RasDialDlgA"
#define SZ_RasMonitorDlg "RasMonitorDlgA"
#define SZ_RasGetCountryInfo "RasGetCountryInfoA"
#endif
#define SZ_MprAdminInterfaceCreate "MprAdminInterfaceCreate"
#define SZ_MprAdminInterfaceSetCredentials "MprAdminInterfaceSetCredentials"
#define SZ_MprAdminServerConnect "MprAdminServerConnect"
#define SZ_MprAdminServerDisconnect "MprAdminServerDisconnect"
#define SZ_RasAdminServerConnect "RasAdminServerConnect"
#define SZ_RasAdminServerDisconnect "RasAdminServerDisconnect"
#define SZ_RasAdminBufferFree "RasAdminBufferFree"
#define SZ_RasAdminConnectionEnum "RasAdminConnectionEnum"
#define SZ_RasAdminConnectionGetInfo "RasAdminConnectionGetInfo"
#define SZ_RasAdminPortEnum "RasAdminPortEnum"
#define SZ_RasAdminPortGetInfo "RasAdminPortGetInfo"
#define SZ_RasAdminPortDisconnect "RasAdminPortDisconnect"
#define SZ_RasAdminUserSetInfo "RasAdminUserSetInfo"
/*----------------------------------------------------------------------------
** Globals
**----------------------------------------------------------------------------
*/
/* RASAPI32.DLL entry points.
*/
HINSTANCE g_hRasapi32Dll = NULL;
PRASCONNECTIONNOTIFICATION g_pRasConnectionNotification = NULL;
PRASDELETEENTRY g_pRasDeleteEntry = NULL;
PRASDIAL g_pRasDial = NULL;
PRASENUMENTRIES g_pRasEnumEntries = NULL;
PRASENUMCONNECTIONS g_pRasEnumConnections = NULL;
PRASGETCONNECTSTATUS g_pRasGetConnectStatus = NULL;
PRASGETCONNECTRESPONSE g_pRasGetConnectResponse = NULL;
PRASGETCREDENTIALS g_pRasGetCredentials = NULL;
PRASGETENTRYDIALPARAMS g_pRasGetEntryDialParams = NULL;
PRASGETERRORSTRING g_pRasGetErrorString = NULL;
PRASHANGUP g_pRasHangUp = NULL;
PRASGETAUTODIALENABLE g_pRasGetAutodialEnable = NULL;
PRASGETAUTODIALPARAM g_pRasGetAutodialParam = NULL;
PRASGETPROJECTIONINFO g_pRasGetProjectionInfo = NULL;
PRASSETAUTODIALENABLE g_pRasSetAutodialEnable = NULL;
PRASSETAUTODIALPARAM g_pRasSetAutodialParam = NULL;
PRASGETSUBENTRYHANDLE g_pRasGetSubEntryHandle = NULL;
PRASGETHPORT g_pRasGetHport = NULL;
PRASSETCREDENTIALS g_pRasSetCredentials = NULL;
PRASSETOLDPASSWORD g_pRasSetOldPassword = NULL;
PRASGETCOUNTRYINFO g_pRasGetCountryInfo = NULL;
/* RASDLG.DLL entry points
*/
HINSTANCE g_hRasdlgDll = NULL;
PRASPHONEBOOKDLG g_pRasPhonebookDlg = NULL;
PRASENTRYDLG g_pRasEntryDlg = NULL;
PROUTERENTRYDLG g_pRouterEntryDlg = NULL;
PRASDIALDLG g_pRasDialDlg = NULL;
PRASMONITORDLG g_pRasMonitorDlg = NULL;
/* RASMAN.DLL entry points
*/
HINSTANCE g_hRasmanDll = NULL;
PRASPORTCLEARSTATISTICS g_pRasPortClearStatistics = NULL;
PRASBUNDLECLEARSTATISTICS g_pRasBundleClearStatistics = NULL;
PRASBUNDLECLEARSTATISTICSEX g_pRasBundleClearStatisticsEx = NULL;
PRASDEVICEENUM g_pRasDeviceEnum = NULL;
PRASDEVICEGETINFO g_pRasDeviceGetInfo = NULL;
PRASFREEBUFFER g_pRasFreeBuffer = NULL;
PRASGETBUFFER g_pRasGetBuffer = NULL;
PRASPORTGETFRAMINGEX g_pRasPortGetFramingEx = NULL;
PRASGETINFO g_pRasGetInfo = NULL;
PRASINITIALIZE g_pRasInitialize = NULL;
PRASPORTCANCELRECEIVE g_pRasPortCancelReceive = NULL;
PRASPORTENUM g_pRasPortEnum = NULL;
PRASPORTGETINFO g_pRasPortGetInfo = NULL;
PRASPORTGETSTATISTICS g_pRasPortGetStatistics = NULL;
PRASBUNDLEGETSTATISTICS g_pRasBundleGetStatistics = NULL;
PRASPORTGETSTATISTICSEX g_pRasPortGetStatisticsEx = NULL;
PRASBUNDLEGETSTATISTICSEX g_pRasBundleGetStatisticsEx = NULL;
PRASPORTRECEIVE g_pRasPortReceive = NULL;
PRASPORTSEND g_pRasPortSend = NULL;
PRASPORTGETBUNDLE g_pRasPortGetBundle = NULL;
PRASGETDEVCONFIG g_pRasGetDevConfig = NULL;
PRASSETDEVCONFIG g_pRasSetDevConfig = NULL;
PRASPORTOPEN g_pRasPortOpen = NULL;
PRASPORTREGISTERSLIP g_pRasPortRegisterSlip = NULL;
PRASALLOCATEROUTE g_pRasAllocateRoute = NULL;
PRASACTIVATEROUTE g_pRasActivateRoute = NULL;
PRASACTIVATEROUTEEX g_pRasActivateRouteEx = NULL;
PRASDEVICESETINFO g_pRasDeviceSetInfo = NULL;
PRASDEVICECONNECT g_pRasDeviceConnect = NULL;
PRASPORTSETINFO g_pRasPortSetInfo = NULL;
PRASPORTCLOSE g_pRasPortClose = NULL;
PRASPORTLISTEN g_pRasPortListen = NULL;
PRASPORTCONNECTCOMPLETE g_pRasPortConnectComplete = NULL;
PRASPORTDISCONNECT g_pRasPortDisconnect = NULL;
PRASREQUESTNOTIFICATION g_pRasRequestNotification = NULL;
PRASPORTENUMPROTOCOLS g_pRasPortEnumProtocols = NULL;
PRASPORTSETFRAMING g_pRasPortSetFraming = NULL;
PRASPORTSETFRAMINGEX g_pRasPortSetFramingEx = NULL;
PRASSETCACHEDCREDENTIALS g_pRasSetCachedCredentials = NULL;
PRASGETDIALPARAMS g_pRasGetDialParams = NULL;
PRASSETDIALPARAMS g_pRasSetDialParams = NULL;
PRASCREATECONNECTION g_pRasCreateConnection = NULL;
PRASDESTROYCONNECTION g_pRasDestroyConnection = NULL;
PRASCONNECTIONENUM g_pRasConnectionEnum = NULL;
PRASADDCONNECTIONPORT g_pRasAddConnectionPort = NULL;
PRASENUMCONNECTIONPORTS g_pRasEnumConnectionPorts = NULL;
PRASGETCONNECTIONPARAMS g_pRasGetConnectionParams = NULL;
PRASSETCONNECTIONPARAMS g_pRasSetConnectionParams = NULL;
PRASGETCONNECTIONUSERDATA g_pRasGetConnectionUserData = NULL;
PRASSETCONNECTIONUSERDATA g_pRasSetConnectionUserData = NULL;
PRASGETPORTUSERDATA g_pRasGetPortUserData = NULL;
PRASSETPORTUSERDATA g_pRasSetPortUserData = NULL;
PRASADDNOTIFICATION g_pRasAddNotification = NULL;
PRASSIGNALNEWCONNECTION g_pRasSignalNewConnection = NULL;
PRASPPPSTOP g_pRasPppStop = NULL;
PRASPPPCALLBACK g_pRasPppCallback = NULL;
PRASPPPCHANGEPASSWORD g_pRasPppChangePassword = NULL;
PRASPPPGETINFO g_pRasPppGetInfo = NULL;
PRASPPPRETRY g_pRasPppRetry = NULL;
PRASPPPSTART g_pRasPppStart = NULL;
PRASSETIOCOMPLETIONPORT g_pRasSetIoCompletionPort = NULL;
PRASSENDPPPMESSAGETORASMAN g_pRasSendPppMessageToRasman = NULL;
/* MPRAPI.DLL entry points.
*/
HINSTANCE g_hMpradminDll = NULL;
PMPRADMININTERFACECREATE g_pMprAdminInterfaceCreate = NULL;
PMPRADMININTERFACESETCREDENTIALS g_pMprAdminInterfaceSetCredentials = NULL;
PMPRADMINSERVERCONNECT g_pMprAdminServerConnect = NULL;
PMPRADMINSERVERDISCONNECT g_pMprAdminServerDisconnect = NULL;
PRASADMINSERVERCONNECT g_pRasAdminServerConnect = NULL;
PRASADMINSERVERDISCONNECT g_pRasAdminServerDisconnect = NULL;
PRASADMINBUFFERFREE g_pRasAdminBufferFree = NULL;
PRASADMINCONNECTIONENUM g_pRasAdminConnectionEnum = NULL;
PRASADMINCONNECTIONGETINFO g_pRasAdminConnectionGetInfo = NULL;
PRASADMINPORTENUM g_pRasAdminPortEnum = NULL;
PRASADMINPORTGETINFO g_pRasAdminPortGetInfo = NULL;
PRASADMINPORTDISCONNECT g_pRasAdminPortDisconnect = NULL;
PRASADMINUSERSETINFO g_pRasAdminUserSetInfo = NULL;
//
// Miscellaneous DLLs
//
PGETINSTALLEDPROTOCOLS g_pGetInstalledProtocols = GetInstalledProtocols;
PGETUSERPREFERENCES g_pGetUserPreferences = GetUserPreferences;
PSETUSERPREFERENCES g_pSetUserPreferences = SetUserPreferences;
PGETSYSTEMDIRECTORY g_pGetSystemDirectory = GetSystemDirectory;
//
// RASRPC.DLL
//
RAS_RPC* g_pRpc = NULL;
BOOL g_fRasapi32PreviouslyLoaded;
BOOL g_fRasmanPreviouslyLoaded;
DWORD
RemoteGetInstalledProtocols(
void );
DWORD
RemoteGetInstalledProtocols(
void );
UINT WINAPI
RemoteGetSystemDirectory(
LPTSTR lpBuffer,
UINT uSize );
DWORD
RemoteGetUserPreferences(
OUT PBUSER* pPbuser,
IN DWORD dwMode );
DWORD APIENTRY
RemoteRasDeleteEntry(
LPTSTR lpszPhonebook,
LPTSTR lpszEntry );
DWORD APIENTRY
RemoteRasDeviceEnum(
PCHAR pszDeviceType,
PBYTE lpDevices,
PWORD pwcbDevices,
PWORD pwcDevices );
DWORD APIENTRY
RemoteRasEnumConnections(
LPRASCONN lpRasConn,
LPDWORD lpdwcbRasConn,
LPDWORD lpdwcRasConn );
DWORD APIENTRY
RemoteRasGetCountryInfo(
LPRASCTRYINFO lpRasCountryInfo,
LPDWORD lpdwcbRasCountryInfo );
DWORD APIENTRY
RemoteRasGetDevConfig(
HPORT hport,
PCHAR pszDeviceType,
PBYTE lpConfig,
LPDWORD lpcbConfig );
DWORD APIENTRY
RemoteRasGetErrorString(
UINT uErrorValue,
LPTSTR lpszBuf,
DWORD cbBuf );
DWORD APIENTRY
RemoteRasPortEnum(
PBYTE lpPorts,
PWORD pwcbPorts,
PWORD pwcPorts );
DWORD
RemoteSetUserPreferences(
OUT PBUSER* pPbuser,
IN DWORD dwMode );
DWORD APIENTRY
RemoteRasPortGetInfo(
HPORT porthandle,
PBYTE buffer,
PWORD pSize );
/*----------------------------------------------------------------------------
** Routines
**----------------------------------------------------------------------------
*/
BOOL
IsRasmanServiceRunning(
void )
/* Returns true if the PRASMAN service is running, false otherwise.
*/
{
BOOL fStatus;
SC_HANDLE schScm;
SC_HANDLE schRasman;
SERVICE_STATUS status;
fStatus = FALSE;
schScm = NULL;
schRasman = NULL;
do
{
schScm = OpenSCManager( NULL, NULL, GENERIC_READ );
if (!schScm)
break;
schRasman = OpenService(
schScm, TEXT( RASMAN_SERVICE_NAME ), SERVICE_QUERY_STATUS );
if (!schRasman)
break;
if (!QueryServiceStatus( schRasman, &status ))
break;
fStatus = (status.dwCurrentState == SERVICE_RUNNING);
}
while (FALSE);
if (schRasman)
CloseServiceHandle( schRasman );
if (schScm)
CloseServiceHandle( schScm );
TRACE1("IsRasmanServiceRunning=%d",fStatus);
return fStatus;
}
DWORD
LoadMpradminDll(
void )
/* Loads MPRAPI DLL and it's entry points.
** Returns 0 if successful, otherwise a non-zero error code.
*/
{
HINSTANCE h;
if (g_hMpradminDll)
return 0;
if (!(h = LoadLibrary(TEXT("MPRAPI.DLL")))
|| !(g_pMprAdminInterfaceCreate =
(PMPRADMININTERFACECREATE)GetProcAddress(
h, SZ_MprAdminInterfaceCreate))
|| !(g_pMprAdminInterfaceSetCredentials =
(PMPRADMININTERFACESETCREDENTIALS)GetProcAddress(
h, SZ_MprAdminInterfaceSetCredentials))
|| !(g_pMprAdminServerConnect =
(PMPRADMINSERVERCONNECT)GetProcAddress(
h, SZ_MprAdminServerConnect))
|| !(g_pMprAdminServerDisconnect =
(PMPRADMINSERVERDISCONNECT)GetProcAddress(
h, SZ_MprAdminServerDisconnect))
|| !(g_pRasAdminServerConnect =
(PRASADMINSERVERCONNECT)GetProcAddress(
h, SZ_RasAdminServerConnect))
|| !(g_pRasAdminServerDisconnect =
(PRASADMINSERVERDISCONNECT)GetProcAddress(
h, SZ_RasAdminServerDisconnect))
|| !(g_pRasAdminBufferFree =
(PRASADMINBUFFERFREE)GetProcAddress(
h, SZ_RasAdminBufferFree))
|| !(g_pRasAdminConnectionEnum =
(PRASADMINCONNECTIONENUM)GetProcAddress(
h, SZ_RasAdminConnectionEnum))
|| !(g_pRasAdminConnectionGetInfo =
(PRASADMINCONNECTIONGETINFO)GetProcAddress(
h, SZ_RasAdminConnectionGetInfo))
|| !(g_pRasAdminPortEnum =
(PRASADMINPORTENUM)GetProcAddress(
h, SZ_RasAdminPortEnum))
|| !(g_pRasAdminPortGetInfo =
(PRASADMINPORTGETINFO)GetProcAddress(
h, SZ_RasAdminPortGetInfo))
|| !(g_pRasAdminPortDisconnect =
(PRASADMINPORTDISCONNECT)GetProcAddress(
h, SZ_RasAdminPortDisconnect))
|| !(g_pRasAdminUserSetInfo =
(PRASADMINUSERSETINFO)GetProcAddress(
h, SZ_RasAdminUserSetInfo)) )
{
return GetLastError();
}
g_hMpradminDll = h;
return 0;
}
DWORD
LoadRasapi32Dll(
void )
/* Loads the RASAPI32.DLL and it's entrypoints.
**
** Returns 0 if successful, otherwise a non-0 error code.
*/
{
HINSTANCE h;
if (g_hRasapi32Dll)
return 0;
if (!(h = LoadLibrary( TEXT("RASAPI32.DLL") ))
|| !(g_pRasConnectionNotification =
(PRASCONNECTIONNOTIFICATION )GetProcAddress(
h, SZ_RasConnectionNotification ))
|| !(g_pRasDeleteEntry =
(PRASDELETEENTRY )GetProcAddress(
h, SZ_RasDeleteEntry ))
|| !(g_pRasDial =
(PRASDIAL )GetProcAddress(
h, SZ_RasDial ))
|| !(g_pRasEnumEntries =
(PRASENUMENTRIES )GetProcAddress(
h, SZ_RasEnumEntries ))
|| !(g_pRasEnumConnections =
(PRASENUMCONNECTIONS )GetProcAddress(
h, SZ_RasEnumConnections ))
|| !(g_pRasGetAutodialEnable =
(PRASGETAUTODIALENABLE )GetProcAddress(
h, SZ_RasGetAutodialEnable ))
|| !(g_pRasGetAutodialParam =
(PRASGETAUTODIALPARAM )GetProcAddress(
h, SZ_RasGetAutodialParam ))
|| !(g_pRasGetConnectStatus =
(PRASGETCONNECTSTATUS )GetProcAddress(
h, SZ_RasGetConnectStatus ))
|| !(g_pRasGetConnectResponse =
(PRASGETCONNECTRESPONSE )GetProcAddress(
h, SZ_RasGetConnectResponse ))
|| !(g_pRasGetCredentials =
(PRASGETCREDENTIALS )GetProcAddress(
h, SZ_RasGetCredentials ))
|| !(g_pRasGetEntryDialParams =
(PRASGETENTRYDIALPARAMS )GetProcAddress(
h, SZ_RasGetEntryDialParams ))
|| !(g_pRasGetErrorString =
(PRASGETERRORSTRING )GetProcAddress(
h, SZ_RasGetErrorString ))
|| !(g_pRasGetHport =
(PRASGETHPORT )GetProcAddress(
h, "RasGetHport" ))
|| !(g_pRasGetProjectionInfo =
(PRASGETPROJECTIONINFO )GetProcAddress(
h, SZ_RasGetProjectionInfo ))
|| !(g_pRasGetSubEntryHandle =
(PRASGETSUBENTRYHANDLE )GetProcAddress(
h, SZ_RasGetSubEntryHandle ))
|| !(g_pRasHangUp =
(PRASHANGUP )GetProcAddress(
h, SZ_RasHangUp ))
|| !(g_pRasSetAutodialEnable =
(PRASSETAUTODIALENABLE )GetProcAddress(
h, SZ_RasSetAutodialEnable ))
|| !(g_pRasSetAutodialParam =
(PRASSETAUTODIALPARAM )GetProcAddress(
h, SZ_RasSetAutodialParam ))
|| !(g_pRasSetCredentials =
(PRASSETCREDENTIALS )GetProcAddress(
h, SZ_RasSetCredentials ))
|| !(g_pRasSetOldPassword =
(PRASSETOLDPASSWORD )GetProcAddress(
h, "RasSetOldPassword" ))
|| !(g_pRasGetCountryInfo =
(PRASGETCOUNTRYINFO )GetProcAddress(
h, SZ_RasGetCountryInfo )))
{
return GetLastError();
}
g_hRasapi32Dll = h;
return 0;
}
DWORD
LoadRasdlgDll(
void )
/* Loads the RASDLG.DLL and it's entrypoints.
**
** Returns 0 if successful, otherwise a non-0 error code.
*/
{
HINSTANCE h;
if (g_hRasdlgDll)
return 0;
if (!(h = LoadLibrary( TEXT("RASDLG.DLL") ))
|| !(g_pRasPhonebookDlg =
(PRASPHONEBOOKDLG )GetProcAddress(
h, SZ_RasPhonebookDlg ))
|| !(g_pRasEntryDlg =
(PRASENTRYDLG )GetProcAddress(
h, SZ_RasEntryDlg ))
|| !(g_pRouterEntryDlg =
(PROUTERENTRYDLG )GetProcAddress(
h, SZ_RouterEntryDlg ))
|| !(g_pRasDialDlg =
(PRASDIALDLG )GetProcAddress(
h, SZ_RasDialDlg ))
|| !(g_pRasMonitorDlg =
(PRASMONITORDLG )GetProcAddress(
h, SZ_RasMonitorDlg )))
{
return GetLastError();
}
g_hRasdlgDll = h;
return 0;
}
DWORD
LoadRasmanDll(
void )
/* Loads the RASMAN.DLL and it's entrypoints.
**
** Returns 0 if successful, otherwise a non-0 error code.
*/
{
HINSTANCE h;
if (g_hRasmanDll)
return 0;
if (!(h = LoadLibrary( TEXT("RASMAN.DLL") ))
|| !(g_pRasPortClearStatistics =
(PRASPORTCLEARSTATISTICS )GetProcAddress(
h, "RasPortClearStatistics" ))
|| !(g_pRasBundleClearStatistics =
(PRASBUNDLECLEARSTATISTICS )GetProcAddress(
h, "RasBundleClearStatistics" ))
|| !(g_pRasBundleClearStatisticsEx =
(PRASBUNDLECLEARSTATISTICSEX ) GetProcAddress(
h, "RasBundleClearStatisticsEx"))
|| !(g_pRasDeviceEnum =
(PRASDEVICEENUM )GetProcAddress(
h, "RasDeviceEnum" ))
|| !(g_pRasDeviceGetInfo =
(PRASDEVICEGETINFO )GetProcAddress(
h, "RasDeviceGetInfo" ))
|| !(g_pRasFreeBuffer =
(PRASFREEBUFFER )GetProcAddress(
h, "RasFreeBuffer" ))
|| !(g_pRasGetBuffer =
(PRASGETBUFFER )GetProcAddress(
h, "RasGetBuffer" ))
|| !(g_pRasGetInfo =
(PRASGETINFO )GetProcAddress(
h, "RasGetInfo" ))
|| !(g_pRasInitialize =
(PRASINITIALIZE )GetProcAddress(
h, "RasInitialize" ))
|| !(g_pRasPortCancelReceive =
(PRASPORTCANCELRECEIVE )GetProcAddress(
h, "RasPortCancelReceive" ))
|| !(g_pRasPortEnum =
(PRASPORTENUM )GetProcAddress(
h, "RasPortEnum" ))
|| !(g_pRasPortGetInfo =
(PRASPORTGETINFO )GetProcAddress(
h, "RasPortGetInfo" ))
|| !(g_pRasPortGetFramingEx =
(PRASPORTGETFRAMINGEX )GetProcAddress(
h, "RasPortGetFramingEx" ))
|| !(g_pRasPortGetStatistics =
(PRASPORTGETSTATISTICS )GetProcAddress(
h, "RasPortGetStatistics" ))
|| !(g_pRasBundleGetStatistics =
(PRASBUNDLEGETSTATISTICS )GetProcAddress(
h, "RasBundleGetStatistics" ))
|| !(g_pRasPortGetStatisticsEx =
(PRASPORTGETSTATISTICSEX )GetProcAddress(
h, "RasPortGetStatisticsEx"))
|| !(g_pRasBundleGetStatisticsEx =
(PRASBUNDLEGETSTATISTICSEX)GetProcAddress(
h, "RasBundleGetStatisticsEx" ))
|| !(g_pRasPortReceive =
(PRASPORTRECEIVE )GetProcAddress(
h, "RasPortReceive" ))
|| !(g_pRasPortSend =
(PRASPORTSEND )GetProcAddress(
h, "RasPortSend" ))
|| !(g_pRasPortGetBundle =
(PRASPORTGETBUNDLE )GetProcAddress(
h, "RasPortGetBundle" ))
|| !(g_pRasGetDevConfig =
(PRASGETDEVCONFIG )GetProcAddress(
h, "RasGetDevConfig" ))
|| !(g_pRasSetDevConfig =
(PRASSETDEVCONFIG )GetProcAddress(
h, "RasSetDevConfig" ))
|| !(g_pRasPortClose =
(PRASPORTCLOSE )GetProcAddress(
h, "RasPortClose" ))
|| !(g_pRasPortListen =
(PRASPORTLISTEN )GetProcAddress(
h, "RasPortListen" ))
|| !(g_pRasPortConnectComplete =
(PRASPORTCONNECTCOMPLETE )GetProcAddress(
h, "RasPortConnectComplete" ))
|| !(g_pRasPortDisconnect =
(PRASPORTDISCONNECT )GetProcAddress(
h, "RasPortDisconnect" ))
|| !(g_pRasRequestNotification =
(PRASREQUESTNOTIFICATION )GetProcAddress(
h, "RasRequestNotification" ))
|| !(g_pRasPortEnumProtocols =
(PRASPORTENUMPROTOCOLS )GetProcAddress(
h, "RasPortEnumProtocols" ))
|| !(g_pRasPortSetFraming =
(PRASPORTSETFRAMING )GetProcAddress(
h, "RasPortSetFraming" ))
|| !(g_pRasPortSetFramingEx =
(PRASPORTSETFRAMINGEX )GetProcAddress(
h, "RasPortSetFramingEx" ))
|| !(g_pRasSetCachedCredentials =
(PRASSETCACHEDCREDENTIALS )GetProcAddress(
h, "RasSetCachedCredentials" ))
|| !(g_pRasGetDialParams =
(PRASGETDIALPARAMS )GetProcAddress(
h, "RasGetDialParams" ))
|| !(g_pRasSetDialParams =
(PRASSETDIALPARAMS )GetProcAddress(
h, "RasSetDialParams" ))
|| !(g_pRasCreateConnection =
(PRASCREATECONNECTION )GetProcAddress(
h, "RasCreateConnection" ))
|| !(g_pRasDestroyConnection =
(PRASDESTROYCONNECTION )GetProcAddress(
h, "RasDestroyConnection" ))
|| !(g_pRasConnectionEnum =
(PRASCONNECTIONENUM )GetProcAddress(
h, "RasConnectionEnum" ))
|| !(g_pRasAddConnectionPort =
(PRASADDCONNECTIONPORT )GetProcAddress(
h, "RasAddConnectionPort" ))
|| !(g_pRasEnumConnectionPorts =
(PRASENUMCONNECTIONPORTS )GetProcAddress(
h, "RasEnumConnectionPorts" ))
|| !(g_pRasGetConnectionParams =
(PRASGETCONNECTIONPARAMS )GetProcAddress(
h, "RasGetConnectionParams" ))
|| !(g_pRasSetConnectionParams =
(PRASSETCONNECTIONPARAMS )GetProcAddress(
h, "RasSetConnectionParams" ))
|| !(g_pRasGetConnectionUserData =
(PRASGETCONNECTIONUSERDATA )GetProcAddress(
h, "RasGetConnectionUserData" ))
|| !(g_pRasSetConnectionUserData =
(PRASSETCONNECTIONUSERDATA )GetProcAddress(
h, "RasSetConnectionUserData" ))
|| !(g_pRasGetPortUserData =
(PRASGETPORTUSERDATA )GetProcAddress(
h, "RasGetPortUserData" ))
|| !(g_pRasSetPortUserData =
(PRASSETPORTUSERDATA )GetProcAddress(
h, "RasSetPortUserData" ))
|| !(g_pRasAddNotification =
(PRASADDNOTIFICATION )GetProcAddress(
h, "RasAddNotification" ))
|| !(g_pRasSignalNewConnection =
(PRASSIGNALNEWCONNECTION )GetProcAddress(
h, "RasSignalNewConnection" ))
|| !(g_pRasPppStop =
(PRASPPPSTOP )GetProcAddress(
h, "RasPppStop" ))
|| !(g_pRasPppCallback =
(PRASPPPCALLBACK )GetProcAddress(
h, "RasPppCallback" ))
|| !(g_pRasPppChangePassword =
(PRASPPPCHANGEPASSWORD )GetProcAddress(
h, "RasPppChangePassword" ))
|| !(g_pRasPppGetInfo =
(PRASPPPGETINFO )GetProcAddress(
h, "RasPppGetInfo" ))
|| !(g_pRasPppRetry =
(PRASPPPRETRY )GetProcAddress(
h, "RasPppRetry" ))
|| !(g_pRasPppStart =
(PRASPPPSTART )GetProcAddress(
h, "RasPppStart" ))
|| !(g_pRasPortOpen =
(PRASPORTOPEN )GetProcAddress(
h, "RasPortOpen" ))
|| !(g_pRasPortRegisterSlip =
(PRASPORTREGISTERSLIP )GetProcAddress(
h, "RasPortRegisterSlip" ))
|| !(g_pRasAllocateRoute =
(PRASALLOCATEROUTE )GetProcAddress(
h, "RasAllocateRoute" ))
|| !(g_pRasActivateRoute =
(PRASACTIVATEROUTE )GetProcAddress(
h, "RasActivateRoute" ))
|| !(g_pRasActivateRouteEx =
(PRASACTIVATEROUTEEX )GetProcAddress(
h, "RasActivateRouteEx" ))
|| !(g_pRasDeviceSetInfo =
(PRASDEVICESETINFO )GetProcAddress(
h, "RasDeviceSetInfo" ))
|| !(g_pRasDeviceConnect =
(PRASDEVICECONNECT )GetProcAddress(
h, "RasDeviceConnect" ))
|| !(g_pRasPortSetInfo =
(PRASPORTSETINFO )GetProcAddress(
h, "RasPortSetInfo" ))
|| !(g_pRasSetIoCompletionPort =
(PRASSETIOCOMPLETIONPORT )GetProcAddress(
h, "RasSetIoCompletionPort" ))
|| !(g_pRasSendPppMessageToRasman =
(PRASSENDPPPMESSAGETORASMAN)GetProcAddress(
h, "RasSendPppMessageToRasman")))
{
return GetLastError();
}
g_hRasmanDll = h;
return 0;
}
DWORD
RasRPCBind(
IN LPWSTR lpwsServerName,
OUT HANDLE* phServer
)
{
RPC_STATUS RpcStatus;
LPWSTR lpwsStringBinding;
LPWSTR lpwsEndpoint;
RpcStatus = RpcStringBindingCompose(
NULL,
TEXT("ncacn_np"),
lpwsServerName,
TEXT("\\PIPE\\ROUTER"),
TEXT("Security=Impersonation Static True"),
&lpwsStringBinding);
if ( RpcStatus != RPC_S_OK )
{
return( I_RpcMapWin32Status( RpcStatus ) );
}
RpcStatus = RpcBindingFromStringBinding( lpwsStringBinding,
(handle_t *)phServer );
RpcStringFree( &lpwsStringBinding );
if ( RpcStatus != RPC_S_OK )
{
return( I_RpcMapWin32Status( RpcStatus ) );
}
return( NO_ERROR );
}
DWORD
LoadRasRpcDll(
LPTSTR lpszServer
)
{
DWORD dwErr;
RPC_STATUS rpcStatus;
HINSTANCE h;
//
// Handle the local server case up front.
//
if (lpszServer == NULL) {
DWORD dwErr;
if (g_fRasapi32PreviouslyLoaded) {
dwErr = LoadRasapi32Dll();
if (dwErr)
return dwErr;
g_fRasapi32PreviouslyLoaded = FALSE;
}
if (g_fRasmanPreviouslyLoaded) {
dwErr = LoadRasmanDll();
if (dwErr)
return dwErr;
g_fRasmanPreviouslyLoaded = FALSE;
}
return 0;
}
else
{
TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH + 1];
DWORD dwcbComputerName = sizeof (szComputerName);
/* Convert "\\server" to "server", if necessary.
*/
if (lpszServer[ 0 ] == TEXT('\\') && lpszServer[ 1 ] == TEXT('\\'))
lpszServer += 2;
}
//
// Free a previous RPC binding handle
// if it exists.
//
if (g_pRpc != NULL)
{
rpcStatus = RasRpcDisconnectServer(g_pRpc);
if (rpcStatus != RPC_S_OK )
{
return( rpcStatus );
}
}
dwErr = RasRpcConnectServer( lpszServer, (HANDLE*)&g_pRpc );
if ( dwErr != NO_ERROR )
{
return( dwErr );
}
//
// We have successfully bound with a
// server, so unload any of the existing
// DLLs, if they have been loaded.
//
g_fRasmanPreviouslyLoaded = (g_hRasmanDll != NULL);
if (g_fRasmanPreviouslyLoaded)
UnloadRasmanDll();
g_fRasapi32PreviouslyLoaded = (g_hRasapi32Dll != NULL);
if (g_fRasapi32PreviouslyLoaded)
UnloadRasapi32Dll();
//
// Remap the RPCable APIs.
//
g_pRasPortEnum = RemoteRasPortEnum;
g_pRasDeviceEnum = RemoteRasDeviceEnum;
g_pRasGetDevConfig = RemoteRasGetDevConfig;
g_pRasEnumConnections = RemoteRasEnumConnections;
g_pRasDeleteEntry = RemoteRasDeleteEntry;
g_pRasGetErrorString = RemoteRasGetErrorString;
g_pRasGetCountryInfo = RemoteRasGetCountryInfo;
g_pGetInstalledProtocols = RemoteGetInstalledProtocols;
g_pGetUserPreferences = RemoteGetUserPreferences;
g_pSetUserPreferences = RemoteSetUserPreferences;
g_pGetSystemDirectory = RemoteGetSystemDirectory;
g_pRasPortGetInfo = RemoteRasPortGetInfo;
return 0;
}
BOOL
Rasapi32DllLoaded(
void
)
{
return (g_hRasapi32Dll != NULL);
}
BOOL
RasRpcDllLoaded(
void
)
{
return (g_pRpc != NULL);
}
DWORD
RemoteGetInstalledProtocols(
void
)
{
DWORD dwStatus;
ASSERT(g_pRpc->hRpcBinding);
RpcTryExcept
{
dwStatus = RasRpcGetInstalledProtocols(g_pRpc->hRpcBinding);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
return dwStatus;
}
UINT WINAPI
RemoteGetSystemDirectory(
LPTSTR lpBuffer,
UINT uSize
)
{
DWORD dwStatus;
ASSERT(g_pRpc->hRpcBinding);
RpcTryExcept
{
dwStatus = RasRpcGetSystemDirectory(g_pRpc->hRpcBinding, lpBuffer, uSize);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
return dwStatus;
}
DWORD
RemoteGetUserPreferences(
OUT PBUSER* pPbuser,
IN DWORD dwMode
)
{
DWORD dwStatus;
RASRPC_PBUSER pbuser;
ASSERT(g_pRpc->hRpcBinding);
RtlZeroMemory(&pbuser, sizeof (RASRPC_PBUSER));
RpcTryExcept
{
dwStatus = RasRpcGetUserPreferences(g_pRpc->hRpcBinding, &pbuser, dwMode);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
if (dwStatus)
return dwStatus;
//
// Convert RPC format to RAS format.
//
return RpcToRasPbuser(pPbuser, &pbuser);
}
DWORD APIENTRY
RemoteRasDeleteEntry(
LPTSTR lpszPhonebook,
LPTSTR lpszEntry
)
{
DWORD dwStatus;
ASSERT(g_pRpc->hRpcBinding);
RpcTryExcept
{
dwStatus = RasRpcDeleteEntry(g_pRpc->hRpcBinding, lpszPhonebook, lpszEntry);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
return dwStatus;
}
DWORD APIENTRY
RemoteRasDeviceEnum(
PCHAR pszDeviceType,
PBYTE lpDevices,
PWORD pwcbDevices,
PWORD pwcDevices
)
{
DWORD dwStatus, dwDevices, dwcDevices;
dwDevices = *pwcbDevices;
dwcDevices = *pwcDevices;
ASSERT(g_pRpc);
RpcTryExcept
{
dwStatus = RasDeviceEnum((HANDLE)g_pRpc, pszDeviceType, lpDevices, &dwDevices, &dwcDevices);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
*pwcbDevices = (WORD)dwDevices;
*pwcDevices = (WORD)dwcDevices;
return dwStatus;
}
DWORD APIENTRY
RemoteRasEnumConnections(
LPRASCONN lpRasConn,
LPDWORD lpdwcbRasConn,
LPDWORD lpdwcRasConn
)
{
DWORD dwStatus;
DWORD dwcbBufSize = *lpdwcbRasConn;
ASSERT(g_pRpc);
RpcTryExcept
{
dwStatus = RasRpcEnumConnections(g_pRpc->hRpcBinding, (LPBYTE)lpRasConn,
lpdwcbRasConn, lpdwcRasConn, dwcbBufSize);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
return dwStatus;
}
DWORD APIENTRY
RemoteRasGetCountryInfo(
LPRASCTRYINFO lpRasCountryInfo,
LPDWORD lpdwcbRasCountryInfo
)
{
DWORD dwStatus;
ASSERT(g_pRpc->hRpcBinding);
RpcTryExcept
{
dwStatus = RasRpcGetCountryInfo(g_pRpc->hRpcBinding, (LPBYTE)lpRasCountryInfo, lpdwcbRasCountryInfo);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
return dwStatus;
}
DWORD APIENTRY
RemoteRasGetDevConfig(
HPORT hport,
PCHAR pszDeviceType,
PBYTE lpConfig,
LPDWORD lpcbConfig
)
{
DWORD dwStatus;
ASSERT(g_pRpc);
RpcTryExcept
{
dwStatus = RasGetDevConfig((HANDLE)g_pRpc, hport, pszDeviceType, lpConfig, lpcbConfig);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
return dwStatus;
}
DWORD APIENTRY
RemoteRasGetErrorString(
UINT uErrorValue,
LPTSTR lpszBuf,
DWORD cbBuf
)
{
DWORD dwStatus;
ASSERT(g_pRpc->hRpcBinding);
RpcTryExcept
{
dwStatus = RasRpcGetErrorString(g_pRpc->hRpcBinding, uErrorValue, lpszBuf, cbBuf);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
return dwStatus;
}
DWORD APIENTRY
RemoteRasPortEnum(
PBYTE lpPorts,
PWORD pwcbPorts,
PWORD pwcPorts
)
{
DWORD dwStatus, dwcbPorts, dwcPorts;
dwcbPorts = *pwcbPorts;
dwcPorts = *pwcPorts;
ASSERT(g_pRpc);
RpcTryExcept
{
dwStatus = RasPortEnum((HANDLE)g_pRpc, lpPorts, &dwcbPorts, &dwcPorts);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
*pwcbPorts = (WORD)dwcbPorts;
*pwcPorts = (WORD)dwcPorts;
return dwStatus;
}
DWORD
RemoteSetUserPreferences(
OUT PBUSER* pPbuser,
IN DWORD dwMode
)
{
DWORD dwStatus;
RASRPC_PBUSER pbuser;
ASSERT(g_pRpc->hRpcBinding);
//
// Convert the RAS format to RPC format.
//
dwStatus = RasToRpcPbuser(&pbuser, pPbuser);
if (dwStatus)
return dwStatus;
RpcTryExcept
{
dwStatus = RasRpcSetUserPreferences(g_pRpc->hRpcBinding, &pbuser, dwMode);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
return dwStatus;
}
DWORD
RemoteRasPortGetInfo(
HPORT porthandle,
PBYTE buffer,
PWORD pSize)
{
DWORD dwStatus, dwSize;
dwSize = *pSize;
RpcTryExcept
{
dwStatus = RasPortGetInfo((HANDLE)g_pRpc, porthandle, buffer, &dwSize);
}
RpcExcept(1)
{
dwStatus = RpcExceptionCode();
}
RpcEndExcept
*pSize = (WORD)dwSize;
return dwStatus;
}
VOID
UnloadMpradminDll(
void )
/* Unload the MPRAPI.DLL library and its entrypoints
*/
{
if (g_hMpradminDll)
{
HINSTANCE h;
g_pMprAdminInterfaceCreate = NULL;
g_pMprAdminInterfaceSetCredentials = NULL;
g_pMprAdminServerConnect = NULL;
g_pMprAdminServerDisconnect = NULL;
g_pRasAdminServerConnect = NULL;
g_pRasAdminServerDisconnect = NULL;
g_pRasAdminBufferFree = NULL;
g_pRasAdminConnectionEnum = NULL;
g_pRasAdminConnectionGetInfo = NULL;
g_pRasAdminPortEnum = NULL;
g_pRasAdminPortGetInfo = NULL;
g_pRasAdminPortDisconnect = NULL;
g_pRasAdminUserSetInfo = NULL;
h = g_hMpradminDll;
g_hMpradminDll = NULL;
FreeLibrary(h);
}
}
VOID
UnloadRasapi32Dll(
void )
/* Unload the RASAPI32.DLL library and it's entrypoints.
*/
{
if (g_hRasapi32Dll)
{
HINSTANCE h;
g_pRasConnectionNotification = NULL;
g_pRasDeleteEntry = NULL;
g_pRasDial = NULL;
g_pRasEnumEntries = NULL;
g_pRasEnumConnections = NULL;
g_pRasGetConnectStatus = NULL;
g_pRasGetConnectResponse = NULL;
g_pRasGetCredentials = NULL;
g_pRasGetErrorString = NULL;
g_pRasHangUp = NULL;
g_pRasGetAutodialEnable = NULL;
g_pRasGetAutodialParam = NULL;
g_pRasGetProjectionInfo = NULL;
g_pRasSetAutodialEnable = NULL;
g_pRasSetAutodialParam = NULL;
g_pRasGetSubEntryHandle = NULL;
g_pRasGetHport = NULL;
g_pRasSetCredentials = NULL;
g_pRasSetOldPassword = NULL;
g_pRasGetCountryInfo = NULL;
h = g_hRasapi32Dll;
g_hRasapi32Dll = NULL;
FreeLibrary( h );
}
}
VOID
UnloadRasdlgDll(
void )
/* Unload the RASDLG.DLL library and it's entrypoints.
*/
{
if (g_hRasdlgDll)
{
HINSTANCE h;
g_pRasPhonebookDlg = NULL;
g_pRasEntryDlg = NULL;
g_pRouterEntryDlg = NULL;
g_pRasDialDlg = NULL;
g_pRasMonitorDlg = NULL;
h = g_hRasdlgDll;
g_hRasdlgDll = NULL;
FreeLibrary( h );
}
}
VOID
UnloadRasmanDll(
void )
/* Unload the RASMAN.DLL library and it's entrypoints.
*/
{
if (g_hRasmanDll)
{
HINSTANCE h;
g_pRasPortClearStatistics = NULL;
g_pRasDeviceEnum = NULL;
g_pRasDeviceGetInfo = NULL;
g_pRasFreeBuffer = NULL;
g_pRasGetBuffer = NULL;
g_pRasPortGetFramingEx = NULL;
g_pRasGetInfo = NULL;
g_pRasInitialize = NULL;
g_pRasPortCancelReceive = NULL;
g_pRasPortEnum = NULL;
g_pRasPortGetInfo = NULL;
g_pRasPortGetStatistics = NULL;
g_pRasPortReceive = NULL;
g_pRasPortSend = NULL;
g_pRasPortGetBundle = NULL;
g_pRasGetDevConfig = NULL;
g_pRasSetDevConfig = NULL;
g_pRasPortOpen = NULL;
g_pRasPortRegisterSlip = NULL;
g_pRasAllocateRoute = NULL;
g_pRasActivateRoute = NULL;
g_pRasActivateRouteEx = NULL;
g_pRasDeviceSetInfo = NULL;
g_pRasDeviceConnect = NULL;
g_pRasPortSetInfo = NULL;
g_pRasPortClose = NULL;
g_pRasPortListen = NULL;
g_pRasPortConnectComplete = NULL;
g_pRasPortDisconnect = NULL;
g_pRasRequestNotification = NULL;
g_pRasPortEnumProtocols = NULL;
g_pRasPortSetFraming = NULL;
g_pRasPortSetFramingEx = NULL;
g_pRasSetCachedCredentials = NULL;
g_pRasGetDialParams = NULL;
g_pRasSetDialParams = NULL;
g_pRasCreateConnection = NULL;
g_pRasDestroyConnection = NULL;
g_pRasConnectionEnum = NULL;
g_pRasAddConnectionPort = NULL;
g_pRasEnumConnectionPorts = NULL;
g_pRasGetConnectionParams = NULL;
g_pRasSetConnectionParams = NULL;
g_pRasGetConnectionUserData = NULL;
g_pRasSetConnectionUserData = NULL;
g_pRasGetPortUserData = NULL;
g_pRasSetPortUserData = NULL;
g_pRasAddNotification = NULL;
g_pRasSignalNewConnection = NULL;
g_pRasPppStop = NULL;
g_pRasPppCallback = NULL;
g_pRasPppChangePassword = NULL;
g_pRasPppGetInfo = NULL;
g_pRasPppRetry = NULL;
g_pRasPppStart = NULL;
g_pRasSetIoCompletionPort = NULL;
h = g_hRasmanDll;
g_hRasmanDll = NULL;
FreeLibrary( h );
}
}
VOID
UnloadRasRpcDll(
void
)
{
g_pRasPortEnum = NULL;
g_pRasDeviceEnum = NULL;
g_pRasGetDevConfig = NULL;
g_pRasEnumConnections = NULL;
g_pRasDeleteEntry = NULL;
g_pRasGetErrorString = NULL;
g_pRasGetCountryInfo = NULL;
g_pGetInstalledProtocols = GetInstalledProtocols;
g_pGetUserPreferences = GetUserPreferences;
g_pSetUserPreferences = SetUserPreferences;
g_pGetSystemDirectory = GetSystemDirectory;
g_pRasPortGetInfo = NULL;
//
// Release the binding resources.
//
(void)RasRpcDisconnectServer(g_pRpc);
}