[1166] | 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
|
---|