Leaked source code of windows server 2003
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.

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