fltdefs.h 5.0 KB

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