1 /**
2  * This file is part of the mingw-w64 runtime package.
3  * No warranty is given; refer to the file DISCLAIMER within this package.
4  */
5 
6 #ifndef _RASEAPIF_
7 #define _RASEAPIF_
8 
9 #include <winapifamily.h>
10 
11 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 #define RAS_EAP_REGISTRY_LOCATION TEXT("System\\CurrentControlSet\\Services\\Rasman\\PPP\\EAP")
18 
19 #define RAS_EAP_VALUENAME_PATH TEXT("Path")
20 #define RAS_EAP_VALUENAME_CONFIGUI TEXT("ConfigUIPath")
21 #define RAS_EAP_VALUENAME_INTERACTIVEUI TEXT("InteractiveUIPath")
22 #define RAS_EAP_VALUENAME_IDENTITY TEXT("IdentityPath")
23 #define RAS_EAP_VALUENAME_FRIENDLY_NAME TEXT("FriendlyName")
24 #define RAS_EAP_VALUENAME_DEFAULT_DATA TEXT("ConfigData")
25 #define RAS_EAP_VALUENAME_REQUIRE_CONFIGUI TEXT("RequireConfigUI")
26 #define RAS_EAP_VALUENAME_ENCRYPTION TEXT("MPPEEncryptionSupported")
27 #define RAS_EAP_VALUENAME_INVOKE_NAMEDLG TEXT("InvokeUsernameDialog")
28 #define RAS_EAP_VALUENAME_INVOKE_PWDDLG TEXT("InvokePasswordDialog")
29 #define RAS_EAP_VALUENAME_CONFIG_CLSID TEXT("ConfigCLSID")
30 #define RAS_EAP_VALUENAME_STANDALONE_SUPPORTED TEXT("StandaloneSupported")
31 #define RAS_EAP_VALUENAME_ROLES_SUPPORTED TEXT("RolesSupported")
32 #define RAS_EAP_VALUENAME_PER_POLICY_CONFIG TEXT("PerPolicyConfig")
33 #define RAS_EAP_VALUENAME_ISTUNNEL_METHOD TEXT("IsTunnelMethod")
34 #define RAS_EAP_VALUENAME_FILTER_INNERMETHODS TEXT("FilterInnerMethods")
35 
36 #define RAS_EAP_ROLE_AUTHENTICATOR 0x00000001
37 #define RAS_EAP_ROLE_AUTHENTICATEE 0x00000002
38 
39 #define RAS_EAP_ROLE_EXCLUDE_IN_EAP 0x00000004
40 #define RAS_EAP_ROLE_EXCLUDE_IN_PEAP 0x00000008
41 #define RAS_EAP_ROLE_EXCLUDE_IN_VPN 0x00000010
42 
43   typedef enum _RAS_AUTH_ATTRIBUTE_TYPE_ {
44     raatMinimum = 0,
45     raatUserName,
46     raatUserPassword,
47     raatMD5CHAPPassword,
48     raatNASIPAddress,
49     raatNASPort,
50     raatServiceType,
51     raatFramedProtocol,
52     raatFramedIPAddress,
53     raatFramedIPNetmask,
54     raatFramedRouting = 10,
55     raatFilterId,
56     raatFramedMTU,
57     raatFramedCompression,
58     raatLoginIPHost,
59     raatLoginService,
60     raatLoginTCPPort,
61     raatUnassigned17,
62     raatReplyMessage,
63     raatCallbackNumber,
64     raatCallbackId =20,
65     raatUnassigned21,
66     raatFramedRoute,
67     raatFramedIPXNetwork,
68     raatState,
69     raatClass,
70     raatVendorSpecific,
71     raatSessionTimeout,
72     raatIdleTimeout,
73     raatTerminationAction,
74     raatCalledStationId = 30,
75     raatCallingStationId,
76     raatNASIdentifier,
77     raatProxyState,
78     raatLoginLATService,
79     raatLoginLATNode,
80     raatLoginLATGroup,
81     raatFramedAppleTalkLink,
82     raatFramedAppleTalkNetwork,
83     raatFramedAppleTalkZone,
84     raatAcctStatusType = 40,
85     raatAcctDelayTime,
86     raatAcctInputOctets,
87     raatAcctOutputOctets,
88     raatAcctSessionId,
89     raatAcctAuthentic,
90     raatAcctSessionTime,
91     raatAcctInputPackets,
92     raatAcctOutputPackets,
93     raatAcctTerminateCause,
94     raatAcctMultiSessionId = 50,
95     raatAcctLinkCount,
96     raatAcctEventTimeStamp = 55,
97     raatMD5CHAPChallenge = 60,
98     raatNASPortType,
99     raatPortLimit,
100     raatLoginLATPort,
101     raatTunnelType,
102     raatTunnelMediumType,
103     raatTunnelClientEndpoint,
104     raatTunnelServerEndpoint,
105     raatARAPPassword = 70,
106     raatARAPFeatures,
107     raatARAPZoneAccess,
108     raatARAPSecurity,
109     raatARAPSecurityData,
110     raatPasswordRetry,
111     raatPrompt,
112     raatConnectInfo,
113     raatConfigurationToken,
114     raatEAPMessage,
115     raatSignature = 80,
116     raatARAPChallengeResponse = 84,
117     raatAcctInterimInterval = 85,
118     raatNASIPv6Address = 95,
119     raatFramedInterfaceId,
120     raatFramedIPv6Prefix,
121     raatLoginIPv6Host,
122     raatFramedIPv6Route,
123     raatFramedIPv6Pool,
124     raatARAPGuestLogon = 8096,
125     raatCertificateOID,
126     raatEAPConfiguration,
127     raatPEAPEmbeddedEAPTypeId = 8099,
128     raatInnerEAPTypeId = 8099,
129     raatPEAPFastRoamedSession = 8100,
130     raatFastRoamedSession = 8100,
131     raatEAPTLV = 8102,
132     raatCredentialsChanged,
133     raatPeerId = 9000,
134     raatServerId,
135     raatMethodId,
136     raatEMSK,
137     raatSessionId,
138     raatReserved = 0xffffffff
139   } RAS_AUTH_ATTRIBUTE_TYPE;
140 
141 #define raatARAPChallenge 33
142 #define raatARAPOldPassword 19
143 #define raatARAPNewPassword 20
144 #define raatARAPPasswordChangeReason 21
145 
146   typedef struct _RAS_AUTH_ATTRIBUTE {
147     RAS_AUTH_ATTRIBUTE_TYPE raaType;
148     DWORD dwLength;
149     PVOID Value;
150   } RAS_AUTH_ATTRIBUTE,*PRAS_AUTH_ATTRIBUTE;
151 
152 #define EAPCODE_Request 1
153 #define EAPCODE_Response 2
154 #define EAPCODE_Success 3
155 #define EAPCODE_Failure 4
156 
157 #define MAXEAPCODE 4
158 
159 #define RAS_EAP_FLAG_ROUTER 0x00000001
160 #define RAS_EAP_FLAG_NON_INTERACTIVE 0x00000002
161 #define RAS_EAP_FLAG_LOGON 0x00000004
162 #define RAS_EAP_FLAG_PREVIEW 0x00000008
163 #define RAS_EAP_FLAG_FIRST_LINK 0x00000010
164 #define RAS_EAP_FLAG_MACHINE_AUTH 0x00000020
165 #define RAS_EAP_FLAG_GUEST_ACCESS 0x00000040
166 #define RAS_EAP_FLAG_8021X_AUTH 0x00000080
167 #define RAS_EAP_FLAG_HOSTED_IN_PEAP 0x00000100
168 #define RAS_EAP_FLAG_RESUME_FROM_HIBERNATE 0x00000200
169 #define RAS_EAP_FLAG_PEAP_UPFRONT 0x00000400
170 #define RAS_EAP_FLAG_ALTERNATIVE_USER_DB 0x00000800
171 #define RAS_EAP_FLAG_PEAP_FORCE_FULL_AUTH 0x00001000
172 #define RAS_EAP_FLAG_PRE_LOGON 0x00020000
173 #define RAS_EAP_FLAG_CONFG_READONLY 0x00080000
174 #define RAS_EAP_FLAG_RESERVED 0x00100000
175 #define RAS_EAP_FLAG_SAVE_CREDMAN 0x00200000
176 
177   typedef struct _PPP_EAP_PACKET {
178     BYTE Code;
179     BYTE Id;
180     BYTE Length[2];
181     BYTE Data[1];
182   } PPP_EAP_PACKET,*PPPP_EAP_PACKET;
183 
184 #define PPP_EAP_PACKET_HDR_LEN (sizeof(PPP_EAP_PACKET) - 1)
185 
186   typedef struct _PPP_EAP_INPUT {
187     DWORD dwSizeInBytes;
188     DWORD fFlags;
189     WINBOOL fAuthenticator;
190     WCHAR *pwszIdentity;
191     WCHAR *pwszPassword;
192     BYTE bInitialId;
193     RAS_AUTH_ATTRIBUTE *pUserAttributes;
194     WINBOOL fAuthenticationComplete;
195     DWORD dwAuthResultCode;
196     HANDLE hTokenImpersonateUser;
197     WINBOOL fSuccessPacketReceived;
198     WINBOOL fDataReceivedFromInteractiveUI;
199     PBYTE pDataFromInteractiveUI;
200     DWORD dwSizeOfDataFromInteractiveUI;
201     PBYTE pConnectionData;
202     DWORD dwSizeOfConnectionData;
203     PBYTE pUserData;
204     DWORD dwSizeOfUserData;
205     HANDLE hReserved;
206   } PPP_EAP_INPUT,*PPPP_EAP_INPUT;
207 
208   typedef enum _PPP_EAP_ACTION {
209     EAPACTION_NoAction,
210     EAPACTION_Authenticate,
211     EAPACTION_Done,
212     EAPACTION_SendAndDone,
213     EAPACTION_Send,
214     EAPACTION_SendWithTimeout,
215     EAPACTION_SendWithTimeoutInteractive,
216     EAPACTION_IndicateTLV,
217     EAPACTION_IndicateIdentity
218   } PPP_EAP_ACTION;
219 
220   typedef struct _PPP_EAP_OUTPUT {
221     DWORD dwSizeInBytes;
222     PPP_EAP_ACTION Action;
223     DWORD dwAuthResultCode;
224     RAS_AUTH_ATTRIBUTE *pUserAttributes;
225     WINBOOL fInvokeInteractiveUI;
226     PBYTE pUIContextData;
227     DWORD dwSizeOfUIContextData;
228     WINBOOL fSaveConnectionData;
229     PBYTE pConnectionData;
230     DWORD dwSizeOfConnectionData;
231     WINBOOL fSaveUserData;
232     PBYTE pUserData;
233     DWORD dwSizeOfUserData;
234   } PPP_EAP_OUTPUT,*PPPP_EAP_OUTPUT;
235 
236   typedef struct _PPP_EAP_INFO {
237     DWORD dwSizeInBytes;
238     DWORD dwEapTypeId;
239     DWORD (WINAPI *RasEapInitialize)(WINBOOL fInitialize);
240     DWORD (WINAPI *RasEapBegin)(VOID **ppWorkBuffer, PPP_EAP_INPUT *pPppEapInput);
241     DWORD (WINAPI *RasEapEnd)(VOID *pWorkBuffer);
242     DWORD (WINAPI *RasEapMakeMessage)(VOID *pWorkBuf, PPP_EAP_PACKET *pReceivePacket, PPP_EAP_PACKET *pSendPacket, DWORD cbSendPacket, PPP_EAP_OUTPUT *pEapOutput, PPP_EAP_INPUT *pEapInput);
243   } PPP_EAP_INFO,*PPPP_EAP_INFO;
244 
245   typedef struct _LEGACY_IDENTITY_UI_PARAMS {
246     DWORD eapType;
247     DWORD dwFlags;
248     DWORD dwSizeofConnectionData;
249     BYTE *pConnectionData;
250     DWORD dwSizeofUserData;
251     BYTE *pUserData;
252     DWORD dwSizeofUserDataOut;
253     BYTE *pUserDataOut;
254     LPWSTR pwszIdentity;
255     DWORD dwError;
256   } LEGACY_IDENTITY_UI_PARAMS;
257 
258   typedef struct _LEGACY_INTERACTIVE_UI_PARAMS {
259     DWORD eapType;
260     DWORD dwSizeofContextData;
261     BYTE *pContextData;
262     DWORD dwSizeofInteractiveUIData;
263     BYTE *pInteractiveUIData;
264     DWORD dwError;
265   } LEGACY_INTERACTIVE_UI_PARAMS;
266 
267   DWORD WINAPI RasEapGetInfo(DWORD dwEapTypeId, PPP_EAP_INFO *pEapInfo);
268   DWORD WINAPI RasEapFreeMemory(BYTE *pMemory);
269   DWORD WINAPI RasEapInvokeInteractiveUI(DWORD dwEapTypeId, HWND hwndParent, BYTE *pUIContextData, DWORD dwSizeOfUIContextData, BYTE **ppDataFromInteractiveUI, DWORD *pdwSizeOfDataFromInteractiveUI);
270   DWORD WINAPI RasEapInvokeConfigUI(DWORD dwEapTypeId, HWND hwndParent, DWORD dwFlags, BYTE *pConnectionDataIn, DWORD dwSizeOfConnectionDataIn, BYTE **ppConnectionDataOut, DWORD *pdwSizeOfConnectionDataOut);
271   DWORD WINAPI RasEapGetIdentity(DWORD dwEapTypeId, HWND hwndParent, DWORD dwFlags, const WCHAR *pwszPhonebook, const WCHAR *pwszEntry, BYTE *pConnectionDataIn, DWORD dwSizeOfConnectionDataIn, BYTE *pUserDataIn, DWORD dwSizeOfUserDataIn, BYTE **ppUserDataOut, DWORD *pdwSizeOfUserDataOut, WCHAR **ppwszIdentityOut);
272 
273 #ifdef __cplusplus
274 }
275 #endif
276 
277 #endif
278 #endif
279