/* Copyright (c) 1996, Microsoft Corporation, all rights reserved
**
** loaddlls.h
** RAS DLL load public header
**
** 02/17/96 Steve Cobb
*/

#ifndef _LOADDLLS_H_
#define _LOADDLLS_H_


#include <ras.h>    // Win32 RAS APIs
#include <rasdlg.h> // Win32 RAS UI APIs
#include <rasman.h> // RAS connection manager service
#include <rasppp.h> // PPP structure definitions

#define RASMERGE

/*----------------------------------------------------------------------------
** Datatypes and global declarations (defined in loaddlls.c)
**----------------------------------------------------------------------------
*/

/* RASAPI32.DLL entry points.
*/
#ifndef RASMERGE
extern HINSTANCE g_hRasapi32Dll;
#endif

typedef DWORD (APIENTRY * PRASCONNECTIONNOTIFICATION)( HRASCONN, HANDLE, DWORD );
extern PRASCONNECTIONNOTIFICATION g_pRasConnectionNotification;

typedef DWORD (APIENTRY * PRASDELETEENTRY)( LPTSTR, LPTSTR );
extern PRASDELETEENTRY g_pRasDeleteEntry;

typedef DWORD (APIENTRY * PRASDIAL)( LPRASDIALEXTENSIONS, LPTSTR, LPRASDIALPARAMS, DWORD, LPVOID, LPHRASCONN );
extern PRASDIAL g_pRasDial;

typedef DWORD (APIENTRY * PRASENUMENTRIES)( LPTSTR, LPTSTR, LPRASENTRYNAME, LPDWORD, LPDWORD );
extern PRASENUMENTRIES g_pRasEnumEntries;

typedef DWORD (APIENTRY * PRASENUMCONNECTIONS)( LPRASCONN, LPDWORD, LPDWORD );
extern PRASENUMCONNECTIONS g_pRasEnumConnections;

typedef DWORD (APIENTRY * PRASGETCONNECTSTATUS)( HRASCONN, LPRASCONNSTATUS );
extern PRASGETCONNECTSTATUS g_pRasGetConnectStatus;

typedef VOID (APIENTRY * PRASGETCONNECTRESPONSE)( HRASCONN, CHAR* );
extern PRASGETCONNECTRESPONSE g_pRasGetConnectResponse;

typedef DWORD (APIENTRY * PRASGETCREDENTIALS)( LPTSTR, LPTSTR, LPRASCREDENTIALS );
extern PRASGETCREDENTIALS g_pRasGetCredentials;

typedef DWORD (APIENTRY * PRASGETENTRYDIALPARAMS)( LPTSTR, LPRASDIALPARAMS, LPBOOL );
extern PRASGETENTRYDIALPARAMS g_pRasGetEntryDialParams;

typedef DWORD (APIENTRY * PRASGETERRORSTRING)( UINT, LPTSTR, DWORD );
extern PRASGETERRORSTRING g_pRasGetErrorString;

typedef DWORD (APIENTRY * PRASHANGUP)( HRASCONN );
extern PRASHANGUP g_pRasHangUp;

typedef DWORD (APIENTRY * PRASGETAUTODIALENABLE)( DWORD, LPBOOL );
extern PRASGETAUTODIALENABLE g_pRasGetAutodialEnable;

typedef DWORD (APIENTRY * PRASGETAUTODIALPARAM)( DWORD, LPVOID, LPDWORD );
extern PRASGETAUTODIALPARAM g_pRasGetAutodialParam;

typedef DWORD (APIENTRY * PRASGETPROJECTIONINFO)( HRASCONN, RASPROJECTION, LPVOID, LPDWORD );
extern PRASGETPROJECTIONINFO g_pRasGetProjectionInfo;

typedef DWORD (APIENTRY * PRASSETAUTODIALENABLE)( DWORD, BOOL );
extern PRASSETAUTODIALENABLE g_pRasSetAutodialEnable;

typedef DWORD (APIENTRY * PRASSETAUTODIALPARAM)( DWORD, LPVOID, DWORD );
extern PRASSETAUTODIALPARAM g_pRasSetAutodialParam;

typedef DWORD (APIENTRY * PRASGETSUBENTRYHANDLE)( HRASCONN, DWORD, LPHRASCONN );
extern PRASGETSUBENTRYHANDLE g_pRasGetSubEntryHandle;

typedef HPORT (APIENTRY * PRASGETHPORT)( HRASCONN );
extern PRASGETHPORT g_pRasGetHport;

typedef DWORD (APIENTRY * PRASSETCREDENTIALS)( LPTSTR, LPTSTR, LPRASCREDENTIALS, BOOL );
extern PRASSETCREDENTIALS g_pRasSetCredentials;

typedef DWORD (APIENTRY * PRASSETOLDPASSWORD)( HRASCONN, CHAR* );
extern PRASSETOLDPASSWORD g_pRasSetOldPassword;

typedef DWORD (APIENTRY * PRASGETCOUNTRYINFO)( LPRASCTRYINFO, LPDWORD );
extern PRASGETCOUNTRYINFO g_pRasGetCountryInfo;

typedef DWORD (APIENTRY * PRASINVOKEEAPUI)(HRASCONN, DWORD dwSubEntry, LPRASDIALEXTENSIONS, HWND );
extern PRASINVOKEEAPUI g_pRasInvokeEapUI;

typedef DWORD (APIENTRY * PRASSETEAPUSERDATA)( HANDLE, LPCTSTR, LPCTSTR, LPBYTE, LPDWORD );
extern PRASSETEAPUSERDATA g_pRasSetEapUserData;

typedef DWORD (APIENTRY * PRASGETENTRYPROPERTIES) (LPCTSTR, LPCTSTR, LPRASENTRY, LPDWORD, LPBYTE, LPDWORD);
extern PRASGETENTRYPROPERTIES g_pRasGetEntryProperties;

typedef DWORD (APIENTRY * PRASVALIDATEENTRYNAME) (LPCWSTR, LPCWSTR);
extern PRASVALIDATEENTRYNAME g_pRasValidateEntryName;


/* RASDLG.DLL entry points
*/
#ifndef RASMERGE
extern HINSTANCE g_hRasdlgDll;
#endif

typedef DWORD (APIENTRY * PRASPHONEBOOKDLG)( LPTSTR, LPTSTR, LPRASPBDLG );
extern PRASPHONEBOOKDLG g_pRasPhonebookDlg;

typedef DWORD (APIENTRY * PRASENTRYDLG)( LPTSTR, LPTSTR, LPRASENTRYDLG );
extern PRASENTRYDLG g_pRasEntryDlg;

typedef DWORD (APIENTRY * PROUTERENTRYDLG)( LPTSTR, LPTSTR, LPTSTR, LPRASENTRYDLG );
extern PROUTERENTRYDLG g_pRouterEntryDlg;

typedef DWORD (APIENTRY * PRASDIALDLG)( LPTSTR, LPTSTR, LPTSTR, LPRASDIALDLG );
extern PRASDIALDLG g_pRasDialDlg;


/* RASMAN.DLL entry points
*/
#ifndef RASMERGE
extern HINSTANCE g_hRasmanDll;
#endif

typedef DWORD (APIENTRY * PRASPORTCLEARSTATISTICS)( HANDLE, HPORT );
extern PRASPORTCLEARSTATISTICS g_pRasPortClearStatistics;

typedef DWORD (APIENTRY * PRASBUNDLECLEARSTATISTICS)( HANDLE, HPORT );
extern PRASBUNDLECLEARSTATISTICS g_pRasBundleClearStatistics;

typedef DWORD (APIENTRY * PRASBUNDLECLEARSTATISTICSEX)( HANDLE, HCONN );
extern PRASBUNDLECLEARSTATISTICSEX g_pRasBundleClearStatisticsEx;

typedef DWORD (APIENTRY * PRASDEVICEENUM)( HANDLE, PCHAR, PBYTE, PDWORD, PDWORD );
extern PRASDEVICEENUM g_pRasDeviceEnum;

typedef DWORD (APIENTRY * PRASDEVICEGETINFO)( HANDLE, HPORT, PCHAR, PCHAR, PBYTE, PDWORD );
extern PRASDEVICEGETINFO g_pRasDeviceGetInfo;

typedef DWORD (APIENTRY * PRASFREEBUFFER)( PBYTE );
extern PRASFREEBUFFER g_pRasFreeBuffer;

typedef DWORD (APIENTRY * PRASGETBUFFER)( PBYTE*, PDWORD );
extern PRASGETBUFFER g_pRasGetBuffer;

typedef DWORD (APIENTRY * PRASPORTGETFRAMINGEX)( HANDLE, HPORT, RAS_FRAMING_INFO* );
extern PRASPORTGETFRAMINGEX g_pRasPortGetFramingEx;

typedef DWORD (APIENTRY * PRASGETINFO)( HANDLE, HPORT, RASMAN_INFO* );
extern PRASGETINFO g_pRasGetInfo;

typedef DWORD (APIENTRY * PRASGETNDISWANDRIVERCAPS)( HANDLE, RAS_NDISWAN_DRIVER_INFO* );
extern PRASGETNDISWANDRIVERCAPS g_pRasGetNdiswanDriverCaps;

typedef DWORD (APIENTRY * PRASINITIALIZE)();
extern PRASINITIALIZE g_pRasInitialize;

typedef DWORD (APIENTRY * PRASINITIALIZENOWAIT)();
extern PRASINITIALIZE g_pRasInitializeNoWait;

typedef DWORD (APIENTRY * PRASPORTCANCELRECEIVE)( HPORT );
extern PRASPORTCANCELRECEIVE g_pRasPortCancelReceive;

typedef DWORD (APIENTRY * PRASPORTENUM)( HANDLE, PBYTE, PDWORD, PDWORD );
extern PRASPORTENUM g_pRasPortEnum;

typedef DWORD (APIENTRY * PRASPORTGETINFO)( HANDLE, HPORT, PBYTE, PDWORD );
extern PRASPORTGETINFO g_pRasPortGetInfo;

typedef DWORD (APIENTRY * PRASPORTGETSTATISTICS)( HANDLE, HPORT, PBYTE, PDWORD );
extern PRASPORTGETSTATISTICS g_pRasPortGetStatistics;

typedef DWORD (APIENTRY * PRASBUNDLEGETSTATISTICS)( HANDLE, HPORT, PBYTE, PDWORD );
extern PRASBUNDLEGETSTATISTICS g_pRasBundleGetStatistics;

typedef DWORD (APIENTRY * PRASPORTGETSTATISTICSEX)( HANDLE, HPORT, PBYTE, PDWORD );
extern PRASPORTGETSTATISTICSEX g_pRasPortGetStatisticsEx;

typedef DWORD (APIENTRY * PRASBUNDLEGETSTATISTICSEX)(HANDLE, HPORT, PBYTE, PDWORD);
extern PRASBUNDLEGETSTATISTICSEX g_pRasBundleGetStatisticsEx;

typedef DWORD (APIENTRY * PRASPORTRECEIVE)( HPORT, PBYTE, PDWORD, DWORD, HANDLE );
extern PRASPORTRECEIVE g_pRasPortReceive;

typedef DWORD (APIENTRY * PRASPORTRECEIVEEX ) ( HPORT, PBYTE, PDWORD );
extern PRASPORTRECEIVEEX g_pRasPortReceiveEx;

typedef DWORD (APIENTRY * PRASPORTSEND)( HPORT, PBYTE, DWORD );
extern PRASPORTSEND g_pRasPortSend;

typedef DWORD (APIENTRY * PRASPORTGETBUNDLE)(HANDLE,  HPORT, HBUNDLE* );
extern PRASPORTGETBUNDLE g_pRasPortGetBundle;

typedef DWORD (APIENTRY * PRASGETDEVCONFIG)( HANDLE, HPORT, PCHAR, PBYTE, DWORD* );
extern PRASGETDEVCONFIG g_pRasGetDevConfig;
extern PRASGETDEVCONFIG g_pRasGetDevConfigEx;

typedef DWORD (APIENTRY * PRASSETDEVCONFIG)(HPORT, PCHAR, PBYTE, DWORD );
extern PRASSETDEVCONFIG g_pRasSetDevConfig;

typedef DWORD (APIENTRY * PRASPORTOPEN)(PCHAR, HPORT*, HANDLE);
extern PRASPORTOPEN g_pRasPortOpen;

typedef DWORD (APIENTRY * PRASPORTREGISTERSLIP)(HPORT, DWORD, DWORD, BOOL,
                                                WCHAR*, WCHAR*, WCHAR*, WCHAR*);
extern PRASPORTREGISTERSLIP g_pRasPortRegisterSlip;

typedef DWORD (APIENTRY * PRASALLOCATEROUTE)(HPORT, RAS_PROTOCOLTYPE, BOOL,
                                             RASMAN_ROUTEINFO*);
extern PRASALLOCATEROUTE g_pRasAllocateRoute;

typedef DWORD (APIENTRY * PRASACTIVATEROUTE)(HPORT, RAS_PROTOCOLTYPE,
                                            RASMAN_ROUTEINFO*, PROTOCOL_CONFIG_INFO*);
extern PRASACTIVATEROUTE g_pRasActivateRoute;

typedef DWORD (APIENTRY * PRASACTIVATEROUTEEX)(HPORT, RAS_PROTOCOLTYPE, DWORD,
                                               RASMAN_ROUTEINFO*, PROTOCOL_CONFIG_INFO*);
extern PRASACTIVATEROUTEEX g_pRasActivateRouteEx;

typedef DWORD (APIENTRY * PRASDEVICESETINFO)(HPORT, PCHAR, PCHAR, RASMAN_DEVICEINFO*);
extern PRASDEVICESETINFO g_pRasDeviceSetInfo;

typedef DWORD (APIENTRY * PRASDEVICECONNECT)(HPORT, PCHAR, PCHAR, DWORD, HANDLE);
extern PRASDEVICECONNECT g_pRasDeviceConnect;

typedef DWORD (APIENTRY * PRASPORTSETINFO)(HPORT, RASMAN_PORTINFO*);
extern PRASPORTSETINFO g_pRasPortSetInfo;

typedef DWORD (APIENTRY * PRASPORTCLOSE)(HPORT);
extern PRASPORTCLOSE g_pRasPortClose;

typedef DWORD (APIENTRY * PRASPORTLISTEN)(HPORT, DWORD, HANDLE);
extern PRASPORTLISTEN g_pRasPortListen;

typedef DWORD (APIENTRY * PRASPORTCONNECTCOMPLETE)(HPORT);
extern PRASPORTCONNECTCOMPLETE g_pRasPortConnectComplete;

typedef DWORD (APIENTRY * PRASPORTDISCONNECT)(HPORT, HANDLE);
extern PRASPORTDISCONNECT g_pRasPortDisconnect;

typedef DWORD (APIENTRY * PRASREQUESTNOTIFICATION)(HPORT, HANDLE);
extern PRASREQUESTNOTIFICATION g_pRasRequestNotification;

typedef DWORD (APIENTRY * PRASPORTENUMPROTOCOLS)(HANDLE, HPORT, RAS_PROTOCOLS*, PDWORD);
extern PRASPORTENUMPROTOCOLS g_pRasPortEnumProtocols;

typedef DWORD (APIENTRY * PRASPORTSETFRAMING)(HPORT, RAS_FRAMING,
                                             RASMAN_PPPFEATURES*, RASMAN_PPPFEATURES*);
extern PRASPORTSETFRAMING g_pRasPortSetFraming;

typedef DWORD (APIENTRY * PRASPORTSETFRAMINGEX)(HPORT, RAS_FRAMING_INFO*);
extern PRASPORTSETFRAMINGEX g_pRasPortSetFramingEx;

typedef DWORD (APIENTRY * PRASSETCACHEDCREDENTIALS)(PCHAR, PCHAR, PCHAR);
extern PRASSETCACHEDCREDENTIALS g_pRasSetCachedCredentials;

typedef DWORD (APIENTRY * PRASGETDIALPARAMS)(DWORD, LPDWORD, PRAS_DIALPARAMS);
extern PRASGETDIALPARAMS g_pRasGetDialParams;

typedef DWORD (APIENTRY * PRASSETDIALPARAMS)(DWORD, DWORD, PRAS_DIALPARAMS, BOOL);
extern PRASSETDIALPARAMS g_pRasSetDialParams;

typedef DWORD (APIENTRY * PRASCREATECONNECTION) ( HCONN *, DWORD, DWORD *, DWORD *,
                                                  DWORD, GUID *, CHAR *, CHAR *,CHAR *, 
                                                  CHAR *);
extern PRASCREATECONNECTION g_pRasCreateConnection;

typedef DWORD (APIENTRY * PRASDESTROYCONNECTION)(HCONN);
extern PRASDESTROYCONNECTION g_pRasDestroyConnection;

typedef DWORD (APIENTRY * PRASCONNECTIONENUM)(HANDLE, HCONN*, LPDWORD, LPDWORD);
extern PRASCONNECTIONENUM g_pRasConnectionEnum;

typedef DWORD (APIENTRY * PRASADDCONNECTIONPORT)(HCONN, HPORT, DWORD);
extern PRASADDCONNECTIONPORT g_pRasAddConnectionPort;

typedef DWORD (APIENTRY * PRASENUMCONNECTIONPORTS)(HANDLE, HCONN, RASMAN_PORT*,
                                                   LPDWORD, LPDWORD);
extern PRASENUMCONNECTIONPORTS g_pRasEnumConnectionPorts;

typedef DWORD (APIENTRY * PRASGETCONNECTIONPARAMS)(HCONN, PRAS_CONNECTIONPARAMS);
extern PRASGETCONNECTIONPARAMS g_pRasGetConnectionParams;

typedef DWORD (APIENTRY * PRASSETCONNECTIONPARAMS)(HCONN, PRAS_CONNECTIONPARAMS);
extern PRASSETCONNECTIONPARAMS g_pRasSetConnectionParams;

typedef DWORD (APIENTRY * PRASGETCONNECTIONUSERDATA)(HCONN, DWORD, PBYTE, LPDWORD);
extern PRASGETCONNECTIONUSERDATA g_pRasGetConnectionUserData;

typedef DWORD (APIENTRY * PRASSETCONNECTIONUSERDATA)(HCONN, DWORD, PBYTE, DWORD);
extern PRASSETCONNECTIONUSERDATA g_pRasSetConnectionUserData;

typedef DWORD (APIENTRY * PRASGETPORTUSERDATA)(HCONN, DWORD, PBYTE, LPDWORD);
extern PRASGETPORTUSERDATA g_pRasGetPortUserData;

typedef DWORD (APIENTRY * PRASSETPORTUSERDATA)(HCONN, DWORD, PBYTE, DWORD);
extern PRASSETPORTUSERDATA g_pRasSetPortUserData;

typedef DWORD (APIENTRY * PRASADDNOTIFICATION)(HCONN, HANDLE, DWORD);
extern PRASADDNOTIFICATION g_pRasAddNotification;

typedef DWORD (APIENTRY * PRASSIGNALNEWCONNECTION)(HCONN);
extern PRASSIGNALNEWCONNECTION g_pRasSignalNewConnection;

typedef DWORD (APIENTRY * PRASPPPSTOP)(HPORT);
extern PRASPPPSTOP g_pRasPppStop;

typedef DWORD (APIENTRY * PRASPPPCALLBACK)(HPORT, CHAR*);
extern PRASPPPCALLBACK g_pRasPppCallback;

typedef DWORD (APIENTRY * PRASPPPCHANGEPASSWORD)(HPORT, CHAR*, CHAR*, CHAR*);
extern PRASPPPCHANGEPASSWORD g_pRasPppChangePassword;

typedef DWORD (APIENTRY * PRASPPPGETINFO)(HPORT, PPP_MESSAGE*);
extern PRASPPPGETINFO g_pRasPppGetInfo;

typedef DWORD (APIENTRY * PRASPPPRETRY)(HPORT, CHAR*, CHAR*, CHAR*);
extern PRASPPPRETRY g_pRasPppRetry;

typedef DWORD (APIENTRY *PRASPPPSTART)(HPORT, CHAR*, CHAR*, CHAR*, CHAR*, LUID*,
                                       PPP_CONFIG_INFO*, LPVOID, CHAR*,
                                       BOOL, HANDLE, DWORD, BOOL, PPP_BAPPARAMS*,
                                       BOOL, DWORD, DWORD);
extern PRASPPPSTART g_pRasPppStart;

typedef DWORD (APIENTRY * PRASSETIOCOMPLETIONPORT)(HPORT, HANDLE, PRAS_OVERLAPPED,
                                                   PRAS_OVERLAPPED, PRAS_OVERLAPPED,
                                                   PRAS_OVERLAPPED);
extern PRASSETIOCOMPLETIONPORT g_pRasSetIoCompletionPort;

typedef DWORD (APIENTRY * PRASSENDPPPMESSAGETORASMAN) (PPP_MESSAGE *pPppMessage);
extern PRASSENDPPPMESSAGETORASMAN g_pRasSendPppMessageToRasman;

typedef DWORD (APIENTRY * PRASSETRASDIALINFO) (HPORT, CHAR*, CHAR*, CHAR *, DWORD, PBYTE);
extern PRASSETRASDIALINFO g_pRasSetRasdialInfo;

typedef DWORD (APIENTRY * PRASRPCCONNECT ) ( LPCTSTR, HANDLE * );
extern PRASRPCCONNECT g_pRasRpcConnect;

typedef DWORD (APIENTRY * PRASRPCDISCONNECT ) ( HANDLE * );
extern PRASRPCDISCONNECT g_pRasRpcDisconnect;

typedef DWORD (APIENTRY * PRASNUMPORTOPEN ) ();
extern PRASNUMPORTOPEN g_pRasNumPortOpen;

typedef DWORD (APIENTRY *PRASREFCONNECTION ) ( HCONN, BOOL, DWORD * );
extern PRASREFCONNECTION g_pRasRefConnection;

typedef DWORD (APIENTRY *PRASPPPGETEAPINFO) ( HCONN, DWORD, DWORD *, DWORD *,
                                              DWORD *, PBYTE);
extern PRASPPPGETEAPINFO g_pRasPppGetEapInfo;

typedef DWORD( APIENTRY *PRASPPPSETEAPINFO) (HPORT, DWORD, DWORD, PBYTE);
extern PRASPPPSETEAPINFO g_pRasPppSetEapInfo;

typedef DWORD(APIENTRY *PRASFINDPREREQUISITEENTRY) (HCONN, HCONN *);
extern PRASFINDPREREQUISITEENTRY g_pRasFindPrerequisiteEntry;

typedef DWORD(APIENTRY *PRASPORTOPENEX) (CHAR *, DWORD, HPORT *, HANDLE, DWORD *);
extern PRASPORTOPENEX g_pRasPortOpenEx;

typedef DWORD(APIENTRY *PRASLINKGETSTATISTICS) (HANDLE, HCONN, DWORD, PBYTE);
extern PRASLINKGETSTATISTICS g_pRasLinkGetStatistics;

typedef DWORD(APIENTRY *PRASCONNECTIONGETSTATISTICS) (HANDLE, HCONN, PBYTE);
extern PRASCONNECTIONGETSTATISTICS g_pRasConnectionGetStatistics;

typedef DWORD(APIENTRY *PRASGETHPORTFROMCONNECTION) (HANDLE, HCONN, HPORT *);
extern PRASGETHPORTFROMCONNECTION g_pRasGetHportFromConnection;

typedef DWORD(APIENTRY *PRASRPCBIND) (LPWSTR, HANDLE *);
extern PRASRPCBIND g_pRasRpcBind;

typedef DWORD(APIENTRY *PRASREFERENCECUSTOMCOUNT) (HCONN ,BOOL, CHAR *, CHAR *, DWORD *);
extern PRASREFERENCECUSTOMCOUNT g_pRasReferenceCustomCount;

typedef DWORD(APIENTRY *PRASGETHCONNFROMENTRY) (HCONN *, CHAR *, CHAR *);
extern PRASGETHCONNFROMENTRY g_pRasGetHConnFromEntry;

typedef DWORD(APIENTRY *PRASGETDEVICENAME) (RASDEVICETYPE, CHAR *);
extern PRASGETDEVICENAME g_pRasGetDeviceName;

typedef DWORD(APIENTRY *PRASENABLEIPSEC) (HPORT, BOOL, BOOL, RAS_L2TP_ENCRYPTION);
extern PRASENABLEIPSEC g_pRasEnableIpSec;

typedef DWORD(APIENTRY *PRASISIPSECENABLED) (HPORT, BOOL *);
extern PRASISIPSECENABLED g_pRasIsIpSecEnabled;

typedef DWORD(APIENTRY *PRASGETEAPUSERINFO) (HANDLE, PBYTE, DWORD *, GUID *, BOOL, DWORD);
extern PRASGETEAPUSERINFO g_pRasGetEapUserInfo;
 
typedef DWORD(APIENTRY *PRASSETEAPUSERINFO) (HANDLE, GUID *, PBYTE, DWORD, BOOL, BOOL, DWORD);
extern PRASSETEAPUSERINFO g_pRasSetEapUserInfo;

typedef DWORD(APIENTRY *PRASSETEAPLOGONINFO) (HPORT, BOOL, RASEAPINFO *);
extern PRASSETEAPLOGONINFO g_pRasSetEapLogonInfo;

typedef DWORD(APIENTRY *PRASSTARTRASAUTOIFREQUIRED) (VOID);
extern PRASSTARTRASAUTOIFREQUIRED g_pRasStartRasAutoIfRequired;

/* MPRAPI.DLL entry points
*/
#ifndef RASMERGE
extern HINSTANCE g_hMpradminDll;
#endif

typedef DWORD (APIENTRY * PMPRADMININTERFACECREATE)(HANDLE,DWORD,LPBYTE,HANDLE*);
extern PMPRADMININTERFACECREATE g_pMprAdminInterfaceCreate;
typedef DWORD (APIENTRY * PMPRADMININTERFACEDELETE)(HANDLE,HANDLE);
extern PMPRADMININTERFACEDELETE g_pMprAdminInterfaceDelete;
typedef DWORD (APIENTRY * PMPRADMININTERFACEGETHANDLE)(HANDLE,LPWSTR,HANDLE*,BOOL);
extern PMPRADMININTERFACEGETHANDLE g_pMprAdminInterfaceGetHandle;
typedef DWORD (APIENTRY * PMPRADMININTERFACEGETCREDENTIALS)(LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR);
extern PMPRADMININTERFACEGETCREDENTIALS g_pMprAdminInterfaceGetCredentials;
typedef DWORD (APIENTRY * PMPRADMININTERFACEGETCREDENTIALSEX)(HANDLE,HANDLE,DWORD,LPBYTE *);
extern PMPRADMININTERFACEGETCREDENTIALSEX g_pMprAdminInterfaceGetCredentialsEx;
typedef DWORD (APIENTRY * PMPRADMININTERFACESETCREDENTIALS)(LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR);
extern PMPRADMININTERFACESETCREDENTIALS g_pMprAdminInterfaceSetCredentials;
typedef DWORD (APIENTRY * PMPRADMININTERFACESETCREDENTIALSEX)(HANDLE,HANDLE,DWORD,LPBYTE);
extern PMPRADMININTERFACESETCREDENTIALSEX g_pMprAdminInterfaceSetCredentialsEx;
typedef DWORD (APIENTRY * PMPRADMINBUFFERFREE)(LPVOID);
extern PMPRADMINBUFFERFREE  g_pMprAdminBufferFree;
typedef DWORD (APIENTRY * PMPRADMININTERFACETRANSPORTADD)(HANDLE,HANDLE,DWORD,LPBYTE,DWORD);
extern PMPRADMININTERFACETRANSPORTADD g_pMprAdminInterfaceTransportAdd;
typedef DWORD (APIENTRY * PMPRADMININTERFACETRANSPORTSETINFO)(HANDLE,HANDLE,DWORD,LPBYTE,DWORD);
extern PMPRADMININTERFACETRANSPORTSETINFO g_pMprAdminInterfaceTransportSetInfo;
typedef DWORD (APIENTRY * PMPRADMINSERVERDISCONNECT)(HANDLE);
extern PMPRADMINSERVERDISCONNECT g_pMprAdminServerDisconnect;
typedef DWORD (APIENTRY * PMPRADMINSERVERCONNECT)(LPWSTR,HANDLE*);
extern PMPRADMINSERVERCONNECT g_pMprAdminServerConnect;
typedef DWORD (APIENTRY * PMPRADMINTRANSPORTSETINFO)(HANDLE,DWORD,LPBYTE,DWORD,LPBYTE,DWORD);
extern PMPRADMINTRANSPORTSETINFO g_pMprAdminTransportSetInfo;
typedef DWORD (APIENTRY * PRASADMINSERVERCONNECT)(LPWSTR, HANDLE*);
extern PRASADMINSERVERCONNECT g_pRasAdminServerConnect;
typedef DWORD (APIENTRY * PRASADMINSERVERDISCONNECT)(HANDLE);
extern PRASADMINSERVERDISCONNECT g_pRasAdminServerDisconnect;
typedef DWORD (APIENTRY * PRASADMINBUFFERFREE)(LPVOID);
extern PRASADMINBUFFERFREE g_pRasAdminBufferFree;
typedef DWORD (APIENTRY * PRASADMINCONNECTIONENUM)(HANDLE, DWORD, LPBYTE*, DWORD, LPDWORD, LPDWORD, LPDWORD);
extern PRASADMINCONNECTIONENUM g_pRasAdminConnectionEnum;
typedef DWORD (APIENTRY * PRASADMINCONNECTIONGETINFO)(HANDLE, DWORD, HANDLE, LPBYTE*);
extern PRASADMINCONNECTIONGETINFO g_pRasAdminConnectionGetInfo;
typedef DWORD (APIENTRY * PRASADMINPORTENUM)(HANDLE, DWORD, HANDLE, LPBYTE*, DWORD, LPDWORD, LPDWORD, LPDWORD);
extern PRASADMINPORTENUM g_pRasAdminPortEnum;
typedef DWORD (APIENTRY * PRASADMINPORTGETINFO)(HANDLE, DWORD, HANDLE, LPBYTE*);
extern PRASADMINPORTGETINFO g_pRasAdminPortGetInfo;
typedef DWORD (APIENTRY * PRASADMINPORTDISCONNECT)(HANDLE, HANDLE);
extern PRASADMINPORTDISCONNECT g_pRasAdminPortDisconnect;
typedef DWORD (APIENTRY * PRASADMINUSERSETINFO)(LPCWSTR,LPCWSTR,DWORD,LPBYTE);
extern PRASADMINUSERSETINFO g_pRasAdminUserSetInfo;
typedef DWORD (APIENTRY * PMPRADMINUSERSERVERCONNECT)(PWCHAR, BOOL, PHANDLE);
extern PMPRADMINUSERSERVERCONNECT g_pMprAdminUserServerConnect;
typedef DWORD (APIENTRY * PMPRADMINUSERSERVERDISCONNECT)(HANDLE);
extern PMPRADMINUSERSERVERDISCONNECT g_pMprAdminUserServerDisconnect;
typedef DWORD (APIENTRY * PMPRADMINUSEROPEN)(HANDLE, PWCHAR, PHANDLE);
extern PMPRADMINUSEROPEN g_pMprAdminUserOpen;
typedef DWORD (APIENTRY * PMPRADMINUSERCLOSE)(HANDLE);
extern PMPRADMINUSERCLOSE g_pMprAdminUserClose;
typedef DWORD (APIENTRY * PMPRADMINUSERWRITE)(HANDLE, DWORD, LPBYTE);
extern PMPRADMINUSERWRITE g_pMprAdminUserWrite;
typedef DWORD (APIENTRY * PMPRCONFIGBUFFERFREE)(LPVOID);
extern PMPRCONFIGBUFFERFREE g_pMprConfigBufferFree;
typedef DWORD (APIENTRY * PMPRCONFIGSERVERCONNECT)(LPWSTR,HANDLE*);
extern PMPRCONFIGSERVERCONNECT g_pMprConfigServerConnect;
typedef VOID (APIENTRY * PMPRCONFIGSERVERDISCONNECT)(HANDLE);
extern PMPRCONFIGSERVERDISCONNECT g_pMprConfigServerDisconnect;
typedef DWORD (APIENTRY * PMPRCONFIGTRANSPORTGETINFO)(HANDLE,HANDLE,LPBYTE*,LPDWORD,LPBYTE*,LPDWORD,LPWSTR*);
extern PMPRCONFIGTRANSPORTGETINFO g_pMprConfigTransportGetInfo;
typedef DWORD (APIENTRY * PMPRCONFIGTRANSPORTSETINFO)(HANDLE,HANDLE,LPBYTE,DWORD,LPBYTE,DWORD,LPWSTR);
extern PMPRCONFIGTRANSPORTSETINFO g_pMprConfigTransportSetInfo;
typedef DWORD (APIENTRY * PMPRCONFIGTRANSPORTGETHANDLE)(HANDLE,DWORD,HANDLE*);
extern PMPRCONFIGTRANSPORTGETHANDLE g_pMprConfigTransportGetHandle;
typedef DWORD (APIENTRY * PMPRCONFIGINTERFACECREATE)(HANDLE,DWORD,LPBYTE,HANDLE*);
extern PMPRCONFIGINTERFACECREATE g_pMprConfigInterfaceCreate;
typedef DWORD (APIENTRY * PMPRCONFIGINTERFACEDELETE)(HANDLE,HANDLE);
extern PMPRCONFIGINTERFACEDELETE g_pMprConfigInterfaceDelete;
typedef DWORD (APIENTRY * PMPRCONFIGINTERFACEGETHANDLE)(HANDLE,LPWSTR,HANDLE*);
extern PMPRCONFIGINTERFACEGETHANDLE g_pMprConfigInterfaceGetHandle;
typedef DWORD (APIENTRY * PMPRCONFIGINTERFACEENUM)(HANDLE,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
extern PMPRCONFIGINTERFACEENUM g_pMprConfigInterfaceEnum;
typedef DWORD (APIENTRY * PMPRCONFIGINTERFACETRANSPORTADD)(HANDLE,HANDLE,DWORD,LPWSTR,LPBYTE,DWORD,HANDLE*);
extern PMPRCONFIGINTERFACETRANSPORTADD g_pMprConfigInterfaceTransportAdd;
typedef DWORD (APIENTRY * PMPRCONFIGINTERFACETRANSPORTGETINFO)(HANDLE,HANDLE,HANDLE,LPBYTE*,LPDWORD);
extern PMPRCONFIGINTERFACETRANSPORTGETINFO g_pMprConfigInterfaceTransportGetInfo;
typedef DWORD (APIENTRY * PMPRCONFIGINTERFACETRANSPORTSETINFO)(HANDLE,HANDLE,HANDLE,LPBYTE,DWORD);
extern PMPRCONFIGINTERFACETRANSPORTSETINFO g_pMprConfigInterfaceTransportSetInfo;
typedef DWORD (APIENTRY * PMPRCONFIGINTERFACETRANSPORTGETHANDLE)(HANDLE,HANDLE,DWORD,HANDLE*);
extern PMPRCONFIGINTERFACETRANSPORTGETHANDLE g_pMprConfigInterfaceTransportGetHandle;
typedef DWORD (APIENTRY * PMPRINFOCREATE)(DWORD,LPVOID*);
extern PMPRINFOCREATE g_pMprInfoCreate;
typedef DWORD (APIENTRY * PMPRINFODELETE)(LPVOID);
extern PMPRINFODELETE g_pMprInfoDelete;
typedef DWORD (APIENTRY * PMPRINFODUPLICATE)(LPVOID,LPVOID*);
extern PMPRINFODUPLICATE g_pMprInfoDuplicate;
typedef DWORD (APIENTRY * PMPRINFOBLOCKADD)(LPVOID,DWORD,DWORD,DWORD,LPBYTE,LPVOID*);
extern PMPRINFOBLOCKADD g_pMprInfoBlockAdd;
typedef DWORD (APIENTRY * PMPRINFOBLOCKREMOVE)(LPVOID,DWORD,LPVOID*);
extern PMPRINFOBLOCKREMOVE g_pMprInfoBlockRemove;
typedef DWORD (APIENTRY * PMPRINFOBLOCKSET)(LPVOID,DWORD,DWORD,DWORD,LPBYTE,LPVOID*);
extern PMPRINFOBLOCKSET g_pMprInfoBlockSet;
typedef DWORD (APIENTRY * PMPRINFOBLOCKFIND)(LPVOID,DWORD,LPDWORD,LPDWORD,LPBYTE*);
extern PMPRINFOBLOCKFIND g_pMprInfoBlockFind;

//
// Miscellaneous entry points.
//
// These are included for consistency because they
// are remotable by the RAS RPC interface.
//
typedef DWORD (*PGETINSTALLEDPROTOCOLS)();
extern PGETINSTALLEDPROTOCOLS g_pGetInstalledProtocols;

typedef DWORD (*PGETINSTALLEDPROTOCOLSEX)(HANDLE, BOOL, BOOL, BOOL);
extern PGETINSTALLEDPROTOCOLSEX g_pGetInstalledProtocolsEx;

typedef DWORD (*PGETUSERPREFERENCES)(HANDLE, PBUSER*, DWORD);
extern PGETUSERPREFERENCES g_pGetUserPreferences;

typedef DWORD (*PSETUSERPREFERENCES)(HANDLE, PBUSER*, DWORD);
extern PSETUSERPREFERENCES g_pSetUserPreferences;

typedef DWORD (WINAPI *PGETSYSTEMDIRECTORY)(HANDLE, LPTSTR, UINT);
extern PGETSYSTEMDIRECTORY g_pGetSystemDirectory;

/*----------------------------------------------------------------------------
** Prototypes
**----------------------------------------------------------------------------
*/

BOOL
IsRasmanServiceRunning(
    void );

DWORD
LoadMpradminDll(
    void );

DWORD
LoadRasapi32Dll(
    void );

DWORD
LoadRasdlgDll(
    void );

DWORD
LoadRasmanDll(
    void );

#if 0

DWORD
LoadRasRpcDll(
    LPTSTR  lpszServer
    );

#endif    

BOOL
Rasapi32DllLoaded(
    void
    );

BOOL
RasRpcDllLoaded(
    void
    );

LPTSTR
RemoteGetServerName(
        HANDLE hConnection
        );

DWORD
RemoteGetServerVersion(
    HANDLE hConnection
    );

BOOL
IsRasRemoteConnection(
    HANDLE hConnection
    );

VOID
UnloadMpradminDll(
    void );

VOID
UnloadRasapi32Dll(
    void );

VOID
UnloadRasdlgDll(
    void );

VOID
UnloadRasmanDll(
    void );

DWORD
UnloadRasRpcDll(
    void );

DWORD
InitializeConnection(
    LPTSTR lpszServer,
    HANDLE *pHConnection);

VOID
UninitializeConnection(
    HANDLE hConnection);


DWORD
RemoteGetInstalledProtocols(
    HANDLE hConnection
    );

DWORD
RemoteGetInstalledProtocolsEx(
    HANDLE hConnection,
    BOOL fRouter,
    BOOL fRasCli,
    BOOL fRasSrv );

UINT WINAPI
RemoteGetSystemDirectory(
    HANDLE hConnection,
    LPTSTR lpBuffer,
    UINT uSize );

DWORD
RemoteGetUserPreferences(
    HANDLE hConnection,
    OUT PBUSER* pPbuser,
    IN DWORD dwMode );

DWORD APIENTRY
RemoteRasDeleteEntry(
    HANDLE hConnection,
    LPTSTR lpszPhonebook,
    LPTSTR lpszEntry );


DWORD APIENTRY
RemoteRasDeviceEnum(
    HANDLE hConnection,
    PCHAR pszDeviceType,
    PBYTE lpDevices,
    PDWORD pwcbDevices,
    PDWORD pwcDevices );

DWORD APIENTRY
RemoteRasEnumConnections(
    HANDLE hConnection,
    LPRASCONN lpRasConn,
    LPDWORD lpdwcbRasConn,
    LPDWORD lpdwcRasConn );

DWORD APIENTRY
RemoteRasGetCountryInfo(
    HANDLE hConnection,
    LPRASCTRYINFO lpRasCountryInfo,
    LPDWORD lpdwcbRasCountryInfo );


DWORD APIENTRY
RemoteRasGetDevConfig(
    HANDLE hConnection,
    HPORT hport,
    PCHAR pszDeviceType,
    PBYTE lpConfig,
    LPDWORD lpcbConfig );

DWORD APIENTRY
RemoteRasGetErrorString(
    HANDLE hConnection,
    UINT uErrorValue,
    LPTSTR lpszBuf,
    DWORD cbBuf );


DWORD APIENTRY
RemoteRasPortEnum(
    HANDLE hConnection,
    PBYTE lpPorts,
    PDWORD pdwcbPorts,
    PDWORD pdwcPorts );

DWORD
RemoteSetUserPreferences(
    HANDLE hConnection,
    OUT PBUSER* pPbuser,
    IN DWORD dwMode );

DWORD APIENTRY
RemoteRasPortGetInfo(
    HANDLE hConnection,
        HPORT porthandle,
        PBYTE buffer,
        PDWORD pSize );

UINT WINAPI
RasGetSystemDirectory(
    HANDLE hConnection,
    LPTSTR lpBuffer,
    UINT uSize
    );

#endif // _LOADDLLS_H_