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 | #ifndef _FLTDEFS_H
|
---|
6 | #define _FLTDEFS_H
|
---|
7 |
|
---|
8 | #include <winapifamily.h>
|
---|
9 |
|
---|
10 | #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
---|
11 |
|
---|
12 | typedef PVOID FILTER_HANDLE,*PFILTER_HANDLE;
|
---|
13 | typedef PVOID INTERFACE_HANDLE,*PINTERFACE_HANDLE;
|
---|
14 |
|
---|
15 | #define PFEXPORT __declspec(dllexport)
|
---|
16 |
|
---|
17 | #ifdef __cplusplus
|
---|
18 | #define EXTERNCDECL EXTERN_C
|
---|
19 | #else
|
---|
20 | #define EXTERNCDECL
|
---|
21 | #endif
|
---|
22 |
|
---|
23 | #define PFAPIENTRY EXTERNCDECL DWORD PFEXPORT WINAPI
|
---|
24 |
|
---|
25 | typedef enum _GlobalFilter {
|
---|
26 | GF_FRAGMENTS = 2,GF_STRONGHOST = 8,GF_FRAGCACHE = 9
|
---|
27 | } GLOBAL_FILTER,*PGLOBAL_FILTER;
|
---|
28 |
|
---|
29 | typedef enum _PfForwardAction {
|
---|
30 | PF_ACTION_FORWARD = 0,PF_ACTION_DROP
|
---|
31 | } PFFORWARD_ACTION,*PPFFORWARD_ACTION;
|
---|
32 |
|
---|
33 | typedef enum _PfAddresType {
|
---|
34 | PF_IPV4,PF_IPV6
|
---|
35 | } PFADDRESSTYPE,*PPFADDRESSTYPE;
|
---|
36 |
|
---|
37 | #define FILTER_PROTO(ProtoId) MAKELONG(MAKEWORD((ProtoId),0x00),0x00000)
|
---|
38 |
|
---|
39 | #define FILTER_PROTO_ANY FILTER_PROTO(0x00)
|
---|
40 | #define FILTER_PROTO_ICMP FILTER_PROTO(0x01)
|
---|
41 | #define FILTER_PROTO_TCP FILTER_PROTO(0x06)
|
---|
42 | #define FILTER_PROTO_UDP FILTER_PROTO(0x11)
|
---|
43 |
|
---|
44 | #define FILTER_TCPUDP_PORT_ANY (WORD)0x0000
|
---|
45 |
|
---|
46 | #define FILTER_ICMP_TYPE_ANY (BYTE)0xff
|
---|
47 | #define FILTER_ICMP_CODE_ANY (BYTE)0xff
|
---|
48 |
|
---|
49 | typedef struct _PF_FILTER_DESCRIPTOR {
|
---|
50 | DWORD dwFilterFlags;
|
---|
51 | DWORD dwRule;
|
---|
52 | PFADDRESSTYPE pfatType;
|
---|
53 | PBYTE SrcAddr;
|
---|
54 | PBYTE SrcMask;
|
---|
55 | PBYTE DstAddr;
|
---|
56 | PBYTE DstMask;
|
---|
57 | DWORD dwProtocol;
|
---|
58 | DWORD fLateBound;
|
---|
59 | WORD wSrcPort;
|
---|
60 | WORD wDstPort;
|
---|
61 | WORD wSrcPortHighRange;
|
---|
62 | WORD wDstPortHighRange;
|
---|
63 | } PF_FILTER_DESCRIPTOR,*PPF_FILTER_DESCRIPTOR;
|
---|
64 |
|
---|
65 | typedef struct _PF_FILTER_STATS {
|
---|
66 | DWORD dwNumPacketsFiltered;
|
---|
67 | PF_FILTER_DESCRIPTOR info;
|
---|
68 | } PF_FILTER_STATS,*PPF_FILTER_STATS;
|
---|
69 |
|
---|
70 | typedef struct _PF_INTERFACE_STATS {
|
---|
71 | PVOID pvDriverContext;
|
---|
72 | DWORD dwFlags;
|
---|
73 | DWORD dwInDrops;
|
---|
74 | DWORD dwOutDrops;
|
---|
75 | PFFORWARD_ACTION eaInAction;
|
---|
76 | PFFORWARD_ACTION eaOutAction;
|
---|
77 | DWORD dwNumInFilters;
|
---|
78 | DWORD dwNumOutFilters;
|
---|
79 | DWORD dwFrag;
|
---|
80 | DWORD dwSpoof;
|
---|
81 | DWORD dwReserved1;
|
---|
82 | DWORD dwReserved2;
|
---|
83 | LARGE_INTEGER liSYN;
|
---|
84 | LARGE_INTEGER liTotalLogged;
|
---|
85 | DWORD dwLostLogEntries;
|
---|
86 | PF_FILTER_STATS FilterInfo[1];
|
---|
87 | } PF_INTERFACE_STATS,*PPF_INTERFACE_STATS;
|
---|
88 |
|
---|
89 | #define FILTERSIZE (sizeof(PF_FILTER_DESCRIPTOR) - (DWORD)(&((PPF_FILTER_DESCRIPTOR)0)->SrcAddr))
|
---|
90 |
|
---|
91 | #define FD_FLAGS_NOSYN 0x1
|
---|
92 |
|
---|
93 | #define FD_FLAGS_ALLFLAGS FD_FLAGS_NOSYN
|
---|
94 |
|
---|
95 | #define LB_SRC_ADDR_USE_SRCADDR_FLAG 0x00000001
|
---|
96 | #define LB_SRC_ADDR_USE_DSTADDR_FLAG 0x00000002
|
---|
97 | #define LB_DST_ADDR_USE_SRCADDR_FLAG 0x00000004
|
---|
98 | #define LB_DST_ADDR_USE_DSTADDR_FLAG 0x00000008
|
---|
99 | #define LB_SRC_MASK_LATE_FLAG 0x00000010
|
---|
100 | #define LB_DST_MASK_LATE_FLAG 0x00000020
|
---|
101 |
|
---|
102 | typedef struct _PF_LATEBIND_INFO {
|
---|
103 | PBYTE SrcAddr;
|
---|
104 | PBYTE DstAddr;
|
---|
105 | PBYTE Mask;
|
---|
106 | } PF_LATEBIND_INFO,*PPF_LATEBIND_INFO;
|
---|
107 |
|
---|
108 | typedef enum _PfFrameType {
|
---|
109 | PFFT_FILTER = 1,PFFT_FRAG = 2,PFFT_SPOOF = 3
|
---|
110 | } PFFRAMETYPE,*PPFFRAMETYPE;
|
---|
111 |
|
---|
112 | typedef struct _pfLogFrame {
|
---|
113 | LARGE_INTEGER Timestamp;
|
---|
114 | PFFRAMETYPE pfeTypeOfFrame;
|
---|
115 | DWORD dwTotalSizeUsed;
|
---|
116 | DWORD dwFilterRule;
|
---|
117 | WORD wSizeOfAdditionalData;
|
---|
118 | WORD wSizeOfIpHeader;
|
---|
119 | DWORD dwInterfaceName;
|
---|
120 | DWORD dwIPIndex;
|
---|
121 | BYTE bPacketData[1];
|
---|
122 | } PFLOGFRAME,*PPFLOGFRAME;
|
---|
123 |
|
---|
124 | #define ERROR_BASE 23000
|
---|
125 |
|
---|
126 | #define PFERROR_NO_PF_INTERFACE (ERROR_BASE + 0)
|
---|
127 | #define PFERROR_NO_FILTERS_GIVEN (ERROR_BASE + 1)
|
---|
128 | #define PFERROR_BUFFER_TOO_SMALL (ERROR_BASE + 2)
|
---|
129 | #define ERROR_IPV6_NOT_IMPLEMENTED (ERROR_BASE + 3)
|
---|
130 |
|
---|
131 | PFAPIENTRY PfCreateInterface(DWORD dwName,PFFORWARD_ACTION inAction,PFFORWARD_ACTION outAction,WINBOOL bUseLog,WINBOOL bMustBeUnique,INTERFACE_HANDLE *ppInterface);
|
---|
132 | PFAPIENTRY PfDeleteInterface(INTERFACE_HANDLE pInterface);
|
---|
133 | PFAPIENTRY PfAddFiltersToInterface(INTERFACE_HANDLE ih,DWORD cInFilters,PPF_FILTER_DESCRIPTOR pfiltIn,DWORD cOutFilters,PPF_FILTER_DESCRIPTOR pfiltOut,PFILTER_HANDLE pfHandle);
|
---|
134 | PFAPIENTRY PfRemoveFiltersFromInterface(INTERFACE_HANDLE ih,DWORD cInFilters,PPF_FILTER_DESCRIPTOR pfiltIn,DWORD cOutFilters,PPF_FILTER_DESCRIPTOR pfiltOut);
|
---|
135 | PFAPIENTRY PfRemoveFilterHandles(INTERFACE_HANDLE pInterface,DWORD cFilters,PFILTER_HANDLE pvHandles);
|
---|
136 | PFAPIENTRY PfUnBindInterface(INTERFACE_HANDLE pInterface);
|
---|
137 | PFAPIENTRY PfBindInterfaceToIndex(INTERFACE_HANDLE pInterface,DWORD dwIndex,PFADDRESSTYPE pfatLinkType,PBYTE LinkIPAddress);
|
---|
138 | PFAPIENTRY PfBindInterfaceToIPAddress(INTERFACE_HANDLE pInterface,PFADDRESSTYPE pfatType,PBYTE IPAddress);
|
---|
139 | PFAPIENTRY PfRebindFilters(INTERFACE_HANDLE pInterface,PPF_LATEBIND_INFO pLateBindInfo);
|
---|
140 | PFAPIENTRY PfAddGlobalFilterToInterface(INTERFACE_HANDLE pInterface,GLOBAL_FILTER gfFilter);
|
---|
141 | PFAPIENTRY PfRemoveGlobalFilterFromInterface(INTERFACE_HANDLE pInterface,GLOBAL_FILTER gfFilter);
|
---|
142 | PFAPIENTRY PfMakeLog(HANDLE hEvent);
|
---|
143 | PFAPIENTRY PfSetLogBuffer(PBYTE pbBuffer,DWORD dwSize,DWORD dwThreshold,DWORD dwEntries,PDWORD pdwLoggedEntries,PDWORD pdwLostEntries,PDWORD pdwSizeUsed);
|
---|
144 | PFAPIENTRY PfDeleteLog(VOID);
|
---|
145 | PFAPIENTRY PfGetInterfaceStatistics(INTERFACE_HANDLE pInterface,PPF_INTERFACE_STATS ppfStats,PDWORD pdwBufferSize,WINBOOL fResetCounters);
|
---|
146 | PFAPIENTRY PfTestPacket(INTERFACE_HANDLE pInInterface,INTERFACE_HANDLE pOutInterface,DWORD cBytes,PBYTE pbPacket,PPFFORWARD_ACTION ppAction);
|
---|
147 |
|
---|
148 | #endif /* WINAPI_PARTION_DESKTOP. */
|
---|
149 |
|
---|
150 | #endif
|
---|