From 09b7cd45a2a39e32d102e945c1d62923c8a9cdf3 Mon Sep 17 00:00:00 2001 From: basil00 Date: Fri, 26 Jul 2013 18:01:49 +0800 Subject: [PATCH] - Add support for the legacy WinDivert API. --- dll/windivert.c | 57 ++++++++++++++++++++++++++++++ dll/windivert.def | 10 ++++++ include/windivert.h | 86 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 153 insertions(+) diff --git a/dll/windivert.c b/dll/windivert.c index e8c1d51..adb62b7 100644 --- a/dll/windivert.c +++ b/dll/windivert.c @@ -2140,6 +2140,63 @@ extern BOOL WinDivertHelperParseIPv6Address(const char *str, UINT32 *addr_ptr) return TRUE; } +/***************************************************************************/ +/* LEGACY */ +/***************************************************************************/ + +/* + * Legacy functions. + */ +extern HANDLE DivertOpen(const char *filter, DIVERT_LAYER layer, + INT16 priority, UINT64 flags) +{ + return WinDivertOpen(filter, layer, priority, flags); +} +extern BOOL DivertRecv(HANDLE handle, PVOID pPacket, UINT packetLen, + PDIVERT_ADDRESS addr, UINT *readlen) +{ + return WinDivertRecv(handle, pPacket, packetLen, addr, readlen); +} +extern BOOL DivertSend(HANDLE handle, PVOID pPacket, UINT packetLen, + PDIVERT_ADDRESS addr, UINT *writelen) +{ + return WinDivertSend(handle, pPacket, packetLen, addr, writelen); +} +extern BOOL DivertClose(HANDLE handle) +{ + return WinDivertClose(handle); +} +extern BOOL DivertSetParam(HANDLE handle, DIVERT_PARAM param, UINT64 value) +{ + return WinDivertSetParam(handle, param, value); +} +extern BOOL DivertGetParam(HANDLE handle, DIVERT_PARAM param, UINT64 *pValue) +{ + return WinDivertGetParam(handle, param, pValue); +} +extern BOOL DivertHelperParsePacket(PVOID pPacket, UINT packetLen, + PDIVERT_IPHDR *ppIpHdr, PDIVERT_IPV6HDR *ppIpv6Hdr, + PDIVERT_ICMPHDR *ppIcmpHdr, PDIVERT_ICMPV6HDR *ppIcmpv6Hdr, + PDIVERT_TCPHDR *ppTcpHdr, PDIVERT_UDPHDR *ppUdpHdr, PVOID *ppData, + UINT *pDataLen) +{ + return WinDivertHelperParsePacket(pPacket, packetLen, ppIpHdr, ppIpv6Hdr, + ppIcmpHdr, ppIcmpv6Hdr, ppTcpHdr, ppUdpHdr, ppData, pDataLen); +} +extern UINT DivertHelperCalcChecksums(PVOID pPacket, UINT packetLen, + UINT64 flags) +{ + return WinDivertHelperCalcChecksums(pPacket, packetLen, flags); +} +extern BOOL DivertHelperParseIPv4Address(const char *str, UINT32 *addr_ptr) +{ + return WinDivertHelperParseIPv4Address(str, addr_ptr); +} +extern BOOL DivertHelperParseIPv6Address(const char *str, UINT32 *addr_ptr) +{ + return WinDivertHelperParseIPv6Address(str, addr_ptr); +} + /***************************************************************************/ /* DEBUGGING */ /***************************************************************************/ diff --git a/dll/windivert.def b/dll/windivert.def index d6db928..cedfe97 100644 --- a/dll/windivert.def +++ b/dll/windivert.def @@ -13,3 +13,13 @@ EXPORTS WinDivertHelperParsePacket WinDivertHelperParseIPv4Address WinDivertHelperParseIPv6Address + DivertOpen + DivertRecv + DivertSend + DivertClose + DivertSetParam + DivertGetParam + DivertHelperCalcChecksums + DivertHelperParsePacket + DivertHelperParseIPv4Address + DivertHelperParseIPv6Address diff --git a/include/windivert.h b/include/windivert.h index fc8a3d6..ff9c93c 100644 --- a/include/windivert.h +++ b/include/windivert.h @@ -32,6 +32,7 @@ #define __out #define __out_opt #define __inout +#define __inout_opt #include #define INT8 int8_t #define UINT8 uint8_t @@ -352,6 +353,91 @@ extern WINDIVERTEXPORT UINT WinDivertHelperCalcChecksums( __in UINT packetLen, __in UINT64 flags); + +/****************************************************************************/ +/* WINDIVERT LEGACY API */ +/****************************************************************************/ + +/* + * Deprecated API: + */ +typedef WINDIVERT_ADDRESS DIVERT_ADDRESS; +typedef PWINDIVERT_ADDRESS PDIVERT_ADDRESS; +#define DIVERT_DIRECTION_OUTBOUND WINDIVERT_DIRECTION_OUTBOUND +#define DIVERT_DIRECTION_INBOUND WINDIVERT_DIRECTION_INBOUND +typedef WINDIVERT_LAYER DIVERT_LAYER; +typedef PWINDIVERT_LAYER PDIVERT_LAYER; +#define DIVERT_FLAG_SNIFF WINDIVERT_FLAG_SNIFF +#define DIVERT_FLAG_DROP WINDIVERT_FLAG_DROP +typedef WINDIVERT_PARAM DIVERT_PARAM; +typedef PWINDIVERT_PARAM PDIVERT_PARAM; +typedef WINDIVERT_IPHDR DIVERT_IPHDR; +typedef PWINDIVERT_IPHDR PDIVERT_IPHDR; +typedef WINDIVERT_IPV6HDR DIVERT_IPV6HDR; +typedef PWINDIVERT_IPV6HDR PDIVERT_IPV6HDR; +typedef WINDIVERT_ICMPHDR DIVERT_ICMPHDR; +typedef PWINDIVERT_ICMPHDR PDIVERT_ICMPHDR; +typedef WINDIVERT_ICMPV6HDR DIVERT_ICMPV6HDR; +typedef PWINDIVERT_ICMPV6HDR PDIVERT_ICMPV6HDR; +typedef WINDIVERT_TCPHDR DIVERT_TCPHDR; +typedef PWINDIVERT_TCPHDR PDIVERT_TCPHDR; +typedef WINDIVERT_UDPHDR DIVERT_UDPHDR; +typedef PWINDIVERT_UDPHDR PDIVERT_UDPHDR; +#define DIVERT_HELPER_NO_IP_CHECKSUM WINDIVERT_HELPER_NO_IP_CHECKSUM +#define DIVERT_HELPER_NO_ICMP_CHECKSUM WINDIVERT_HELPER_NO_ICMP_CHECKSUM +#define DIVERT_HELPER_NO_ICMPV6_CHECKSUM WINDIVERT_HELPER_NO_ICMPV6_CHECKSUM +#define DIVERT_HELPER_NO_TCP_CHECKSUM WINDIVERT_HELPER_NO_TCP_CHECKSUM +#define DIVERT_HELPER_NO_UDP_CHECKSUM WINDIVERT_HELPER_NO_UDP_CHECKSUM + +extern WINDIVERTEXPORT HANDLE DivertOpen( + __in const char *filter, + __in DIVERT_LAYER layer, + __in INT16 priority, + __in UINT64 flags); +extern WINDIVERTEXPORT BOOL DivertRecv( + __in HANDLE handle, + __out PVOID pPacket, + __in UINT packetLen, + __out_opt PDIVERT_ADDRESS pAddr, + __out_opt UINT *readLen); +extern WINDIVERTEXPORT BOOL DivertSend( + __in HANDLE handle, + __in PVOID pPacket, + __in UINT packetLen, + __in PDIVERT_ADDRESS pAddr, + __out_opt UINT *writeLen); +extern WINDIVERTEXPORT BOOL DivertClose( + __in HANDLE handle); +extern WINDIVERTEXPORT BOOL DivertSetParam( + __in HANDLE handle, + __in DIVERT_PARAM param, + __in UINT64 value); +extern WINDIVERTEXPORT BOOL DivertGetParam( + __in HANDLE handle, + __in DIVERT_PARAM param, + __out UINT64 *pValue); +extern WINDIVERTEXPORT BOOL DivertHelperParsePacket( + __in PVOID pPacket, + __in UINT packetLen, + __out_opt PDIVERT_IPHDR *ppIpHdr, + __out_opt PDIVERT_IPV6HDR *ppIpv6Hdr, + __out_opt PDIVERT_ICMPHDR *ppIcmpHdr, + __out_opt PDIVERT_ICMPV6HDR *ppIcmpv6Hdr, + __out_opt PDIVERT_TCPHDR *ppTcpHdr, + __out_opt PDIVERT_UDPHDR *ppUdpHdr, + __out_opt PVOID *ppData, + __out_opt UINT *pDataLen); +extern WINDIVERTEXPORT BOOL DivertHelperParseIPv4Address( + __in const char *addrStr, + __out_opt UINT32 *pAddr); +extern WINDIVERTEXPORT BOOL DivertHelperParseIPv6Address( + __in const char *addrStr, + __out_opt UINT32 *pAddr); +extern WINDIVERTEXPORT UINT DivertHelperCalcChecksums( + __inout PVOID pPacket, + __in UINT packetLen, + __in UINT64 flags); + #endif /* WINDIVERT_KERNEL */ #ifdef __cplusplus