Raseapif.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:23k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*++
  2. Copyright (c) Microsoft Corporation. All rights reserved.
  3. Module Name:
  4.     raseapif.h
  5. Abstract:
  6.     Defines interface between a third party authentication module
  7.     and the Remote Access Service PPP engine.
  8. --*/
  9. #ifndef _RASEAPIF_
  10. #define _RASEAPIF_
  11. #if _MSC_VER > 1000
  12. #pragma once
  13. #endif
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. #if(WINVER >= 0x0500)
  18. //
  19. // Defines used for installtion of EAP DLL
  20. //
  21. // Custom EAP DLL (ex. Name=Sample.dll, Type=(decimal 40) regsitry installation)
  22. //
  23. // HKEY_LOCAL_MACHINESystemCurrentControlSetServicesRasmanPPPEAP40)
  24. //      Path                (REG_EXPAND_SZ) %SystemRoot%system32sample.dll
  25. //      ConfigUIPath        (REG_EXPAND_SZ) %SystemRoot%system32sample.dll
  26. //      InteractiveUIPath   (REG_EXPAND_SZ) %SystemRoot%system32sample.dll
  27. //      IdentityPath        (REG_EXPAND_SZ) %SystemRoot%system32sample.dll
  28. //      FriendlyName        (REG_SZ) Sample EAP Protocol
  29. //      RequireConfigUI     (REG_DWORD)     1
  30. //      ConfigCLSID         (REG_SZ)        {0000031A-0000-0000-C000-000000000046}
  31. //      StandaloneSupported (REG_DWORD)     1
  32. //
  33. #define RAS_EAP_REGISTRY_LOCATION   
  34.     TEXT("System\CurrentControlSet\Services\Rasman\PPP\EAP")
  35. #define RAS_EAP_VALUENAME_PATH                  TEXT("Path")
  36. #define RAS_EAP_VALUENAME_CONFIGUI              TEXT("ConfigUIPath")
  37. #define RAS_EAP_VALUENAME_INTERACTIVEUI         TEXT("InteractiveUIPath")
  38. #define RAS_EAP_VALUENAME_IDENTITY              TEXT("IdentityPath")
  39. #define RAS_EAP_VALUENAME_FRIENDLY_NAME         TEXT("FriendlyName")
  40. #define RAS_EAP_VALUENAME_DEFAULT_DATA          TEXT("ConfigData")
  41. #define RAS_EAP_VALUENAME_REQUIRE_CONFIGUI      TEXT("RequireConfigUI")
  42. #define RAS_EAP_VALUENAME_ENCRYPTION            TEXT("MPPEEncryptionSupported")
  43. #define RAS_EAP_VALUENAME_INVOKE_NAMEDLG        TEXT("InvokeUsernameDialog")
  44. #define RAS_EAP_VALUENAME_INVOKE_PWDDLG         TEXT("InvokePasswordDialog")
  45. #define RAS_EAP_VALUENAME_CONFIG_CLSID          TEXT("ConfigCLSID")
  46. #define RAS_EAP_VALUENAME_STANDALONE_SUPPORTED  TEXT("StandaloneSupported")
  47. typedef enum _RAS_AUTH_ATTRIBUTE_TYPE_
  48. {
  49.     raatMinimum = 0,                // Undefined
  50.     raatUserName,                   // Value field is a Pointer
  51.     raatUserPassword,               // Value field is a Pointer
  52.     raatMD5CHAPPassword,            // Value field is a Pointer
  53.     raatNASIPAddress,               // Value field is a 32 bit integral value
  54.     raatNASPort,                    // Value field is a 32 bit integral value
  55.     raatServiceType,                // Value field is a 32 bit integral value
  56.     raatFramedProtocol,             // Value field is a 32 bit integral value
  57.     raatFramedIPAddress,            // Value field is a 32 bit integral value
  58.     raatFramedIPNetmask,            // Value field is a 32 bit integral value
  59.     raatFramedRouting = 10,         // Value field is a 32 bit integral value
  60.     raatFilterId,                   // Value field is a Pointer
  61.     raatFramedMTU,                  // Value field is a 32 bit integral value
  62.     raatFramedCompression,          // Value field is a 32 bit integral value
  63.     raatLoginIPHost,                // Value field is a 32 bit integral value
  64.     raatLoginService,               // Value field is a 32 bit integral value
  65.     raatLoginTCPPort,               // Value field is a 32 bit integral value
  66.     raatUnassigned17,               // Undefined
  67.     raatReplyMessage,               // Value field is a Pointer
  68.     raatCallbackNumber,             // Value field is a Pointer
  69.     raatCallbackId =20,             // Value field is a Pointer
  70.     raatUnassigned21,               // Undefined
  71.     raatFramedRoute,                // Value field is a Pointer
  72.     raatFramedIPXNetwork,           // Value field is a 32 bit integral value
  73.     raatState,                      // Value field is a Pointer
  74.     raatClass,                      // Value field is a Pointer
  75.     raatVendorSpecific,             // Value field is a Pointer
  76.     raatSessionTimeout,             // Value field is a 32 bit integral value
  77.     raatIdleTimeout,                // Value field is a 32 bit integral value
  78.     raatTerminationAction,          // Value field is a 32 bit integral value
  79.     raatCalledStationId = 30,       // Value field is a Pointer
  80.     raatCallingStationId,           // Value field is a Pointer
  81.     raatNASIdentifier,              // Value field is a Pointer
  82.     raatProxyState,                 // Value field is a Pointer
  83.     raatLoginLATService,            // Value field is a Pointer
  84.     raatLoginLATNode,               // Value field is a Pointer
  85.     raatLoginLATGroup,              // Value field is a Pointer
  86.     raatFramedAppleTalkLink,        // Value field is a 32 bit integral value
  87.     raatFramedAppleTalkNetwork,     // Value field is a 32 bit integral value
  88.     raatFramedAppleTalkZone,        // Value field is a Pointer
  89.     raatAcctStatusType = 40,        // Value field is a 32 bit integral value
  90.     raatAcctDelayTime,              // Value field is a 32 bit integral value
  91.     raatAcctInputOctets,            // Value field is a 32 bit integral value
  92.     raatAcctOutputOctets,           // Value field is a 32 bit integral value
  93.     raatAcctSessionId,              // Value field is a Pointer
  94.     raatAcctAuthentic,              // Value field is a 32 bit integral value
  95.     raatAcctSessionTime,            // Value field is a 32 bit integral value
  96.     raatAcctInputPackets,           // Value field is a 32 bit integral value
  97.     raatAcctOutputPackets,          // Value field is a 32 bit integral value
  98.     raatAcctTerminateCause,         // Value field is a 32 bit integral value
  99.     raatAcctMultiSessionId = 50,    // Value field is a Pointer
  100.     raatAcctLinkCount,              // Value field is a 32 bit integral value
  101.     raatAcctEventTimeStamp = 55,    // Value field is a 32 bit integral value
  102.     raatMD5CHAPChallenge = 60,      // Value field is a Pointer
  103.     raatNASPortType,                // Value field is a 32 bit integral value
  104.     raatPortLimit,                  // Value field is a 32 bit integral value
  105.     raatLoginLATPort,               // Value field is a Pointer
  106.     raatTunnelType,                 // Value field is a 32 bit integral value
  107.     raatTunnelMediumType,           // Value field is a 32 bit integral value
  108.     raatTunnelClientEndpoint,       // Value field is a Pointer
  109.     raatTunnelServerEndpoint,       // Value field is a Pointer
  110.     raatARAPPassword = 70,          // Value field is a Pointer
  111.     raatARAPFeatures,               // Value field is a Pointer
  112.     raatARAPZoneAccess,             // Value field is a 32 bit integral value
  113.     raatARAPSecurity,               // Value field is a 32 bit integral value
  114.     raatARAPSecurityData,           // Value field is a Pointer
  115.     raatPasswordRetry,              // Value field is a 32 bit integral value
  116.     raatPrompt,                     // Value field is a 32 bit integral value
  117.     raatConnectInfo,                // Value field is a Pointer
  118.     raatConfigurationToken,         // Value field is a Pointer
  119.     raatEAPMessage,                 // Value field is a Pointer
  120.     raatSignature = 80,             // Value field is a Pointer
  121.     raatARAPChallengeResponse = 84, // Value field is a Pointer
  122.     raatAcctInterimInterval = 85,   // Value field is a 32 bit integral value
  123.     raatARAPGuestLogon = 8096,      // Value field is a 32 bit integral value
  124.     raatCertificateEKU,             // Value field is a Pointer
  125.     raatReserved = 0xFFFFFFFF       // Undefined
  126. }RAS_AUTH_ATTRIBUTE_TYPE;
  127. //
  128. // VSA attribute ids for ARAP
  129. //
  130. #define  raatARAPChallenge              33
  131. #define  raatARAPOldPassword            19
  132. #define  raatARAPNewPassword            20
  133. #define  raatARAPPasswordChangeReason   21
  134. //
  135. // Value is set to the 32 bit integral value or a pointer to data.
  136. // 32 bit integral values should be in host format, not network format.
  137. // Length for a 32 bit integral value can be 1, 2 or 4. The array of
  138. // attributes must be terminated with an attribute of type raatMinimum.
  139. //
  140. typedef struct _RAS_AUTH_ATTRIBUTE
  141. {
  142.     RAS_AUTH_ATTRIBUTE_TYPE raaType;
  143.     DWORD                   dwLength;
  144.     PVOID                   Value;
  145. }RAS_AUTH_ATTRIBUTE, *PRAS_AUTH_ATTRIBUTE;
  146. //
  147. // EAP packet codes from EAP spec.
  148. //
  149. #define EAPCODE_Request         1
  150. #define EAPCODE_Response        2
  151. #define EAPCODE_Success         3
  152. #define EAPCODE_Failure         4
  153. #define MAXEAPCODE              4
  154. //
  155. // Values of the fFlags field in PPP_EAP_INPUT
  156. // These have the same values as the RASEAPF_ flags in ras.h
  157. //
  158. #define RAS_EAP_FLAG_ROUTER             0x00000001  // This is a router
  159. #define RAS_EAP_FLAG_NON_INTERACTIVE    0x00000002  // No UI should be displayed
  160. #define RAS_EAP_FLAG_LOGON              0x00000004  // The user data was
  161.                                                     // obtained from Winlogon
  162. #define RAS_EAP_FLAG_PREVIEW            0x00000008  // User has checked
  163.                                                     // "Prompt for information
  164.                                                     // before dialing"
  165. #define RAS_EAP_FLAG_FIRST_LINK         0x00000010  // This is the first link
  166. #define RAS_EAP_FLAG_MACHINE_AUTH       0x00000020  // Use the default machine cert
  167.                                                     // or user cert based on the
  168.                                                     // application logon context
  169. typedef struct _PPP_EAP_PACKET
  170. {
  171.     BYTE    Code;       // 1-Request, 2-Response, 3-Success, 4-Failure
  172.     BYTE    Id;         // Id of this packet
  173.     BYTE    Length[2];  // Length of this packet
  174.     BYTE    Data[1];    // Data - First byte is Type for Request/Response
  175. }PPP_EAP_PACKET, *PPPP_EAP_PACKET;
  176. #define PPP_EAP_PACKET_HDR_LEN  ( sizeof( PPP_EAP_PACKET ) - 1 )
  177. //
  178. // Interface structure between the engine and APs. This is passed to the
  179. // AP's via the RasCpBegin call.
  180. //
  181. typedef struct _PPP_EAP_INPUT
  182. {
  183.     //
  184.     // Size of this structure
  185.     //
  186.     DWORD       dwSizeInBytes;
  187.     //
  188.     // The following five fields are valid only in RasEapBegin call
  189.     //
  190.     DWORD       fFlags;         // See RAS_EAP_FLAG_*
  191.     BOOL        fAuthenticator; // Act as authenticator or authenticatee
  192.     WCHAR *     pwszIdentity;   // Users's identity
  193.     WCHAR *     pwszPassword;   // Client's account password. Only valid when
  194.                                 // fAuthenticator is FALSE.
  195.     BYTE        bInitialId;     // Initial packet identifier. Must be used for
  196.                                 // the first EAP packet sent by the DLL and
  197.                                 // incremented by one for each subsequent
  198.                                 // request packet.
  199.     //
  200.     // During the RasEapBegin call on the authenticator side, pUserAttributes
  201.     // contains the set of attributes for the currently dialed in user, e.g.,
  202.     // the port used, NAS IP Address, etc.
  203.     //
  204.     // When the fAuthenticationComplete flag is TRUE, pUserAttributes contains
  205.     // attributes (if any) returned by the authentication provider.
  206.     //
  207.     // This memory is not owned by the EAP DLL and should be treated as
  208.     // read-only.
  209.     //
  210.     RAS_AUTH_ATTRIBUTE * pUserAttributes;
  211.     //
  212.     // The next two fields are used only if the EAP DLL is using the
  213.     // currently configured authentication provider ex: RADIUS or Windows NT
  214.     // domain authentication, and the fAuthenticator field above is set to
  215.     // TRUE.
  216.     //
  217.     //
  218.     // Indicates that the authenticator has completed authentication.
  219.     // Ignore this field if an authentication provider is not being used.
  220.     //
  221.     BOOL                fAuthenticationComplete;
  222.     //
  223.     // Result of the authentication process by the authentication provider.
  224.     // NO_ERROR indicates success, otherwise it is a value from winerror.h,
  225.     // raserror.h or mprerror.h indicating failure reason.
  226.     //
  227.     DWORD               dwAuthResultCode;
  228.     //
  229.     // Valid only on the authenticatee side. This may be used on the
  230.     // authenticatee side to impersonate the user being authenticated.
  231.     //
  232.     OPTIONAL HANDLE     hTokenImpersonateUser;
  233.     //
  234.     // This variable should be examined only by the authenticatee side.
  235.     // The EAP specification states that the success packet may be lost and
  236.     // since it is a non-acknowledged packet, reception of an NCP packet should
  237.     // be interpreted as a success packet. This varable is set to TRUE in this
  238.     // case only on the authenticatee side
  239.     //
  240.     BOOL                fSuccessPacketReceived;
  241.     //
  242.     // Will be set to TRUE only when the user dismissed the interactive
  243.     // UI that was invoked by the EAP dll
  244.     //
  245.     BOOL                fDataReceivedFromInteractiveUI;
  246.     //
  247.     // Data received from the Interactive UI. Will be set to
  248.     // non-NULL when fDataReceivedFromInteractiveUI is set to TRUE and
  249.     // RasEapInvokeInteractiveUI returned non-NULL data. This buffer will be
  250.     // freed by the PPP engine on return from the RasEapMakeMessage call. A
  251.     // copy of this data should be made in the EAP Dll's memory space.
  252.     //
  253.     OPTIONAL PBYTE      pDataFromInteractiveUI;
  254.     //
  255.     // Size in bytes of data pointed to by pInteractiveConnectionData. This may
  256.     // be 0 if there was no data passed back by RasEapInvokeInteractiveUI.
  257.     //
  258.     DWORD               dwSizeOfDataFromInteractiveUI;
  259.     //
  260.     // Connection data received from the Config UI. Will be set to non-NULL
  261.     // when the RasEapBegin call is made and the RasEapInvokeConfigUI
  262.     // returned non-NULL data. This buffer will be freed by the PPP engine
  263.     // on return from the RasEapBegin call. A copy of this data should
  264.     // be made in the EAP Dll's memory space.
  265.     //
  266.     OPTIONAL PBYTE      pConnectionData;
  267.     //
  268.     // Size in bytes of data pointed to by pConnectionData. This may be
  269.     // 0 if there was no data passed back by the RasEapInvokeConfigUI call.
  270.     //
  271.     DWORD               dwSizeOfConnectionData;
  272.     //
  273.     // User data received from the Identity UI or Interactive UI. Will be set
  274.     // to non-NULL when the RasEapBegin call is made if such data exists.
  275.     // This buffer will be freed by the PPP engine on return from the
  276.     // RasEapBegin call. A copy of this data should be made in the EAP Dll's
  277.     // memory space.
  278.     //
  279.     OPTIONAL PBYTE      pUserData;
  280.     //
  281.     // Size in bytes of data pointed to by pUserData. This may be 0 if there
  282.     // is no data.
  283.     //
  284.     DWORD               dwSizeOfUserData;
  285.     //
  286.     // Reserved.
  287.     //
  288.     HANDLE              hReserved;
  289. }PPP_EAP_INPUT, *PPPP_EAP_INPUT;
  290. typedef enum _PPP_EAP_ACTION
  291. {
  292.     //
  293.     // These actions are provided by the EAP DLL as output from the
  294.     // RasEapMakeMessage API.  They tell the PPP engine what action (if any) to
  295.     // take on the EAP DLL's behalf, and eventually inform the engine that the
  296.     // EAP DLL has finished authentication.
  297.     //
  298.     EAPACTION_NoAction,     // Be passive, i.e. listen without timeout (default)
  299.     EAPACTION_Authenticate, // Invoke the back-end authenticator.
  300.     EAPACTION_Done,         // End auth session, dwAuthResultCode is set
  301.     EAPACTION_SendAndDone,  // As above but send message without timeout first
  302.     EAPACTION_Send,         // Send message, don't timeout waiting for reply
  303.     EAPACTION_SendWithTimeout, // Send message, timeout if reply not received
  304.     EAPACTION_SendWithTimeoutInteractive  // As above, but don't increment
  305.                                           // retry count
  306. }PPP_EAP_ACTION;
  307. typedef struct _PPP_EAP_OUTPUT
  308. {
  309.     //
  310.     // Size of this structure
  311.     //
  312.     DWORD                   dwSizeInBytes;
  313.     //
  314.     // Action that the PPP engine should take
  315.     //
  316.     PPP_EAP_ACTION          Action;
  317.     //
  318.     // dwAuthResultCode is valid only with an Action code of Done or
  319.     // SendAndDone. Zero value indicates succesful authentication.
  320.     // Non-zero indicates unsuccessful authentication with the value
  321.     // indicating the reason for authentication failure.
  322.     // Non-zero return codes should be only from winerror.h, raserror.h and
  323.     // mprerror.h
  324.     //
  325.     DWORD                   dwAuthResultCode;
  326.     //
  327.     // When Action is EAPACTION_Authenticate, pUserAttributes may contain
  328.     // additional attributes necessary to authenticate the user, e.g.,
  329.     // User-Password. If no credentials are presented, the back-end
  330.     // authenticator will assume the user is authentic and only retrieve
  331.     // authorizations.
  332.     //
  333.     // When Action is EAPACTION_Done, EAPACTION_SendAndDone, or EAPACTION_Send,
  334.     // pUserAttributes may contain additional attributes for the user. These
  335.     // attributes will overwrite any attributes of the same type returned by
  336.     // the back-end authenticator.
  337.     //
  338.     // It is up to the EAP DLL to free this memory in RasEapEnd call.
  339.     //
  340.     OPTIONAL RAS_AUTH_ATTRIBUTE * pUserAttributes;
  341.     //
  342.     // Flag set to true will cause the RasEapInvokeInteractiveUI call to be
  343.     // made.
  344.     //
  345.     BOOL                    fInvokeInteractiveUI;
  346.     //
  347.     // Pointer to context data, if any, to be sent to the UI. The EAP dll
  348.     // is responsible for freeing this buffer in the RasEapEnd call or when
  349.     // a response from the user for this invocation is obtained.
  350.     //
  351.     OPTIONAL PBYTE          pUIContextData;
  352.     //
  353.     // Size in bytes of the data pointed to by pUIContextData. Ignored if
  354.     // pUIContextData is NULL
  355.     //
  356.     DWORD                   dwSizeOfUIContextData;
  357.     //
  358.     // When set to TRUE, indicates that the information pointed to by
  359.     // pConnectionData should be saved in the phonebook. Only valid on
  360.     // the authenticatee side.
  361.     //
  362.     BOOL                    fSaveConnectionData;
  363.     //
  364.     // If fSaveConnectionData above is true, the data pointed to by
  365.     // pConnectionData will be saved in the phonebook. This data
  366.     // must be freed by the DLL when the RasEapEnd call is made.
  367.     //
  368.     OPTIONAL PBYTE          pConnectionData;
  369.     //
  370.     // Size, in bytes, of the data pointed to by pConnectionData
  371.     //
  372.     DWORD                   dwSizeOfConnectionData;
  373.     //
  374.     // When set to TRUE, indicates that the information pointed to by
  375.     // pUserData should be saved in the registry for this user. Only valid
  376.     // on the authenticatee side.
  377.     //
  378.     BOOL                    fSaveUserData;
  379.     //
  380.     // If fSaveUserData above is true, the data pointed to by pUserData will be
  381.     // saved in the registry for this user. This data must be freed by the DLL
  382.     // when the RasEapEnd call is made.
  383.     //
  384.     OPTIONAL PBYTE          pUserData;
  385.     //
  386.     // Size, in bytes, of the data pointed to by pUserData
  387.     //
  388.     DWORD                   dwSizeOfUserData;
  389. }PPP_EAP_OUTPUT, *PPPP_EAP_OUTPUT;
  390. typedef struct _PPP_EAP_INFO
  391. {
  392.     //
  393.     // Size of this structure
  394.     //
  395.     DWORD   dwSizeInBytes;
  396.     DWORD   dwEapTypeId;
  397.     //
  398.     // Called to initialize/uninitialize this module. This will be called before
  399.     // any other call is made. fInitialize will be TRUE iff the module has to be
  400.     // initialized. Must return errorcodes only from winerror.h, raserror.h or
  401.     // mprerror.h
  402.     //
  403.     DWORD   (APIENTRY *RasEapInitialize)(   IN  BOOL        fInitialize );
  404.     //
  405.     // Called to get a context buffer for this EAP session and pass
  406.     // initialization information. This will be called before any other
  407.     // call is made, except RasEapInitialize. Must return errorcodes only from
  408.     // winerror.h, raserror.h or mprerror.h
  409.     //
  410.     DWORD   (APIENTRY *RasEapBegin)( OUT VOID **             ppWorkBuffer,
  411.                                      IN  PPP_EAP_INPUT *     pPppEapInput );
  412.     //
  413.     // Called to free the context buffer for this EAP session.
  414.     // Called after this session is completed successfully or not, provided
  415.     // the RasEapBegin call for this EAP session returned successfully.
  416.     // Must return errorcodes only from winerror.h, raserror.h or mprerror.h
  417.     //
  418.     DWORD   (APIENTRY *RasEapEnd)(   IN  VOID *     pWorkBuffer );
  419.     //
  420.     // Called to process an incomming packet and/or send a packet.
  421.     // cbSendPacket is the size in bytes of the buffer pointed to by
  422.     // pSendPacket. Must return errorcodes only from winerror.h, raserror.h or
  423.     // mprerror.h. Error return code indicates an error occurance during the
  424.     // authentication process.
  425.     //
  426.     DWORD   (APIENTRY *RasEapMakeMessage)(
  427.                             IN  VOID*               pWorkBuf,
  428.                             IN  PPP_EAP_PACKET*     pReceivePacket,
  429.                             OUT PPP_EAP_PACKET*     pSendPacket,
  430.                             IN  DWORD               cbSendPacket,
  431.                             OUT PPP_EAP_OUTPUT*     pEapOutput,
  432.                             IN  PPP_EAP_INPUT*      pEapInput );
  433. }PPP_EAP_INFO, *PPPP_EAP_INFO;
  434. //
  435. // RasEapGetInfo should be exported by the 3rd party EAP dll installed in the
  436. // registry via the Path value.
  437. //
  438. DWORD APIENTRY
  439. RasEapGetInfo(
  440.     IN  DWORD           dwEapTypeId,
  441.     OUT PPP_EAP_INFO*   pEapInfo
  442. );
  443. //
  444. // RasEapFreeMemory should be exported by the 3rd party EAP dlls installed in
  445. // the registry via the InteractiveUIPath, ConfigUIPath, and IdentityPath
  446. // values.
  447. //
  448. DWORD APIENTRY
  449. RasEapFreeMemory(
  450.     IN  BYTE*           pMemory
  451. );
  452. //
  453. // RasEapInvokeInteractiveUI and RasEapFreeMemory should be exported by the
  454. // 3rd party EAP dll installed in the registry via the InteractiveUIPath
  455. // value.
  456. //
  457. DWORD APIENTRY
  458. RasEapInvokeInteractiveUI(
  459.     IN  DWORD           dwEapTypeId,
  460.     IN  HWND            hwndParent,
  461.     IN  BYTE*           pUIContextData,
  462.     IN  DWORD           dwSizeOfUIContextData,
  463.     OUT BYTE**          ppDataFromInteractiveUI,
  464.     OUT DWORD*          pdwSizeOfDataFromInteractiveUI
  465. );
  466. //
  467. // RasEapInvokeConfigUI and RasEapFreeMemory should be exported by the
  468. // 3rd party EAP dll installed in the registry via the ConfigUIPath value.
  469. //
  470. DWORD APIENTRY
  471. RasEapInvokeConfigUI(
  472.     IN  DWORD           dwEapTypeId,
  473.     IN  HWND            hwndParent,
  474.     IN  DWORD           dwFlags,
  475.     IN  BYTE*           pConnectionDataIn,
  476.     IN  DWORD           dwSizeOfConnectionDataIn,
  477.     OUT BYTE**          ppConnectionDataOut,
  478.     OUT DWORD*          pdwSizeOfConnectionDataOut
  479. );
  480. //
  481. // RasEapGetIdentity and RasEapFreeMemory should be exported by the
  482. // 3rd party EAP dll installed in the registry via the IdentityPath value.
  483. //
  484. DWORD APIENTRY
  485. RasEapGetIdentity(
  486.     IN  DWORD           dwEapTypeId,
  487.     IN  HWND            hwndParent,
  488.     IN  DWORD           dwFlags,
  489.     IN  const WCHAR*    pwszPhonebook,
  490.     IN  const WCHAR*    pwszEntry,
  491.     IN  BYTE*           pConnectionDataIn,
  492.     IN  DWORD           dwSizeOfConnectionDataIn,
  493.     IN  BYTE*           pUserDataIn,
  494.     IN  DWORD           dwSizeOfUserDataIn,
  495.     OUT BYTE**          ppUserDataOut,
  496.     OUT DWORD*          pdwSizeOfUserDataOut,
  497.     OUT WCHAR**         ppwszIdentity
  498. );
  499. #endif /* WINVER >= 0x0500 */
  500. #ifdef __cplusplus
  501. }
  502. #endif
  503. #endif // _RASEAPIF_