Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

649 lines
24 KiB

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