650 lines
24 KiB
OpenEdge ABL
650 lines
24 KiB
OpenEdge ABL
|
/*++
|
||
|
|
||
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
raseapif.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Defines interface between a third party authentication module
|
||
|
and the Remote Access Service PPP engine.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _RASEAPIF_
|
||
|
#define _RASEAPIF_
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#if(WINVER >= 0x0500)
|
||
|
|
||
|
//
|
||
|
// Defines used for installtion of EAP DLL
|
||
|
//
|
||
|
// Custom EAP DLL (ex. Name=Sample.dll, Type=(decimal 40) regsitry installation)
|
||
|
//
|
||
|
// HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\PPP\EAP\40)
|
||
|
// Path (REG_EXPAND_SZ) %SystemRoot%\system32\sample.dll
|
||
|
// ConfigUIPath (REG_EXPAND_SZ) %SystemRoot%\system32\sample.dll
|
||
|
// InteractiveUIPath (REG_EXPAND_SZ) %SystemRoot%\system32\sample.dll
|
||
|
// IdentityPath (REG_EXPAND_SZ) %SystemRoot%\system32\sample.dll
|
||
|
// FriendlyName (REG_SZ) Sample EAP Protocol
|
||
|
// RequireConfigUI (REG_DWORD) 1
|
||
|
// ConfigCLSID (REG_SZ) {0000031A-0000-0000-C000-000000000046}
|
||
|
// StandaloneSupported (REG_DWORD) 1
|
||
|
//
|
||
|
|
||
|
#define RAS_EAP_REGISTRY_LOCATION \
|
||
|
TEXT("System\\CurrentControlSet\\Services\\Rasman\\PPP\\EAP")
|
||
|
|
||
|
#define RAS_EAP_VALUENAME_PATH TEXT("Path")
|
||
|
#define RAS_EAP_VALUENAME_CONFIGUI TEXT("ConfigUIPath")
|
||
|
#define RAS_EAP_VALUENAME_INTERACTIVEUI TEXT("InteractiveUIPath")
|
||
|
#define RAS_EAP_VALUENAME_IDENTITY TEXT("IdentityPath")
|
||
|
#define RAS_EAP_VALUENAME_FRIENDLY_NAME TEXT("FriendlyName")
|
||
|
#define RAS_EAP_VALUENAME_DEFAULT_DATA TEXT("ConfigData")
|
||
|
#define RAS_EAP_VALUENAME_REQUIRE_CONFIGUI TEXT("RequireConfigUI")
|
||
|
#define RAS_EAP_VALUENAME_ENCRYPTION TEXT("MPPEEncryptionSupported")
|
||
|
#define RAS_EAP_VALUENAME_INVOKE_NAMEDLG TEXT("InvokeUsernameDialog")
|
||
|
#define RAS_EAP_VALUENAME_INVOKE_PWDDLG TEXT("InvokePasswordDialog")
|
||
|
#define RAS_EAP_VALUENAME_CONFIG_CLSID TEXT("ConfigCLSID")
|
||
|
#define RAS_EAP_VALUENAME_STANDALONE_SUPPORTED TEXT("StandaloneSupported")
|
||
|
#define RAS_EAP_VALUENAME_ROLES_SUPPORTED TEXT("RolesSupported")
|
||
|
|
||
|
|
||
|
// Flags for RolesSupported.
|
||
|
#define RAS_EAP_ROLE_AUTHENTICATOR 0x00000001
|
||
|
#define RAS_EAP_ROLE_AUTHENTICATEE 0x00000002
|
||
|
#define RAS_EAP_ROLE_DISABLED_IN_VPN_CLIENT 0x00000004
|
||
|
|
||
|
//
|
||
|
// Following flags describe the hosting of EAP
|
||
|
// methods in PEAP or in EAP. If this role is
|
||
|
// missing the default behavior is to show the
|
||
|
// EAP method in PEAP and in EAP.
|
||
|
//
|
||
|
#define RAS_EAP_ROLE_EXCLUDE_IN_EAP 0x00000004
|
||
|
#define RAS_EAP_ROLE_EXCLUDE_IN_PEAP 0x00000008
|
||
|
#define RAS_EAP_ROLE_WIRELESS_EAP 0x00000010
|
||
|
#define RAS_EAP_ROLE_VPN_EAP 0x00000020
|
||
|
|
||
|
typedef enum _RAS_AUTH_ATTRIBUTE_TYPE_
|
||
|
{
|
||
|
raatMinimum = 0, // Undefined
|
||
|
raatUserName, // Value field is a Pointer
|
||
|
raatUserPassword, // Value field is a Pointer
|
||
|
raatMD5CHAPPassword, // Value field is a Pointer
|
||
|
raatNASIPAddress, // Value field is a 32 bit integral value
|
||
|
raatNASPort, // Value field is a 32 bit integral value
|
||
|
raatServiceType, // Value field is a 32 bit integral value
|
||
|
raatFramedProtocol, // Value field is a 32 bit integral value
|
||
|
raatFramedIPAddress, // Value field is a 32 bit integral value
|
||
|
raatFramedIPNetmask, // Value field is a 32 bit integral value
|
||
|
raatFramedRouting = 10, // Value field is a 32 bit integral value
|
||
|
raatFilterId, // Value field is a Pointer
|
||
|
raatFramedMTU, // Value field is a 32 bit integral value
|
||
|
raatFramedCompression, // Value field is a 32 bit integral value
|
||
|
raatLoginIPHost, // Value field is a 32 bit integral value
|
||
|
raatLoginService, // Value field is a 32 bit integral value
|
||
|
raatLoginTCPPort, // Value field is a 32 bit integral value
|
||
|
raatUnassigned17, // Undefined
|
||
|
raatReplyMessage, // Value field is a Pointer
|
||
|
raatCallbackNumber, // Value field is a Pointer
|
||
|
raatCallbackId =20, // Value field is a Pointer
|
||
|
raatUnassigned21, // Undefined
|
||
|
raatFramedRoute, // Value field is a Pointer
|
||
|
raatFramedIPXNetwork, // Value field is a 32 bit integral value
|
||
|
raatState, // Value field is a Pointer
|
||
|
raatClass, // Value field is a Pointer
|
||
|
raatVendorSpecific, // Value field is a Pointer
|
||
|
raatSessionTimeout, // Value field is a 32 bit integral value
|
||
|
raatIdleTimeout, // Value field is a 32 bit integral value
|
||
|
raatTerminationAction, // Value field is a 32 bit integral value
|
||
|
raatCalledStationId = 30, // Value field is a Pointer
|
||
|
raatCallingStationId, // Value field is a Pointer
|
||
|
raatNASIdentifier, // Value field is a Pointer
|
||
|
raatProxyState, // Value field is a Pointer
|
||
|
raatLoginLATService, // Value field is a Pointer
|
||
|
raatLoginLATNode, // Value field is a Pointer
|
||
|
raatLoginLATGroup, // Value field is a Pointer
|
||
|
raatFramedAppleTalkLink, // Value field is a 32 bit integral value
|
||
|
raatFramedAppleTalkNetwork, // Value field is a 32 bit integral value
|
||
|
raatFramedAppleTalkZone, // Value field is a Pointer
|
||
|
raatAcctStatusType = 40, // Value field is a 32 bit integral value
|
||
|
raatAcctDelayTime, // Value field is a 32 bit integral value
|
||
|
raatAcctInputOctets, // Value field is a 32 bit integral value
|
||
|
raatAcctOutputOctets, // Value field is a 32 bit integral value
|
||
|
raatAcctSessionId, // Value field is a Pointer
|
||
|
raatAcctAuthentic, // Value field is a 32 bit integral value
|
||
|
raatAcctSessionTime, // Value field is a 32 bit integral value
|
||
|
raatAcctInputPackets, // Value field is a 32 bit integral value
|
||
|
raatAcctOutputPackets, // Value field is a 32 bit integral value
|
||
|
raatAcctTerminateCause, // Value field is a 32 bit integral value
|
||
|
raatAcctMultiSessionId = 50, // Value field is a Pointer
|
||
|
raatAcctLinkCount, // Value field is a 32 bit integral value
|
||
|
raatAcctEventTimeStamp = 55, // Value field is a 32 bit integral value
|
||
|
raatMD5CHAPChallenge = 60, // Value field is a Pointer
|
||
|
raatNASPortType, // Value field is a 32 bit integral value
|
||
|
raatPortLimit, // Value field is a 32 bit integral value
|
||
|
raatLoginLATPort, // Value field is a Pointer
|
||
|
raatTunnelType, // Value field is a 32 bit integral value
|
||
|
raatTunnelMediumType, // Value field is a 32 bit integral value
|
||
|
raatTunnelClientEndpoint, // Value field is a Pointer
|
||
|
raatTunnelServerEndpoint, // Value field is a Pointer
|
||
|
raatARAPPassword = 70, // Value field is a Pointer
|
||
|
raatARAPFeatures, // Value field is a Pointer
|
||
|
raatARAPZoneAccess, // Value field is a 32 bit integral value
|
||
|
raatARAPSecurity, // Value field is a 32 bit integral value
|
||
|
raatARAPSecurityData, // Value field is a Pointer
|
||
|
raatPasswordRetry, // Value field is a 32 bit integral value
|
||
|
raatPrompt, // Value field is a 32 bit integral value
|
||
|
raatConnectInfo, // Value field is a Pointer
|
||
|
raatConfigurationToken, // Value field is a Pointer
|
||
|
raatEAPMessage, // Value field is a Pointer
|
||
|
raatSignature = 80, // Value field is a Pointer
|
||
|
raatARAPChallengeResponse = 84, // Value field is a Pointer
|
||
|
raatAcctInterimInterval = 85, // Value field is a 32 bit integral value
|
||
|
raatARAPGuestLogon = 8096, // Value field is a 32 bit integral value
|
||
|
raatCertificateOID, // Value field is a Pointer
|
||
|
raatReserved = 0xFFFFFFFF // Undefined
|
||
|
|
||
|
}RAS_AUTH_ATTRIBUTE_TYPE;
|
||
|
|
||
|
|
||
|
//
|
||
|
// VSA attribute ids for ARAP
|
||
|
//
|
||
|
#define raatARAPChallenge 33
|
||
|
#define raatARAPOldPassword 19
|
||
|
#define raatARAPNewPassword 20
|
||
|
#define raatARAPPasswordChangeReason 21
|
||
|
|
||
|
//
|
||
|
// Value is set to the 32 bit integral value or a pointer to data.
|
||
|
// 32 bit integral values should be in host format, not network format.
|
||
|
// Length for a 32 bit integral value can be 1, 2 or 4. The array of
|
||
|
// attributes must be terminated with an attribute of type raatMinimum.
|
||
|
//
|
||
|
|
||
|
typedef struct _RAS_AUTH_ATTRIBUTE
|
||
|
{
|
||
|
RAS_AUTH_ATTRIBUTE_TYPE raaType;
|
||
|
DWORD dwLength;
|
||
|
PVOID Value;
|
||
|
|
||
|
}RAS_AUTH_ATTRIBUTE, *PRAS_AUTH_ATTRIBUTE;
|
||
|
|
||
|
//
|
||
|
// EAP packet codes from EAP spec.
|
||
|
//
|
||
|
|
||
|
#define EAPCODE_Request 1
|
||
|
#define EAPCODE_Response 2
|
||
|
#define EAPCODE_Success 3
|
||
|
#define EAPCODE_Failure 4
|
||
|
|
||
|
#define MAXEAPCODE 4
|
||
|
|
||
|
//
|
||
|
// Values of the fFlags field in PPP_EAP_INPUT
|
||
|
// These have the same values as the RASEAPF_ flags in ras.h
|
||
|
//
|
||
|
|
||
|
#define RAS_EAP_FLAG_ROUTER 0x00000001 // This is a router
|
||
|
#define RAS_EAP_FLAG_NON_INTERACTIVE 0x00000002 // No UI should be displayed
|
||
|
#define RAS_EAP_FLAG_LOGON 0x00000004 // The user data was
|
||
|
// obtained from Winlogon
|
||
|
#define RAS_EAP_FLAG_PREVIEW 0x00000008 // User has checked
|
||
|
// "Prompt for information
|
||
|
// before dialing"
|
||
|
#define RAS_EAP_FLAG_FIRST_LINK 0x00000010 // This is the first link
|
||
|
#define RAS_EAP_FLAG_MACHINE_AUTH 0x00000020 // Use the default machine cert
|
||
|
// or user cert based on the
|
||
|
// application logon context
|
||
|
#define RAS_EAP_FLAG_GUEST_ACCESS 0x00000040 // Request to provide guest
|
||
|
// access.
|
||
|
#define RAS_EAP_FLAG_8021X_AUTH 0x00000080 // Anything specific to 8021x
|
||
|
// to be done in TLS
|
||
|
|
||
|
|
||
|
typedef struct _PPP_EAP_PACKET
|
||
|
{
|
||
|
BYTE Code; // 1-Request, 2-Response, 3-Success, 4-Failure
|
||
|
|
||
|
BYTE Id; // Id of this packet
|
||
|
|
||
|
BYTE Length[2]; // Length of this packet
|
||
|
|
||
|
BYTE Data[1]; // Data - First byte is Type for Request/Response
|
||
|
|
||
|
}PPP_EAP_PACKET, *PPPP_EAP_PACKET;
|
||
|
|
||
|
#define PPP_EAP_PACKET_HDR_LEN ( sizeof( PPP_EAP_PACKET ) - 1 )
|
||
|
|
||
|
//
|
||
|
// Interface structure between the engine and APs. This is passed to the
|
||
|
// AP's via the RasCpBegin call.
|
||
|
//
|
||
|
|
||
|
typedef struct _PPP_EAP_INPUT
|
||
|
{
|
||
|
//
|
||
|
// Size of this structure
|
||
|
//
|
||
|
|
||
|
DWORD dwSizeInBytes;
|
||
|
|
||
|
//
|
||
|
// The following five fields are valid only in RasEapBegin call
|
||
|
//
|
||
|
|
||
|
DWORD fFlags; // See RAS_EAP_FLAG_*
|
||
|
|
||
|
BOOL fAuthenticator; // Act as authenticator or authenticatee
|
||
|
|
||
|
WCHAR * pwszIdentity; // Users's identity
|
||
|
|
||
|
WCHAR * pwszPassword; // Client's account password. Only valid when
|
||
|
// fAuthenticator is FALSE.
|
||
|
|
||
|
BYTE bInitialId; // Initial packet identifier. Must be used for
|
||
|
// the first EAP packet sent by the DLL and
|
||
|
// incremented by one for each subsequent
|
||
|
// request packet.
|
||
|
|
||
|
//
|
||
|
// During the RasEapBegin call on the authenticator side, pUserAttributes
|
||
|
// contains the set of attributes for the currently dialed in user, e.g.,
|
||
|
// the port used, NAS IP Address, etc.
|
||
|
//
|
||
|
// When the fAuthenticationComplete flag is TRUE, pUserAttributes contains
|
||
|
// attributes (if any) returned by the authentication provider.
|
||
|
//
|
||
|
// This memory is not owned by the EAP DLL and should be treated as
|
||
|
// read-only.
|
||
|
//
|
||
|
|
||
|
RAS_AUTH_ATTRIBUTE * pUserAttributes;
|
||
|
|
||
|
//
|
||
|
// The next two fields are used only if the EAP DLL is using the
|
||
|
// currently configured authentication provider ex: RADIUS or Windows NT
|
||
|
// domain authentication, and the fAuthenticator field above is set to
|
||
|
// TRUE.
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Indicates that the authenticator has completed authentication.
|
||
|
// Ignore this field if an authentication provider is not being used.
|
||
|
//
|
||
|
|
||
|
BOOL fAuthenticationComplete;
|
||
|
|
||
|
//
|
||
|
// Result of the authentication process by the authentication provider.
|
||
|
// NO_ERROR indicates success, otherwise it is a value from winerror.h,
|
||
|
// raserror.h or mprerror.h indicating failure reason.
|
||
|
//
|
||
|
|
||
|
DWORD dwAuthResultCode;
|
||
|
|
||
|
//
|
||
|
// Valid only on the authenticatee side. This may be used on the
|
||
|
// authenticatee side to impersonate the user being authenticated.
|
||
|
//
|
||
|
|
||
|
OPTIONAL HANDLE hTokenImpersonateUser;
|
||
|
|
||
|
//
|
||
|
// This variable should be examined only by the authenticatee side.
|
||
|
// The EAP specification states that the success packet may be lost and
|
||
|
// since it is a non-acknowledged packet, reception of an NCP packet should
|
||
|
// be interpreted as a success packet. This varable is set to TRUE in this
|
||
|
// case only on the authenticatee side
|
||
|
//
|
||
|
|
||
|
BOOL fSuccessPacketReceived;
|
||
|
|
||
|
//
|
||
|
// Will be set to TRUE only when the user dismissed the interactive
|
||
|
// UI that was invoked by the EAP dll
|
||
|
//
|
||
|
|
||
|
BOOL fDataReceivedFromInteractiveUI;
|
||
|
|
||
|
//
|
||
|
// Data received from the Interactive UI. Will be set to
|
||
|
// non-NULL when fDataReceivedFromInteractiveUI is set to TRUE and
|
||
|
// RasEapInvokeInteractiveUI returned non-NULL data. This buffer will be
|
||
|
// freed by the PPP engine on return from the RasEapMakeMessage call. A
|
||
|
// copy of this data should be made in the EAP Dll's memory space.
|
||
|
//
|
||
|
|
||
|
OPTIONAL PBYTE pDataFromInteractiveUI;
|
||
|
|
||
|
//
|
||
|
// Size in bytes of data pointed to by pInteractiveConnectionData. This may
|
||
|
// be 0 if there was no data passed back by RasEapInvokeInteractiveUI.
|
||
|
//
|
||
|
|
||
|
DWORD dwSizeOfDataFromInteractiveUI;
|
||
|
|
||
|
//
|
||
|
// Connection data received from the Config UI. Will be set to non-NULL
|
||
|
// when the RasEapBegin call is made and the RasEapInvokeConfigUI
|
||
|
// returned non-NULL data. This buffer will be freed by the PPP engine
|
||
|
// on return from the RasEapBegin call. A copy of this data should
|
||
|
// be made in the EAP Dll's memory space.
|
||
|
//
|
||
|
|
||
|
OPTIONAL PBYTE pConnectionData;
|
||
|
|
||
|
//
|
||
|
// Size in bytes of data pointed to by pConnectionData. This may be
|
||
|
// 0 if there was no data passed back by the RasEapInvokeConfigUI call.
|
||
|
//
|
||
|
|
||
|
DWORD dwSizeOfConnectionData;
|
||
|
|
||
|
//
|
||
|
// User data received from the Identity UI or Interactive UI. Will be set
|
||
|
// to non-NULL when the RasEapBegin call is made if such data exists.
|
||
|
// This buffer will be freed by the PPP engine on return from the
|
||
|
// RasEapBegin call. A copy of this data should be made in the EAP Dll's
|
||
|
// memory space.
|
||
|
//
|
||
|
|
||
|
OPTIONAL PBYTE pUserData;
|
||
|
|
||
|
//
|
||
|
// Size in bytes of data pointed to by pUserData. This may be 0 if there
|
||
|
// is no data.
|
||
|
//
|
||
|
|
||
|
DWORD dwSizeOfUserData;
|
||
|
|
||
|
//
|
||
|
// Reserved.
|
||
|
//
|
||
|
|
||
|
HANDLE hReserved;
|
||
|
|
||
|
}PPP_EAP_INPUT, *PPPP_EAP_INPUT;
|
||
|
|
||
|
typedef enum _PPP_EAP_ACTION
|
||
|
{
|
||
|
//
|
||
|
// These actions are provided by the EAP DLL as output from the
|
||
|
// RasEapMakeMessage API. They tell the PPP engine what action (if any) to
|
||
|
// take on the EAP DLL's behalf, and eventually inform the engine that the
|
||
|
// EAP DLL has finished authentication.
|
||
|
//
|
||
|
|
||
|
EAPACTION_NoAction, // Be passive, i.e. listen without timeout (default)
|
||
|
EAPACTION_Authenticate, // Invoke the back-end authenticator.
|
||
|
EAPACTION_Done, // End auth session, dwAuthResultCode is set
|
||
|
EAPACTION_SendAndDone, // As above but send message without timeout first
|
||
|
EAPACTION_Send, // Send message, don't timeout waiting for reply
|
||
|
EAPACTION_SendWithTimeout, // Send message, timeout if reply not received
|
||
|
EAPACTION_SendWithTimeoutInteractive // As above, but don't increment
|
||
|
// retry count
|
||
|
|
||
|
}PPP_EAP_ACTION;
|
||
|
|
||
|
typedef struct _PPP_EAP_OUTPUT
|
||
|
{
|
||
|
//
|
||
|
// Size of this structure
|
||
|
//
|
||
|
|
||
|
DWORD dwSizeInBytes;
|
||
|
|
||
|
//
|
||
|
// Action that the PPP engine should take
|
||
|
//
|
||
|
|
||
|
PPP_EAP_ACTION Action;
|
||
|
|
||
|
//
|
||
|
// dwAuthResultCode is valid only with an Action code of Done or
|
||
|
// SendAndDone. Zero value indicates succesful authentication.
|
||
|
// Non-zero indicates unsuccessful authentication with the value
|
||
|
// indicating the reason for authentication failure.
|
||
|
// Non-zero return codes should be only from winerror.h, raserror.h and
|
||
|
// mprerror.h
|
||
|
//
|
||
|
|
||
|
DWORD dwAuthResultCode;
|
||
|
|
||
|
//
|
||
|
// When Action is EAPACTION_Authenticate, pUserAttributes may contain
|
||
|
// additional attributes necessary to authenticate the user, e.g.,
|
||
|
// User-Password. If no credentials are presented, the back-end
|
||
|
// authenticator will assume the user is authentic and only retrieve
|
||
|
// authorizations.
|
||
|
//
|
||
|
// When Action is EAPACTION_Done, EAPACTION_SendAndDone, or EAPACTION_Send,
|
||
|
// pUserAttributes may contain additional attributes for the user. These
|
||
|
// attributes will overwrite any attributes of the same type returned by
|
||
|
// the back-end authenticator.
|
||
|
//
|
||
|
// It is up to the EAP DLL to free this memory in RasEapEnd call.
|
||
|
//
|
||
|
|
||
|
OPTIONAL RAS_AUTH_ATTRIBUTE * pUserAttributes;
|
||
|
//
|
||
|
// Flag set to true will cause the RasEapInvokeInteractiveUI call to be
|
||
|
// made.
|
||
|
//
|
||
|
|
||
|
BOOL fInvokeInteractiveUI;
|
||
|
|
||
|
//
|
||
|
// Pointer to context data, if any, to be sent to the UI. The EAP dll
|
||
|
// is responsible for freeing this buffer in the RasEapEnd call or when
|
||
|
// a response from the user for this invocation is obtained.
|
||
|
//
|
||
|
|
||
|
OPTIONAL PBYTE pUIContextData;
|
||
|
|
||
|
//
|
||
|
// Size in bytes of the data pointed to by pUIContextData. Ignored if
|
||
|
// pUIContextData is NULL
|
||
|
//
|
||
|
|
||
|
DWORD dwSizeOfUIContextData;
|
||
|
|
||
|
//
|
||
|
// When set to TRUE, indicates that the information pointed to by
|
||
|
// pConnectionData should be saved in the phonebook. Only valid on
|
||
|
// the authenticatee side.
|
||
|
//
|
||
|
|
||
|
BOOL fSaveConnectionData;
|
||
|
|
||
|
//
|
||
|
// If fSaveConnectionData above is true, the data pointed to by
|
||
|
// pConnectionData will be saved in the phonebook. This data
|
||
|
// must be freed by the DLL when the RasEapEnd call is made.
|
||
|
//
|
||
|
|
||
|
OPTIONAL PBYTE pConnectionData;
|
||
|
|
||
|
//
|
||
|
// Size, in bytes, of the data pointed to by pConnectionData
|
||
|
//
|
||
|
|
||
|
DWORD dwSizeOfConnectionData;
|
||
|
|
||
|
//
|
||
|
// When set to TRUE, indicates that the information pointed to by
|
||
|
// pUserData should be saved in the registry for this user. Only valid
|
||
|
// on the authenticatee side.
|
||
|
//
|
||
|
|
||
|
BOOL fSaveUserData;
|
||
|
|
||
|
//
|
||
|
// If fSaveUserData above is true, the data pointed to by pUserData will be
|
||
|
// saved in the registry for this user. This data must be freed by the DLL
|
||
|
// when the RasEapEnd call is made.
|
||
|
//
|
||
|
|
||
|
OPTIONAL PBYTE pUserData;
|
||
|
|
||
|
//
|
||
|
// Size, in bytes, of the data pointed to by pUserData
|
||
|
//
|
||
|
|
||
|
DWORD dwSizeOfUserData;
|
||
|
|
||
|
}PPP_EAP_OUTPUT, *PPPP_EAP_OUTPUT;
|
||
|
|
||
|
typedef struct _PPP_EAP_INFO
|
||
|
{
|
||
|
//
|
||
|
// Size of this structure
|
||
|
//
|
||
|
|
||
|
DWORD dwSizeInBytes;
|
||
|
|
||
|
DWORD dwEapTypeId;
|
||
|
|
||
|
//
|
||
|
// Called to initialize/uninitialize this module. This will be called before
|
||
|
// any other call is made. fInitialize will be TRUE iff the module has to be
|
||
|
// initialized. Must return errorcodes only from winerror.h, raserror.h or
|
||
|
// mprerror.h
|
||
|
//
|
||
|
|
||
|
DWORD (APIENTRY *RasEapInitialize)( IN BOOL fInitialize );
|
||
|
|
||
|
//
|
||
|
// Called to get a context buffer for this EAP session and pass
|
||
|
// initialization information. This will be called before any other
|
||
|
// call is made, except RasEapInitialize. Must return errorcodes only from
|
||
|
// winerror.h, raserror.h or mprerror.h
|
||
|
//
|
||
|
|
||
|
DWORD (APIENTRY *RasEapBegin)( OUT VOID ** ppWorkBuffer,
|
||
|
IN PPP_EAP_INPUT * pPppEapInput );
|
||
|
|
||
|
//
|
||
|
// Called to free the context buffer for this EAP session.
|
||
|
// Called after this session is completed successfully or not, provided
|
||
|
// the RasEapBegin call for this EAP session returned successfully.
|
||
|
// Must return errorcodes only from winerror.h, raserror.h or mprerror.h
|
||
|
//
|
||
|
|
||
|
DWORD (APIENTRY *RasEapEnd)( IN VOID * pWorkBuffer );
|
||
|
|
||
|
//
|
||
|
// Called to process an incomming packet and/or send a packet.
|
||
|
// cbSendPacket is the size in bytes of the buffer pointed to by
|
||
|
// pSendPacket. Must return errorcodes only from winerror.h, raserror.h or
|
||
|
// mprerror.h. Error return code indicates an error occurance during the
|
||
|
// authentication process.
|
||
|
//
|
||
|
|
||
|
DWORD (APIENTRY *RasEapMakeMessage)(
|
||
|
IN VOID* pWorkBuf,
|
||
|
IN PPP_EAP_PACKET* pReceivePacket,
|
||
|
OUT PPP_EAP_PACKET* pSendPacket,
|
||
|
IN DWORD cbSendPacket,
|
||
|
OUT PPP_EAP_OUTPUT* pEapOutput,
|
||
|
IN PPP_EAP_INPUT* pEapInput );
|
||
|
|
||
|
}PPP_EAP_INFO, *PPPP_EAP_INFO;
|
||
|
|
||
|
//
|
||
|
// RasEapGetInfo should be exported by the 3rd party EAP dll installed in the
|
||
|
// registry via the Path value.
|
||
|
//
|
||
|
|
||
|
DWORD APIENTRY
|
||
|
RasEapGetInfo(
|
||
|
IN DWORD dwEapTypeId,
|
||
|
OUT PPP_EAP_INFO* pEapInfo
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// RasEapFreeMemory should be exported by the 3rd party EAP dlls installed in
|
||
|
// the registry via the InteractiveUIPath, ConfigUIPath, and IdentityPath
|
||
|
// values.
|
||
|
//
|
||
|
|
||
|
DWORD APIENTRY
|
||
|
RasEapFreeMemory(
|
||
|
IN BYTE* pMemory
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// RasEapInvokeInteractiveUI and RasEapFreeMemory should be exported by the
|
||
|
// 3rd party EAP dll installed in the registry via the InteractiveUIPath
|
||
|
// value.
|
||
|
//
|
||
|
|
||
|
DWORD APIENTRY
|
||
|
RasEapInvokeInteractiveUI(
|
||
|
IN DWORD dwEapTypeId,
|
||
|
IN HWND hwndParent,
|
||
|
IN BYTE* pUIContextData,
|
||
|
IN DWORD dwSizeOfUIContextData,
|
||
|
OUT BYTE** ppDataFromInteractiveUI,
|
||
|
OUT DWORD* pdwSizeOfDataFromInteractiveUI
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// RasEapInvokeConfigUI and RasEapFreeMemory should be exported by the
|
||
|
// 3rd party EAP dll installed in the registry via the ConfigUIPath value.
|
||
|
//
|
||
|
|
||
|
DWORD APIENTRY
|
||
|
RasEapInvokeConfigUI(
|
||
|
IN DWORD dwEapTypeId,
|
||
|
IN HWND hwndParent,
|
||
|
IN DWORD dwFlags,
|
||
|
IN BYTE* pConnectionDataIn,
|
||
|
IN DWORD dwSizeOfConnectionDataIn,
|
||
|
OUT BYTE** ppConnectionDataOut,
|
||
|
OUT DWORD* pdwSizeOfConnectionDataOut
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// RasEapGetIdentity and RasEapFreeMemory should be exported by the
|
||
|
// 3rd party EAP dll installed in the registry via the IdentityPath value.
|
||
|
//
|
||
|
|
||
|
DWORD APIENTRY
|
||
|
RasEapGetIdentity(
|
||
|
IN DWORD dwEapTypeId,
|
||
|
IN HWND hwndParent,
|
||
|
IN DWORD dwFlags,
|
||
|
IN const WCHAR* pwszPhonebook,
|
||
|
IN const WCHAR* pwszEntry,
|
||
|
IN BYTE* pConnectionDataIn,
|
||
|
IN DWORD dwSizeOfConnectionDataIn,
|
||
|
IN BYTE* pUserDataIn,
|
||
|
IN DWORD dwSizeOfUserDataIn,
|
||
|
OUT BYTE** ppUserDataOut,
|
||
|
OUT DWORD* pdwSizeOfUserDataOut,
|
||
|
OUT WCHAR** ppwszIdentity
|
||
|
);
|
||
|
|
||
|
#endif /* WINVER >= 0x0500 */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif // _RASEAPIF_
|
||
|
|