1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _INC_FWPMTYPES
7 #define _INC_FWPMTYPES
8 #include <fwptypes.h>
9 #include <ipsectypes.h>
10 #include <iketypes.h>
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 #if (_WIN32_WINNT >= 0x0600)
16 
17 typedef enum FWPM_PROVIDER_CONTEXT_TYPE_ {
18   FWPM_IPSEC_KEYING_CONTEXT,
19   FWPM_IPSEC_IKE_QM_TRANSPORT_CONTEXT,
20   FWPM_IPSEC_IKE_QM_TUNNEL_CONTEXT,
21   FWPM_IPSEC_AUTHIP_QM_TRANSPORT_CONTEXT,
22   FWPM_IPSEC_AUTHIP_QM_TUNNEL_CONTEXT,
23   FWPM_IPSEC_IKE_MM_CONTEXT,
24   FWPM_IPSEC_AUTHIP_MM_CONTEXT,
25   FWPM_CLASSIFY_OPTIONS_CONTEXT,
26   FWPM_GENERAL_CONTEXT,
27   FWPM_IPSEC_IKEV2_QM_TUNNEL_CONTEXT,
28   FWPM_IPSEC_IKEV2_MM_CONTEXT,
29   FWPM_DOSP_CONTEXT,
30   FWPM_PROVIDER_CONTEXT_TYPE_MAX
31 } FWPM_PROVIDER_CONTEXT_TYPE;
32 
33 typedef enum FWPM_NET_EVENT_TYPE_ {
34   FWPM_NET_EVENT_TYPE_IKEEXT_MM_FAILURE,
35   FWPM_NET_EVENT_TYPE_IKEEXT_QM_FAILURE,
36   FWPM_NET_EVENT_TYPE_IKEEXT_EM_FAILURE,
37   FWPM_NET_EVENT_TYPE_CLASSIFY_DROP,
38   FWPM_NET_EVENT_TYPE_IPSEC_KERNEL_DROP,
39   FWPM_NET_EVENT_TYPE_IPSEC_DOSP_DROP,
40   FWPM_NET_EVENT_TYPE_MAX
41 } FWPM_NET_EVENT_TYPE;
42 
43 typedef struct FWPM_ACTION0_ {
44   FWP_ACTION_TYPE type;
45   __C89_NAMELESS union {
46     GUID filterType;
47     GUID calloutKey;
48   };
49 } FWPM_ACTION0;
50 
51 typedef struct FWPM_DISPLAY_DATA0_ {
52   wchar_t *name;
53   wchar_t *description;
54 } FWPM_DISPLAY_DATA0;
55 
56 typedef struct FWPM_SESSION0_ {
57   GUID               sessionKey;
58   FWPM_DISPLAY_DATA0 displayData;
59   UINT32             flags;
60   UINT32             txnWaitTimeoutInMSec;
61   DWORD              processId;
62   SID                *sid;
63   wchar_t            *username;
64   WINBOOL            kernelMode;
65 } FWPM_SESSION0;
66 
67 typedef struct FWPM_CALLOUT_ENUM_TEMPLATE0_ {
68   GUID *providerKey;
69   GUID layerKey;
70 } FWPM_CALLOUT_ENUM_TEMPLATE0;
71 
72 typedef struct FWPM_CALLOUT_SUBSCRIPTION0_ {
73   FWPM_CALLOUT_ENUM_TEMPLATE0 *enumTemplate;
74   UINT32                      flags;
75   GUID                        sessionKey;
76 } FWPM_CALLOUT_SUBSCRIPTION0;
77 
78 typedef enum FWPM_CHANGE_TYPE_ {
79   FWPM_CHANGE_ADD        = 1,
80   FWPM_CHANGE_DELETE,
81   FWPM_CHANGE_TYPE_MAX
82 } FWPM_CHANGE_TYPE;
83 
84 typedef struct FWPM_CALLOUT_CHANGE0_ {
85   FWPM_CHANGE_TYPE changeType;
86   GUID             calloutKey;
87   UINT32           calloutId;
88 } FWPM_CALLOUT_CHANGE0;
89 
90 typedef struct FWPM_CALLOUT0_ {
91   GUID               calloutKey;
92   FWPM_DISPLAY_DATA0 displayData;
93   UINT32             flags;
94   GUID               *providerKey;
95   FWP_BYTE_BLOB      providerData;
96   GUID               applicableLayer;
97   UINT32             calloutId;
98 } FWPM_CALLOUT0;
99 
100 typedef struct FWPM_CLASSIFY_OPTION0_ {
101   FWP_CLASSIFY_OPTION_TYPE type;
102   FWP_VALUE0               value;
103 } FWPM_CLASSIFY_OPTION0;
104 
105 typedef struct FWPM_CLASSIFY_OPTIONS0_ {
106   UINT32                numOptions;
107   FWPM_CLASSIFY_OPTION0 *options;
108 } FWPM_CLASSIFY_OPTIONS0;
109 
110 typedef enum FWPM_ENGINE_OPTION_ {
111   FWPM_ENGINE_COLLECT_NET_EVENTS,
112   FWPM_ENGINE_NET_EVENT_MATCH_ANY_KEYWORDS,
113   FWPM_ENGINE_NAME_CACHE,
114   FWPM_ENGINE_OPTION_MAX
115 } FWPM_ENGINE_OPTION;
116 
117 typedef enum FWPM_FIELD_TYPE_ {
118   FWPM_FIELD_RAW_DATA,
119   FWPM_FIELD_IP_ADDRESS,
120   FWPM_FIELD_FLAGS,
121   FWPM_FIELD_TYPE_MAX
122 } FWPM_FIELD_TYPE;
123 
124 typedef struct FWPM_FIELD0_ {
125   GUID            *fieldKey;
126   FWPM_FIELD_TYPE type;
127   FWP_DATA_TYPE   dataType;
128 } FWPM_FIELD0;
129 
130 typedef struct FWPM_FILTER_CHANGE0_ {
131   FWPM_CHANGE_TYPE changeType;
132   GUID             filterKey;
133   UINT64           filterId;
134 } FWPM_FILTER_CHANGE0;
135 
136 typedef struct FWPM_FILTER_CONDITION0_ {
137   GUID                 fieldKey;
138   FWP_MATCH_TYPE       matchType;
139   FWP_CONDITION_VALUE0 conditionValue;
140 } FWPM_FILTER_CONDITION0;
141 
142 typedef struct FWPM_PROVIDER_CONTEXT_ENUM_TEMPLATE0_ {
143   GUID                       *providerKey;
144   FWPM_PROVIDER_CONTEXT_TYPE providerContextType;
145 } FWPM_PROVIDER_CONTEXT_ENUM_TEMPLATE0;
146 
147 typedef struct FWPM_FILTER_ENUM_TEMPLATE0_ {
148   GUID                                 *providerKey;
149   GUID                                 layerKey;
150   FWP_FILTER_ENUM_TYPE                 enumType;
151   UINT32                               flags;
152   FWPM_PROVIDER_CONTEXT_ENUM_TEMPLATE0 *providerContextTemplate;
153   UINT32                               numFilterConditions;
154   FWPM_FILTER_CONDITION0               *filterCondition;
155   UINT32                               actionMask;
156   GUID                                 *calloutKey;
157 } FWPM_FILTER_ENUM_TEMPLATE0;
158 
159 typedef struct FWPM_FILTER_SUBSCRIPTION0_ {
160   FWPM_FILTER_ENUM_TEMPLATE0 *enumTemplate;
161   UINT32                     flags;
162   GUID                       sessionKey;
163 } FWPM_FILTER_SUBSCRIPTION0;
164 
165 typedef struct FWPM_FILTER0_ {
166   GUID                   filterKey;
167   FWPM_DISPLAY_DATA0     displayData;
168   UINT32                 flags;
169   GUID                   *providerKey;
170   FWP_BYTE_BLOB          providerData;
171   GUID                   layerKey;
172   GUID                   subLayerKey;
173   FWP_VALUE0             weight;
174   UINT32                 numFilterConditions;
175   FWPM_FILTER_CONDITION0 *filterCondition;
176   FWPM_ACTION0           action;
177   __C89_NAMELESS union {
178     UINT64 rawContext;
179     GUID   providerContextKey;
180   };
181   GUID                   *reserved;
182   UINT64                 filterId;
183   FWP_VALUE0             effectiveWeight;
184 } FWPM_FILTER0;
185 
186 typedef struct FWPM_LAYER_ENUM_TEMPLATE0_ {
187   UINT64 reserved;
188 } FWPM_LAYER_ENUM_TEMPLATE0;
189 
190 typedef struct FWPM_LAYER0_ {
191   GUID               layerKey;
192   FWPM_DISPLAY_DATA0 displayData;
193   UINT32             flags;
194   UINT32             numFields;
195   FWPM_FIELD0        *field;
196   GUID               defaultSubLayerKey;
197   UINT16             layerId;
198 } FWPM_LAYER0;
199 
200 typedef struct FWPM_NET_EVENT_CLASSIFY_DROP0_ {
201   UINT64 filterId;
202   UINT16 layerId;
203 } FWPM_NET_EVENT_CLASSIFY_DROP0;
204 
205 typedef struct FWPM_NET_EVENT_ENUM_TEMPLATE0_ {
206   FILETIME               startTime;
207   FILETIME               endTime;
208   UINT32                 numFilterConditions;
209   FWPM_FILTER_CONDITION0 *filterCondition;
210 } FWPM_NET_EVENT_ENUM_TEMPLATE0;
211 
212 typedef struct FWPM_NET_EVENT_HEADER0_ {
213   FILETIME       timeStamp;
214   UINT32         flags;
215   FWP_IP_VERSION ipVersion;
216   UINT8          ipProtocol;
217   __C89_NAMELESS union {
218     UINT32           localAddrV4;
219     FWP_BYTE_ARRAY16 localAddrV6;
220   };
221   __C89_NAMELESS union {
222     UINT32           remoteAddrV4;
223     FWP_BYTE_ARRAY16 remoteAddrV6;
224   };
225   UINT16         localPort;
226   UINT16         remotePort;
227   UINT32         scopeId;
228   FWP_BYTE_BLOB  appId;
229   SID            *userId;
230 } FWPM_NET_EVENT_HEADER0;
231 
232 #define IKEEXT_CERT_HASH_LEN 20
233 
234 typedef struct FWPM_NET_EVENT_IKEEXT_UM_FAILURE0_ {
235   UINT32                            failureErrorCode;
236   IPSEC_FAILURE_POINT               failurePoint;
237   UINT32                            flags;
238   IKEEXT_EM_SA_STATE                emState;
239   IKEEXT_SA_ROLE                    saRole;
240   IKEEXT_AUTHENTICATION_METHOD_TYPE emAuthMethod;
241   UINT8                             endCertHash[IKEEXT_CERT_HASH_LEN];
242   UINT64                            mmId;
243   UINT64                            qmFilterId;
244 } FWPM_NET_EVENT_IKEEXT_UM_FAILURE0;
245 
246 typedef struct FWPM_NET_EVENT_IKEEXT_MM_FAILURE0_ {
247   UINT32                            failureErrorCode;
248   IPSEC_FAILURE_POINT               failurePoint;
249   UINT32                            flags;
250   IKEEXT_KEY_MODULE_TYPE            keyingModuleType;
251   IKEEXT_MM_SA_STATE                mmState;
252   IKEEXT_SA_ROLE                    saRole;
253   IKEEXT_AUTHENTICATION_METHOD_TYPE mmAuthMethod;
254   UINT8                             endCertHash[IKEEXT_CERT_HASH_LEN];
255   UINT64                            mmId;
256   UINT64                            mmFilterId;
257 } FWPM_NET_EVENT_IKEEXT_MM_FAILURE0;
258 
259 typedef struct FWPM_NET_EVENT_IKEEXT_QM_FAILURE0 {
260   UINT32                 failureErrorCode;
261   IPSEC_FAILURE_POINT    failurePoint;
262   IKEEXT_KEY_MODULE_TYPE keyingModuleType;
263   IKEEXT_QM_SA_STATE     qmState;
264   IKEEXT_SA_ROLE         saRole;
265   IPSEC_TRAFFIC_TYPE     saTrafficType;
266   __C89_NAMELESS union {
267     FWP_CONDITION_VALUE0 localSubNet;
268   };
269   __C89_NAMELESS union {
270     FWP_CONDITION_VALUE0 remoteSubNet;
271   };
272   UINT64                 qmFilterId;
273 } FWPM_NET_EVENT_IKEEXT_QM_FAILURE0;
274 
275 typedef UINT32 IPSEC_SA_SPI;
276 
277 typedef struct FWPM_NET_EVENT_IPSEC_KERNEL_DROP0_ {
278   INT32         failureStatus;
279   FWP_DIRECTION direction;
280   IPSEC_SA_SPI  spi;
281   UINT64        filterId;
282   UINT16        layerId;
283 } FWPM_NET_EVENT_IPSEC_KERNEL_DROP0;
284 
285 #if (_WIN32_WINNT >= 0x0601)
286 typedef struct FWPM_NET_EVENT_IPSEC_DOSP_DROP0_ {
287   FWP_IP_VERSION ipVersion;
288   __C89_NAMELESS union {
289     UINT32 publicHostV4Addr;
290     UINT8  publicHostV6Addr[16];
291   };
292   __C89_NAMELESS union {
293     UINT32 internalHostV4Addr;
294     UINT8  internalHostV6Addr[16];
295   };
296   INT32          failureStatus;
297   FWP_DIRECTION  direction;
298 } FWPM_NET_EVENT_IPSEC_DOSP_DROP0;
299 #endif /*(_WIN32_WINNT >= 0x0601)*/
300 
301 typedef struct FWPM_NET_EVENT_IKEEXT_EM_FAILURE0_ {
302   UINT32                            failureErrorCode;
303   IPSEC_FAILURE_POINT               failurePoint;
304   UINT32                            flags;
305   IKEEXT_EM_SA_STATE                emState;
306   IKEEXT_SA_ROLE                    saRole;
307   IKEEXT_AUTHENTICATION_METHOD_TYPE emAuthMethod;
308   UINT8                             endCertHash[IKEEXT_CERT_HASH_LEN];
309   UINT64                            mmId;
310   UINT64                            qmFilterId;
311 } FWPM_NET_EVENT_IKEEXT_EM_FAILURE0;
312 
313 typedef struct FWPM_NET_EVENT0_ {
314   FWPM_NET_EVENT_HEADER0 header;
315   FWPM_NET_EVENT_TYPE    type;
316   __C89_NAMELESS union {
317     FWPM_NET_EVENT_IKEEXT_MM_FAILURE0 *ikeMmFailure;
318     FWPM_NET_EVENT_IKEEXT_QM_FAILURE0 *ikeQmFailure;
319     FWPM_NET_EVENT_IKEEXT_EM_FAILURE0 *ikeEmFailure;
320     FWPM_NET_EVENT_CLASSIFY_DROP0     *classifyDrop;
321     FWPM_NET_EVENT_IPSEC_KERNEL_DROP0 *ipsecDrop;
322 #if (_WIN32_WINNT >= 0x0601)
323     FWPM_NET_EVENT_IPSEC_DOSP_DROP0   *idpDrop;
324 #endif /*(_WIN32_WINNT >= 0x0601)*/
325   };
326 } FWPM_NET_EVENT0;
327 
328 typedef struct FWPM_PROVIDER_CHANGE0_ {
329   FWPM_CHANGE_TYPE changeType;
330   GUID             providerKey;
331 } FWPM_PROVIDER_CHANGE0;
332 
333 typedef struct FWPM_PROVIDER_CONTEXT_CHANGE0_ {
334   FWPM_CHANGE_TYPE changeType;
335   GUID             providerContextKey;
336   UINT64           providerContextId;
337 } FWPM_PROVIDER_CONTEXT_CHANGE0;
338 
339 typedef struct FWPM_PROVIDER_CONTEXT_SUBSCRIPTION0_ {
340   FWPM_PROVIDER_CONTEXT_ENUM_TEMPLATE0 *enumTemplate;
341   UINT32                               flags;
342   GUID                                 sessionKey;
343 } FWPM_PROVIDER_CONTEXT_SUBSCRIPTION0;
344 
345 typedef struct FWPM_PROVIDER_CONTEXT0_ {
346   GUID                       providerContextKey;
347   FWPM_DISPLAY_DATA0         displayData;
348   UINT32                     flags;
349   GUID                       *providerKey;
350   FWP_BYTE_BLOB              providerData;
351   FWPM_PROVIDER_CONTEXT_TYPE type;
352   __C89_NAMELESS union {
353     IPSEC_KEYING_POLICY0    *keyingPolicy;
354     IPSEC_TRANSPORT_POLICY0 *ikeQmTransportPolicy;
355     IPSEC_TUNNEL_POLICY0    *ikeQmTunnelPolicy;
356     IPSEC_TRANSPORT_POLICY0 *authipQmTransportPolicy;
357     IPSEC_TUNNEL_POLICY0    *authipQmTunnelPolicy;
358     IKEEXT_POLICY0          *ikeMmPolicy;
359     IKEEXT_POLICY0          *authIpMmPolicy;
360     FWP_BYTE_BLOB           *dataBuffer;
361     FWPM_CLASSIFY_OPTIONS0  *classifyOptions;
362   };
363   UINT64                     providerContextId;
364 } FWPM_PROVIDER_CONTEXT0;
365 
366 typedef struct FWPM_PROVIDER_ENUM_TEMPLATE0_ {
367   UINT64 reserved;
368 } FWPM_PROVIDER_ENUM_TEMPLATE0;
369 
370 typedef struct FWPM_PROVIDER_SUBSCRIPTION0_ {
371   FWPM_PROVIDER_ENUM_TEMPLATE0 *enumTemplate;
372   UINT32                       flags;
373   GUID                         sessionKey;
374 } FWPM_PROVIDER_SUBSCRIPTION0;
375 
376 typedef struct FWPM_PROVIDER0_ {
377   GUID               providerKey;
378   FWPM_DISPLAY_DATA0 displayData;
379   UINT32             flags;
380   FWP_BYTE_BLOB      providerData;
381   wchar_t            *serviceName;
382 } FWPM_PROVIDER0;
383 
384 typedef struct FWPM_SESSION_ENUM_TEMPLATE0_ {
385   UINT64 reserved;
386 } FWPM_SESSION_ENUM_TEMPLATE0;
387 
388 typedef struct FWPM_SUBLAYER_CHANGE0_ {
389   FWPM_CHANGE_TYPE changeType;
390   GUID             subLayerKey;
391 } FWPM_SUBLAYER_CHANGE0;
392 
393 typedef struct FWPM_SUBLAYER_ENUM_TEMPLATE0_ {
394   GUID *providerKey;
395 } FWPM_SUBLAYER_ENUM_TEMPLATE0;
396 
397 typedef struct FWPM_SUBLAYER_SUBSCRIPTION0_ {
398   FWPM_SUBLAYER_ENUM_TEMPLATE0 *enumTemplate;
399   UINT32                       flags;
400   GUID                         sessionKey;
401 } FWPM_SUBLAYER_SUBSCRIPTION0;
402 
403 typedef struct FWPM_SUBLAYER0_ {
404   GUID               subLayerKey;
405   FWPM_DISPLAY_DATA0 displayData;
406   UINT16             flags;
407   GUID               *providerKey;
408   FWP_BYTE_BLOB      providerData;
409   UINT16             weight;
410 } FWPM_SUBLAYER0;
411 
412 #endif /*(_WIN32_WINNT >= 0x0600)*/
413 
414 #if (_WIN32_WINNT >= 0x0601)
415 
416 typedef enum FWPM_SYSTEM_PORT_TYPE_ {
417   FWPM_SYSTEM_PORT_RPC_EPMAP,
418   FWPM_SYSTEM_PORT_TEREDO,
419   FWPM_SYSTEM_PORT_IPHTTPS_IN,
420   FWPM_SYSTEM_PORT_IPHTTPS_OUT,
421   FWPM_SYSTEM_PORT_TYPE_MAX
422 } FWPM_SYSTEM_PORT_TYPE;
423 
424 typedef enum  {
425   DlUnicast,
426   DlMulticast,
427   DlBroadcast
428 } DL_ADDRESS_TYPE, *PDL_ADDRESS_TYPE;
429 
430 typedef struct FWPM_PROVIDER_CONTEXT1_ {
431   GUID                       providerContextKey;
432   FWPM_DISPLAY_DATA0         displayData;
433   UINT32                     flags;
434   GUID                       *providerKey;
435   FWP_BYTE_BLOB              providerData;
436   FWPM_PROVIDER_CONTEXT_TYPE type;
437   __C89_NAMELESS union {
438     IPSEC_KEYING_POLICY0    *keyingPolicy;
439     IPSEC_TRANSPORT_POLICY1 *ikeQmTransportPolicy;
440     IPSEC_TUNNEL_POLICY1    *ikeQmTunnelPolicy;
441     IPSEC_TRANSPORT_POLICY1 *authipQmTransportPolicy;
442     IPSEC_TUNNEL_POLICY1    *authipQmTunnelPolicy;
443     IKEEXT_POLICY1          *ikeMmPolicy;
444     IKEEXT_POLICY1          *authIpMmPolicy;
445     FWP_BYTE_BLOB           *dataBuffer;
446     FWPM_CLASSIFY_OPTIONS0  *classifyOptions;
447     IPSEC_TUNNEL_POLICY1    *ikeV2QmTunnelPolicy;
448     IKEEXT_POLICY1          *ikeV2MmPolicy;
449     IPSEC_DOSP_OPTIONS0     *idpOptions;
450   };
451   UINT64                     providerContextId;
452 } FWPM_PROVIDER_CONTEXT1;
453 
454 typedef struct FWPM_NET_EVENT_HEADER1_ {
455   FILETIME       timeStamp;
456   UINT32         flags;
457   FWP_IP_VERSION ipVersion;
458   UINT8          ipProtocol;
459   __C89_NAMELESS union {
460     UINT32           localAddrV4;
461     FWP_BYTE_ARRAY16 localAddrV6;
462   };
463   __C89_NAMELESS union {
464     UINT32           remoteAddrV4;
465     FWP_BYTE_ARRAY16 remoteAddrV6;
466   };
467   UINT16         localPort;
468   UINT16         remotePort;
469   UINT32         scopeId;
470   FWP_BYTE_BLOB  appId;
471   SID            *userId;
472   __C89_NAMELESS union {
473     __C89_NAMELESS struct {
474       FWP_AF addressFamily;
475       __C89_NAMELESS union {
476         __C89_NAMELESS struct {
477           FWP_BYTE_ARRAY6        dstAddrEth;
478           FWP_BYTE_ARRAY6        srcAddrEth;
479           DL_ADDRESS_TYPE        addrType;
480           FWP_ETHER_ENCAP_METHOD encapMethod;
481           UINT16                 etherType;
482           UINT32                 snapControl;
483           UINT32                 snapOui;
484           UINT16                 vlanTag;
485           UINT64                 ifLuid;
486         };
487       };
488     };
489   };
490 } FWPM_NET_EVENT_HEADER1;
491 
492 #define IKEEXT_CERT_HASH_LEN 20
493 
494 typedef struct FWPM_NET_EVENT_IKEEXT_MM_FAILURE1_ {
495   UINT32                            failureErrorCode;
496   IPSEC_FAILURE_POINT               failurePoint;
497   UINT32                            flags;
498   IKEEXT_KEY_MODULE_TYPE            keyingModuleType;
499   IKEEXT_MM_SA_STATE                mmState;
500   IKEEXT_SA_ROLE                    saRole;
501   IKEEXT_AUTHENTICATION_METHOD_TYPE mmAuthMethod;
502   UINT8                             endCertHash[IKEEXT_CERT_HASH_LEN];
503   UINT64                            mmId;
504   UINT64                            mmFilterId;
505   wchar_t                           *localPrincipalNameForAuth;
506   wchar_t                           *remotePrincipalNameForAuth;
507   UINT32                            numLocalPrincipalGroupSids;
508   LPWSTR                            *localPrincipalGroupSids;
509   UINT32                            numRemotePrincipalGroupSids;
510   LPWSTR                            *remotePrincipalGroupSids;
511 } FWPM_NET_EVENT_IKEEXT_MM_FAILURE1;
512 
513 typedef struct FWPM_NET_EVENT_IKEEXT_EM_FAILURE1_ {
514   UINT32                            failureErrorCode;
515   IPSEC_FAILURE_POINT               failurePoint;
516   UINT32                            flags;
517   IKEEXT_EM_SA_STATE                emState;
518   IKEEXT_SA_ROLE                    saRole;
519   IKEEXT_AUTHENTICATION_METHOD_TYPE emAuthMethod;
520   UINT8                             endCertHash[IKEEXT_CERT_HASH_LEN];
521   UINT64                            mmId;
522   UINT64                            qmFilterId;
523   wchar_t                           *localPrincipalNameForAuth;
524   wchar_t                           *remotePrincipalNameForAuth;
525   UINT32                            numLocalPrincipalGroupSids;
526   LPWSTR                            *localPrincipalGroupSids;
527   UINT32                            numRemotePrincipalGroupSids;
528   LPWSTR                            *remotePrincipalGroupSids;
529   IPSEC_TRAFFIC_TYPE                saTrafficType;
530 } FWPM_NET_EVENT_IKEEXT_EM_FAILURE1;
531 
532 typedef struct FWPM_NET_EVENT_CLASSIFY_DROP1_ {
533   UINT64 filterId;
534   UINT16 layerId;
535   UINT32 reauthReason;
536   UINT32 originalProfile;
537   UINT32 currentProfile;
538   UINT32 msFwpDirection;
539   BOOL   isLoopback;
540 } FWPM_NET_EVENT_CLASSIFY_DROP1;
541 
542 typedef struct FWPM_NET_EVENT1_ {
543   FWPM_NET_EVENT_HEADER1 header;
544   FWPM_NET_EVENT_TYPE    type;
545   __C89_NAMELESS union {
546     FWPM_NET_EVENT_IKEEXT_MM_FAILURE1 *ikeMmFailure;
547     FWPM_NET_EVENT_IKEEXT_QM_FAILURE0 *ikeQmFailure;
548     FWPM_NET_EVENT_IKEEXT_EM_FAILURE1 *ikeEmFailure;
549     FWPM_NET_EVENT_CLASSIFY_DROP1     *classifyDrop;
550     FWPM_NET_EVENT_IPSEC_KERNEL_DROP0 *ipsecDrop;
551     FWPM_NET_EVENT_IPSEC_DOSP_DROP0   *idpDrop;
552   };
553 } FWPM_NET_EVENT1;
554 
555 typedef struct FWPM_NET_EVENT_SUBSCRIPTION0_ {
556   FWPM_NET_EVENT_ENUM_TEMPLATE0 *enumTemplate;
557   UINT32                        flags;
558   GUID                          sessionKey;
559 } FWPM_NET_EVENT_SUBSCRIPTION0;
560 
561 typedef struct FWPM_SYSTEM_PORTS_BY_TYPE0_ {
562   FWPM_SYSTEM_PORT_TYPE type;
563   UINT32                numPorts;
564   UINT16                *ports;
565 } FWPM_SYSTEM_PORTS_BY_TYPE0;
566 
567 typedef struct FWPM_SYSTEM_PORTS0_ {
568   UINT32                     numTypes;
569   FWPM_SYSTEM_PORTS_BY_TYPE0 *types;
570 } FWPM_SYSTEM_PORTS0;
571 
572 #endif /*(_WIN32_WINNT >= 0x0601)*/
573 #ifdef __cplusplus
574 }
575 #endif
576 
577 #endif /*_INC_FWPMTYPES*/
578