windows-nt/Source/XPSP1/NT/net/rras/inc/rasppp.h
2020-09-26 16:20:57 +08:00

776 lines
22 KiB
C

/* Copyright (c) 1993, Microsoft Corporation, all rights reserved
**
** rasppp.h
** Remote Access PPP
** Public PPP client API and server API header
*/
#ifndef _RASPPP_H_
#define _RASPPP_H_
#include <ras.h>
#include <mprapi.h> // For definitions of IPADDRESSLEN,IPXADDRESSLEN
// and ATADDRESSLEN
#define MAXPPPFRAMESIZE 1500
#define PARAMETERBUFLEN 500
/*---------------------------------------------------------------------------
** PPP Engine -> Client/DDM messages
**---------------------------------------------------------------------------
*/
/* Client PPP configuration values set with RasPppStart.
*/
typedef struct _PPP_CONFIG_INFO
{
DWORD dwConfigMask;
DWORD dwCallbackDelay;
}
PPP_CONFIG_INFO;
/* dwConfigMask bit values.
**
** Note: Due to the implentation of compression and encryption in the drivers,
** 'UseSwCompression' and 'RequireMsChap' must be set, whenever
** 'RequireEncryption' is set.
*/
#define PPPCFG_UseCallbackDelay 0x00000001
#define PPPCFG_UseSwCompression 0x00000002
#define PPPCFG_ProjectNbf 0x00000004
#define PPPCFG_ProjectIp 0x00000008
#define PPPCFG_ProjectIpx 0x00000010
#define PPPCFG_ProjectAt 0x00000020
#define PPPCFG_NegotiateSPAP 0x00000040
#define PPPCFG_RequireEncryption 0x00000080
#define PPPCFG_NegotiateMSCHAP 0x00000100
#define PPPCFG_UseLcpExtensions 0x00000200
#define PPPCFG_NegotiateMultilink 0x00000400
#define PPPCFG_AuthenticatePeer 0x00000800
#define PPPCFG_RequireStrongEncryption 0x00001000
#define PPPCFG_NegotiateBacp 0x00002000
#define PPPCFG_AllowNoAuthentication 0x00004000
#define PPPCFG_NegotiateEAP 0x00008000
#define PPPCFG_NegotiatePAP 0x00010000
#define PPPCFG_NegotiateMD5CHAP 0x00020000
#define PPPCFG_RequireIPSEC 0x00040000
#define PPPCFG_DisableEncryption 0x00080000
#define PPPCFG_UseLmPassword 0x00200000
#define PPPCFG_AllowNoAuthOnDCPorts 0x00400000
#define PPPCFG_NegotiateStrongMSCHAP 0x00800000
#define PPPCFG_NoCallback 0x01000000
#define PPPCFG_MachineAuthentication 0x02000000
/*
**New config flag added for whistler. This is used
**for ras audio accelerator
*/
#define PPPCFG_AudioAccelerator 0x02000000
#define PPP_FAILURE_REMOTE_DISCONNECT 0x00000001
/* PPP stopped message sent by ppp to bring down the link
*/
typedef struct _PPP_STOPPED
{
DWORD dwFlags;
}
PPP_STOPPED;
/* PPP error notification returned by RasPppGetInfo.
*/
typedef struct _PPP_FAILURE
{
DWORD dwError;
DWORD dwExtendedError; // 0 if none
}
PPP_FAILURE;
/* PPP control protocol results returned by RasPppGetInfo.
*/
typedef struct _PPP_NBFCP_RESULT
{
DWORD dwError;
DWORD dwNetBiosError;
CHAR szName[ NETBIOS_NAME_LEN + 1 ];
WCHAR wszWksta[ NETBIOS_NAME_LEN + 1 ];
}
PPP_NBFCP_RESULT;
typedef struct _PPP_IPCP_RESULT
{
DWORD dwError;
BOOL fSendVJHCompression;
BOOL fReceiveVJHCompression;
DWORD dwLocalAddress;
DWORD dwLocalWINSAddress;
DWORD dwLocalWINSBackupAddress;
DWORD dwLocalDNSAddress;
DWORD dwLocalDNSBackupAddress;
DWORD dwRemoteAddress;
DWORD dwRemoteWINSAddress;
DWORD dwRemoteWINSBackupAddress;
DWORD dwRemoteDNSAddress;
DWORD dwRemoteDNSBackupAddress;
}
PPP_IPCP_RESULT;
typedef struct _PPP_IPXCP_RESULT
{
DWORD dwError;
BYTE bLocalAddress[10];
BYTE bRemoteAddress[10];
}
PPP_IPXCP_RESULT;
typedef struct _PPP_ATCP_RESULT
{
DWORD dwError;
DWORD dwLocalAddress;
DWORD dwRemoteAddress;
}
PPP_ATCP_RESULT;
typedef struct _PPP_CCP_RESULT
{
DWORD dwError;
DWORD dwSendProtocol;
DWORD dwSendProtocolData;
DWORD dwReceiveProtocol;
DWORD dwReceiveProtocolData;
}
PPP_CCP_RESULT;
#define PPPLCPO_PFC 0x00000001
#define PPPLCPO_ACFC 0x00000002
#define PPPLCPO_SSHF 0x00000004
#define PPPLCPO_DES_56 0x00000008
#define PPPLCPO_3_DES 0x00000010
typedef struct _PPP_LCP_RESULT
{
/* Valid handle indicates one of the possibly multiple connections to
** which this connection is bundled. INVALID_HANDLE_VALUE indicates the
** connection is not bundled.
*/
HPORT hportBundleMember;
DWORD dwLocalAuthProtocol;
DWORD dwLocalAuthProtocolData;
DWORD dwLocalEapTypeId;
DWORD dwLocalFramingType;
DWORD dwLocalOptions; // Look at PPPLCPO_*
DWORD dwRemoteAuthProtocol;
DWORD dwRemoteAuthProtocolData;
DWORD dwRemoteEapTypeId;
DWORD dwRemoteFramingType;
DWORD dwRemoteOptions; // Look at PPPLCPO_*
CHAR* szReplyMessage;
}
PPP_LCP_RESULT;
typedef struct _PPP_PROJECTION_RESULT
{
PPP_NBFCP_RESULT nbf;
PPP_IPCP_RESULT ip;
PPP_IPXCP_RESULT ipx;
PPP_ATCP_RESULT at;
PPP_CCP_RESULT ccp;
PPP_LCP_RESULT lcp;
}
PPP_PROJECTION_RESULT;
/* PPP error notification
*/
typedef struct _PPPDDM_FAILURE
{
DWORD dwError;
CHAR szUserName[ UNLEN + 1 ];
CHAR szLogonDomain[ DNLEN + 1 ];
}
PPPDDM_FAILURE;
/* Call back configuration information received by PPPDDMMSG routine.
*/
typedef struct _PPPDDM_CALLBACK_REQUEST
{
BOOL fUseCallbackDelay;
DWORD dwCallbackDelay;
CHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ];
}
PPPDDM_CALLBACK_REQUEST;
/* BAP request to callback the remote peer
*/
typedef struct _PPPDDM_BAP_CALLBACK_REQUEST
{
HCONN hConnection;
CHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ];
}
PPPDDM_BAP_CALLBACK_REQUEST;
/* Authentication information received by PPPDDMMSG routine.
*/
typedef struct _PPPDDM_AUTH_RESULT
{
CHAR szUserName[ UNLEN + 1 ];
CHAR szLogonDomain[ DNLEN + 1 ];
BOOL fAdvancedServer;
}
PPPDDM_AUTH_RESULT;
/* Notification of a new BAP link up
*/
typedef struct _PPPDDM_NEW_BAP_LINKUP
{
HRASCONN hRasConn;
}PPPDDM_NEW_BAP_LINKUP;
/* Notification of a new Bundle
*/
typedef struct _PPPDDM_NEW_BUNDLE
{
PBYTE pClientInterface;
} PPPDDM_NEW_BUNDLE;
/* Client should invoke EAP UI dialog
*/
typedef struct _PPP_INVOKE_EAP_UI
{
DWORD dwEapTypeId;
DWORD dwContextId;
PBYTE pUIContextData;
DWORD dwSizeOfUIContextData;
}PPP_INVOKE_EAP_UI;
/* Client should save per-connection data
*/
typedef struct _PPP_SET_CUSTOM_AUTH_DATA
{
BYTE* pConnectionData;
DWORD dwSizeOfConnectionData;
}PPP_SET_CUSTOM_AUTH_DATA;
/* Notification of port addition\removal\usage change
*/
typedef struct _PPPDDM_PNP_NOTIFICATION
{
PNP_EVENT_NOTIF PnPNotification;
} PPPDDM_PNP_NOTIFICATION;
/* Notification of PPP session termination
*/
typedef struct _PPPDDM_STOPPED
{
DWORD dwReason;
} PPPDDM_STOPPED;
typedef enum _PPP_MSG_ID
{
PPPMSG_PppDone = 0, // PPP negotiated all successfully.
PPPMSG_PppFailure, // PPP failure (fatal error including
// authentication failure with no
// retries), disconnect line.
PPPMSG_AuthRetry, // Authentication failed, have retries.
PPPMSG_Projecting, // Executing specified NCPs.
PPPMSG_ProjectionResult, // NCP completion status.
PPPMSG_CallbackRequest = 5, // Server needs "set-by-caller" number.
PPPMSG_Callback, // Server is about to call you back.
PPPMSG_ChangePwRequest, // Server needs new password (expired).
PPPMSG_LinkSpeed, // Calculating link speed.
PPPMSG_Progress, // A retry or other sub-state of
// progress has been reached in the
// current state.
PPPMSG_Stopped = 10, // Response to RasPppStop indicating
// PPP engine has stopped.
PPPMSG_InvokeEapUI, // Client should invoke EAP UI dialog
PPPMSG_SetCustomAuthData, // Save per-connection data
PPPDDMMSG_PppDone, // PPP negotiated successfully.
PPPDDMMSG_PppFailure, // PPP server failure (fatal error),
// disconnect line.
PPPDDMMSG_CallbackRequest = 15, // Callback client now.
PPPDDMMSG_BapCallbackRequest, // Callback remote BAP peer.
PPPDDMMSG_Authenticated, // Client has been authenticated.
PPPDDMMSG_Stopped, // Response to PppDdmStop indicating
// PPP engine has stopped.
PPPDDMMSG_NewLink, // Client is a new link in a bundle
PPPDDMMSG_NewBundle = 20, // Client is a new bundle
PPPDDMMSG_NewBapLinkUp, // Client is a new BAP link in a bundle
PPPDDMMSG_PnPNotification, // Port is being added or removed or usage
// is being changed, transport being added
// or removed etc.
PPPDDMMSG_PortCleanedUp // PPP port control block is now cleaned up
} PPP_MSG_ID;
/* Client/DDM notifications read with RasPppGetInfo.
*/
typedef struct _PPP_MESSAGE
{
struct _PPP_MESSAGE * pNext;
DWORD dwError;
PPP_MSG_ID dwMsgId;
HPORT hPort;
union
{
/* dwMsgId is PPPMSG_ProjectionResult or PPPDDMMSG_Done.
*/
PPP_PROJECTION_RESULT ProjectionResult;
/* dwMsgId is PPPMSG_Failure.
*/
PPP_FAILURE Failure;
/*
*/
PPP_STOPPED Stopped;
/* dwMsgId is PPPMSG_InvokeEapUI
*/
PPP_INVOKE_EAP_UI InvokeEapUI;
/* dwMsgId is PPPMSG_SetCustomAuthData
*/
PPP_SET_CUSTOM_AUTH_DATA SetCustomAuthData;
/* dwMsgId is PPPDDMMSG_Failure.
*/
PPPDDM_FAILURE DdmFailure;
/* dwMsgId is PPPDDMMSG_Authenticated.
*/
PPPDDM_AUTH_RESULT AuthResult;
/* dwMsgId is PPPDDMMSG_CallbackRequest.
*/
PPPDDM_CALLBACK_REQUEST CallbackRequest;
/* dwMsgId is PPPDDMMSG_BapCallbackRequest.
*/
PPPDDM_BAP_CALLBACK_REQUEST BapCallbackRequest;
/* dwMsgId is PPPDDMMSG_NewBapLinkUp
*/
PPPDDM_NEW_BAP_LINKUP BapNewLinkUp;
/* dwMsgId is PPPDDMMSG_NewBundle
*/
PPPDDM_NEW_BUNDLE DdmNewBundle;
/* dwMsgId is PPPDDMMSG_PnPNotification
*/
PPPDDM_PNP_NOTIFICATION DdmPnPNotification;
/* dwMsgId is PPPDDMMSG_Stopped
*/
PPPDDM_STOPPED DdmStopped;
}
ExtraInfo;
}
PPP_MESSAGE;
/*---------------------------------------------------------------------------
** Client/DDM -> Engine messages
**---------------------------------------------------------------------------
*/
/* Set of interface handles passed from DIM to PPP
*/
typedef struct _PPP_INTERFACE_INFO
{
ROUTER_INTERFACE_TYPE IfType;
HANDLE hIPInterface;
HANDLE hIPXInterface;
CHAR szzParameters[ PARAMETERBUFLEN ];
}
PPP_INTERFACE_INFO;
typedef struct _PPP_BAPPARAMS
{
DWORD dwDialMode;
DWORD dwDialExtraPercent;
DWORD dwDialExtraSampleSeconds;
DWORD dwHangUpExtraPercent;
DWORD dwHangUpExtraSampleSeconds;
}
PPP_BAPPARAMS;
typedef struct _PPP_EAP_UI_DATA
{
DWORD dwContextId;
PBYTE pEapUIData;
DWORD dwSizeOfEapUIData;
}
PPP_EAP_UI_DATA;
#define PPPFLAGS_DisableNetbt 0x00000001
/* Parameters to start client PPP on a port.
*/
typedef struct _PPP_START
{
CHAR szPortName[ MAX_PORT_NAME +1 ];
CHAR szUserName[ UNLEN + 1 ];
CHAR szPassword[ PWLEN + 1 ];
CHAR szDomain[ DNLEN + 1 ];
LUID Luid;
PPP_CONFIG_INFO ConfigInfo;
CHAR szzParameters[ PARAMETERBUFLEN ];
BOOL fThisIsACallback;
BOOL fRedialOnLinkFailure;
HANDLE hEvent;
DWORD dwPid;
PPP_INTERFACE_INFO PppInterfaceInfo;
DWORD dwAutoDisconnectTime;
PPP_BAPPARAMS BapParams;
CHAR * pszPhonebookPath;
CHAR * pszEntryName;
CHAR * pszPhoneNumber;
HANDLE hToken;
PRAS_CUSTOM_AUTH_DATA pCustomAuthConnData;
DWORD dwEapTypeId;
BOOL fLogon;
BOOL fNonInteractive;
DWORD dwFlags;
PRAS_CUSTOM_AUTH_DATA pCustomAuthUserData;
PPP_EAP_UI_DATA EapUIData;
CHAR chSeed; //Seed used to encode the password
}
PPP_START;
/* Parameters to stop client/server PPP on a port.
*/
typedef struct _PPP_STOP
{
DWORD dwStopReason;
}
PPP_STOP;
/* Parameters to start server PPP on a port.
*/
typedef struct _PPPDDM_START
{
DWORD dwAuthRetries;
CHAR szPortName[MAX_PORT_NAME+1];
CHAR achFirstFrame[ MAXPPPFRAMESIZE ];
DWORD cbFirstFrame;
}
PPPDDM_START;
/* Parameters to notify PPP that callback is complete.
*/
typedef struct _PPP_CALLBACK_DONE
{
CHAR szCallbackNumber[ MAX_PHONE_NUMBER_LEN + 1 ];
}
PPP_CALLBACK_DONE;
/* Parameters to notify server of "set-by-caller" callback options.
*/
typedef struct _PPP_CALLBACK
{
CHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ];
}
PPP_CALLBACK;
/* Parameters to notify server of new password after it's told client the
** password has expired. The user name and old password are also provided
** since they are required to support the auto-logon case.
*/
typedef struct _PPP_CHANGEPW
{
CHAR szUserName[ UNLEN + 1 ];
CHAR szOldPassword[ PWLEN + 1 ];
CHAR szNewPassword[ PWLEN + 1 ];
CHAR chSeed; //Seed used to encode the password
}
PPP_CHANGEPW;
/* Parameters to notify server of new authentication credentials after it's
** told client the original credentials are invalid but a retry is allowed.
*/
typedef struct _PPP_RETRY
{
CHAR szUserName[ UNLEN + 1 ];
CHAR szPassword[ PWLEN + 1 ];
CHAR szDomain[ DNLEN + 1 ];
CHAR chSeed; //Seed used to encode the password
}
PPP_RETRY;
/*
** Parameters to notify PPP that a packet has arrived from the peer
*/
typedef struct _PPP_RECEIVE
{
DWORD dwNumBytes; // The number of bytes in the buffer
BYTE* pbBuffer; // The data sent by the peer
}
PPP_RECEIVE;
/*
** Parameters to notify PPP that a BAP event (add/drop link) has fired
*/
typedef struct _PPP_BAP_EVENT
{
BOOL fAdd; // Add a link iff TRUE
BOOL fTransmit; // Send threshold iff TRUE
DWORD dwSendPercent; // Send bandwidth utilization
DWORD dwRecvPercent; // Recv bandwidth utilization
}
PPP_BAP_EVENT;
typedef struct _PPP_BAP_CALLBACK_RESULT
{
DWORD dwCallbackResultCode;
}
PPP_BAP_CALLBACK_RESULT;
typedef struct _PPP_DHCP_INFORM
{
WCHAR* wszDevice;
DWORD dwNumDNSAddresses;
DWORD* pdwDNSAddresses;
DWORD dwWINSAddress1;
DWORD dwWINSAddress2;
DWORD dwSubnetMask;
CHAR* szDomainName;
PBYTE pbDhcpRoutes;
}
PPP_DHCP_INFORM;
typedef struct _PPP_PROTOCOL_EVENT
{
USHORT usProtocolType;
ULONG ulFlags;
}
PPP_PROTOCOL_EVENT;
typedef struct _PPP_IP_ADDRESS_LEASE_EXPIRED
{
ULONG nboIpAddr;
}
PPP_IP_ADDRESS_LEASE_EXPIRED;
typedef struct _PPP_POST_LINEDOWN
{
VOID * pPcb; //This is required because PCB has been already removed from the
//table
}PPP_POST_LINE_DOWN;
/* Client/DDM->Engine messages.
*/
typedef struct _PPPE_MESSAGE
{
DWORD dwMsgId;
HPORT hPort;
HCONN hConnection;
union
{
PPP_START Start; // PPPEMSG_Start
PPP_STOP Stop; // PPPEMSG_Stop
PPP_CALLBACK Callback; // PPPEMSG_Callback
PPP_CHANGEPW ChangePw; // PPPEMSG_ChangePw
PPP_RETRY Retry; // PPPEMSG_Retry
PPP_RECEIVE Receive; // PPPEMSG_Receive
PPP_BAP_EVENT BapEvent; // PPPEMSG_BapEvent
PPPDDM_START DdmStart; // PPPEMSG_DdmStart
PPP_CALLBACK_DONE CallbackDone; // PPPEMSG_DdmCallbackDone
PPP_INTERFACE_INFO InterfaceInfo; // PPPEMSG_DdmInterfaceInfo
PPP_BAP_CALLBACK_RESULT
BapCallbackResult; // PPPEMSG_DdmBapCallbackResult
PPP_DHCP_INFORM DhcpInform; // PPPEMSG_DhcpInform
PPP_EAP_UI_DATA EapUIData; // PPPEMSG_EapUIData
PPP_PROTOCOL_EVENT ProtocolEvent; // PPPEMSG_ProtocolEvent
PPP_IP_ADDRESS_LEASE_EXPIRED // PPPEMSG_IpAddressLeaseExpired
IpAddressLeaseExpired;
PPP_POST_LINE_DOWN PostLineDown; //PPPEMSG_PostLineDown
}
ExtraInfo;
}
PPPE_MESSAGE;
/* PPPE_MESSAGE dwMsgId codes for client and DDM sessions.
*/
typedef enum _PPPE_MSG_ID
{
PPPEMSG_Start, // Starts client PPP on a port.
PPPEMSG_Stop, // Stops PPP on a port.
PPPEMSG_Callback, // Provides "set-by-caller" number to server.
PPPEMSG_ChangePw, // Provides new password (expired) to server.
PPPEMSG_Retry, // Provides new credentials for authentication.
PPPEMSG_Receive, // A packet has arrived.
PPPEMSG_LineDown, // The line has gone down.
PPPEMSG_ListenResult, // The result of a call to RasPortListen
PPPEMSG_BapEvent, // A BAP event (add/drop link) has fired.
PPPEMSG_DdmStart, // Starts server PPP on a port.
PPPEMSG_DdmCallbackDone, // Notify PPP that callback is complete.
PPPEMSG_DdmInterfaceInfo, // Interface handles from DDM
PPPEMSG_DdmBapCallbackResult,// Result of a BAP callback request.
PPPEMSG_DhcpInform, // The result of a DHCPINFORM
PPPEMSG_EapUIData, // Data from EAP interactive UI
PPPEMSG_DdmChangeNotification, // Change notification in DDM
PPPEMSG_ProtocolEvent, // Protocol added/removed notification
PPPEMSG_IpAddressLeaseExpired, // IP address lease expired. Used by rasiphlp
PPPEMSG_PostLineDown //Accounting completed after linedown
} PPPE_MSG_ID;
//
// Prototypes of function exported by RASPPP.DLL for use by RASMAN
//
DWORD APIENTRY
StartPPP(
DWORD NumPorts
/*,DWORD (*SendPPPMessageToRasman)( PPP_MESSAGE * PppMsg )*/
);
DWORD APIENTRY
StopPPP(
HANDLE hEventStopPPP
);
DWORD APIENTRY
SendPPPMessageToEngine(
IN PPPE_MESSAGE* pMessage
);
//
// PPP client side Apis
//
DWORD APIENTRY
RasPppStop(
IN HPORT hPort
);
DWORD APIENTRY
RasPppCallback(
IN HPORT hPort,
IN CHAR* pszCallbackNumber
);
DWORD APIENTRY
RasPppChangePassword(
IN HPORT hPort,
IN CHAR* pszUserName,
IN CHAR* pszOldPassword,
IN CHAR* pszNewPassword
);
DWORD APIENTRY
RasPppGetInfo(
IN HPORT hPort,
OUT PPP_MESSAGE* pMsg
);
DWORD APIENTRY
RasPppRetry(
IN HPORT hPort,
IN CHAR* pszUserName,
IN CHAR* pszPassword,
IN CHAR* pszDomain
);
DWORD APIENTRY
RasPppStart(
IN HPORT hPort,
IN CHAR* pszPortName,
IN CHAR* pszUserName,
IN CHAR* pszPassword,
IN CHAR* pszDomain,
IN LUID* pLuid,
IN PPP_CONFIG_INFO* pConfigInfo,
IN LPVOID pPppInterfaceInfo,
IN CHAR* pszzParameters,
IN BOOL fThisIsACallback,
IN HANDLE hEvent,
IN DWORD dwAutoDisconnectTime,
IN BOOL fRedialOnLinkFailure,
IN PPP_BAPPARAMS* pBapParams,
IN BOOL fNonInteractive,
IN DWORD dwEapTypeId,
IN DWORD dwFlags
);
//
// DDM API prototypes
//
DWORD
PppDdmInit(
IN VOID (*SendPPPMessageToDdm)( PPP_MESSAGE * PppMsg ),
IN DWORD dwServerFlags,
IN DWORD dwLoggingLevel,
IN DWORD dwNASIpAddress,
IN BOOL fRadiusAuthentication,
IN LPVOID lpfnRasAuthProviderAuthenticateUser,
IN LPVOID lpfnRasAuthProviderFreeAttributes,
IN LPVOID lpfnRasAcctProviderStartAccounting,
IN LPVOID lpfnRasAcctProviderInterimAccounting,
IN LPVOID lpfnRasAcctProviderStopAccounting,
IN LPVOID lpfnRasAcctProviderFreeAttributes,
IN LPVOID lpfnGetNextAccountingSessionId
);
VOID
PppDdmDeInit(
);
DWORD
PppDdmCallbackDone(
IN HPORT hPort,
IN WCHAR* pwszCallbackNumber
);
DWORD
PppDdmStart(
IN HPORT hPort,
IN WCHAR* wszPortName,
IN CHAR* pchFirstFrame,
IN DWORD cbFirstFrame,
IN DWORD dwAuthRetries
);
DWORD
PppDdmStop(
IN HPORT hPort,
IN DWORD dwStopReason
);
DWORD
PppDdmChangeNotification(
IN DWORD dwServerFlags,
IN DWORD dwLoggingLevel
);
DWORD
PppDdmSendInterfaceInfo(
IN HCONN hConnection,
IN PPP_INTERFACE_INFO * pInterfaceInfo
);
DWORD
PppDdmBapCallbackResult(
IN HCONN hConnection,
IN DWORD dwBapCallbackResultCode
);
#endif // _RASPPP_H_