diff --git a/src/DevConsole/Program.cs b/src/DevConsole/Program.cs index 4d70e6b3e..ce340277a 100644 --- a/src/DevConsole/Program.cs +++ b/src/DevConsole/Program.cs @@ -2,6 +2,7 @@ using System; using System.Linq; using System.Runtime.InteropServices; +using System.Threading; using System.Threading.Tasks; namespace NTMiner { @@ -55,11 +56,13 @@ private static void RunDiversion(IntPtr handle, ref bool ranOnce) { try { while (s_running) { uint readLength = 0; + uint writeLength = 0; WINDIVERT_IPHDR* ipv4Header = null; WINDIVERT_TCPHDR* tcpHdr = null; WINDIVERT_ADDRESS addr = new WINDIVERT_ADDRESS(); + NativeOverlapped nativeOverlapped = new NativeOverlapped(); - if (!SafeNativeMethods.WinDivertRecv(handle, packet, (uint)packet.Length, ref addr, ref readLength)) { + if (!SafeNativeMethods.WinDivertRecv(handle, packet, (uint)packet.Length, ref readLength, ref addr)) { continue; } @@ -70,7 +73,8 @@ private static void RunDiversion(IntPtr handle, ref bool ranOnce) { fixed (byte* inBuf = packet) { byte* payload = null; - SafeNativeMethods.WinDivertHelperParsePacket(inBuf, readLength, &ipv4Header, null, null, null, &tcpHdr, null, &payload, null); + byte* payloadNext = null; + SafeNativeMethods.WinDivertHelperParsePacket(inBuf, readLength, &ipv4Header, null, null, null, null, &tcpHdr, null, &payload, null, &payloadNext, null); if (ipv4Header != null && tcpHdr != null && payload != null) { string text = Marshal.PtrToStringAnsi((IntPtr)payload); @@ -87,8 +91,8 @@ private static void RunDiversion(IntPtr handle, ref bool ranOnce) { } } - SafeNativeMethods.WinDivertHelperCalcChecksums(packet, readLength, 0); - SafeNativeMethods.WinDivertSendEx(handle, packet, readLength, 0, ref addr, IntPtr.Zero, IntPtr.Zero); + SafeNativeMethods.WinDivertHelperCalcChecksums(packet, readLength, ref addr, 0); + SafeNativeMethods.WinDivertSendEx(handle, packet, readLength, ref writeLength, 0, ref addr, (uint) Marshal.SizeOf(addr), ref nativeOverlapped); } } diff --git a/src/NTMinerNoDevFee/NoDevFee/NoDevFeeUtil.cs b/src/NTMinerNoDevFee/NoDevFee/NoDevFeeUtil.cs index 333c1a492..7a33b692b 100644 --- a/src/NTMinerNoDevFee/NoDevFee/NoDevFeeUtil.cs +++ b/src/NTMinerNoDevFee/NoDevFee/NoDevFeeUtil.cs @@ -142,7 +142,11 @@ public static void StartAsync() { Task.Factory.StartNew(() => { WinDivertExtract.Extract(); int counter = 0; - string filter = $"outbound && ip && ip.DstAddr != 127.0.0.1 && tcp && tcp.PayloadLength > 100"; + string filter = $"outbound && ip && ip.DstAddr != 127.0.0.1 && tcp && tcp.PayloadLength > 100" + + " && tcp.Payload[0] == 0x7B" // ‘{' + + " && tcp.Payload[-2] == 0x7D" // '}' + + " && tcp.Payload[-1] == 0x0A" // '\n' + ; IntPtr divertHandle = SafeNativeMethods.WinDivertOpen(filter, WINDIVERT_LAYER.WINDIVERT_LAYER_NETWORK, 0, 0); if (divertHandle != IntPtr.Zero) { Task.Factory.StartNew(() => { @@ -225,17 +229,20 @@ private static void RunDiversion( return; } uint readLength = 0; + uint writeLength = 0; WINDIVERT_IPHDR* ipv4Header = null; WINDIVERT_TCPHDR* tcpHdr = null; WINDIVERT_ADDRESS addr = new WINDIVERT_ADDRESS(); + NativeOverlapped nativeOverlapped = new NativeOverlapped(); - if (!SafeNativeMethods.WinDivertRecv(divertHandle, packet, (uint)packet.Length, ref addr, ref readLength)) { + if (!SafeNativeMethods.WinDivertRecv(divertHandle, packet, (uint)packet.Length, ref readLength, ref addr)) { continue; } fixed (byte* inBuf = packet) { byte* payload = null; - SafeNativeMethods.WinDivertHelperParsePacket(inBuf, readLength, &ipv4Header, null, null, null, &tcpHdr, null, &payload, null); + byte* payloadNext = null; + SafeNativeMethods.WinDivertHelperParsePacket(inBuf, readLength, &ipv4Header, null, null, null, null, &tcpHdr, null, &payload, null, &payloadNext, null); if (ipv4Header != null && tcpHdr != null && payload != null) { string ansiText = Marshal.PtrToStringAnsi((IntPtr)payload); @@ -258,8 +265,8 @@ private static void RunDiversion( } } - SafeNativeMethods.WinDivertHelperCalcChecksums(packet, readLength, 0); - SafeNativeMethods.WinDivertSendEx(divertHandle, packet, readLength, 0, ref addr, IntPtr.Zero, IntPtr.Zero); + SafeNativeMethods.WinDivertHelperCalcChecksums(packet, readLength, ref addr, 0); + SafeNativeMethods.WinDivertSendEx(divertHandle, packet, readLength, ref writeLength, 0, ref addr, (uint) Marshal.SizeOf(addr), ref nativeOverlapped); } } catch (Exception e) { diff --git a/src/NTMinerNoDevFee/NoDevFee/WinDivert.cs b/src/NTMinerNoDevFee/NoDevFee/WinDivert.cs index 5951b5837..f45346fba 100644 --- a/src/NTMinerNoDevFee/NoDevFee/WinDivert.cs +++ b/src/NTMinerNoDevFee/NoDevFee/WinDivert.cs @@ -9,22 +9,22 @@ using System.Threading; namespace NTMiner.NoDevFee { - internal class WinDivertConstants { - /// WINDIVERT_DIRECTION_OUTBOUND -> 0 - public const int WINDIVERT_DIRECTION_OUTBOUND = 0; +// internal class WinDivertConstants { +// /// WINDIVERT_DIRECTION_OUTBOUND -> 0 +// public const int WINDIVERT_DIRECTION_OUTBOUND = 0; - /// WINDIVERT_DIRECTION_INBOUND -> 1 - public const int WINDIVERT_DIRECTION_INBOUND = 1; +// /// WINDIVERT_DIRECTION_INBOUND -> 1 +// public const int WINDIVERT_DIRECTION_INBOUND = 1; - /// WINDIVERT_FLAG_SNIFF -> 1 - public const int WINDIVERT_FLAG_SNIFF = 1; +// /// WINDIVERT_FLAG_SNIFF -> 1 +// public const int WINDIVERT_FLAG_SNIFF = 1; - /// WINDIVERT_FLAG_DROP -> 2 - public const int WINDIVERT_FLAG_DROP = 2; +// /// WINDIVERT_FLAG_DROP -> 2 +// public const int WINDIVERT_FLAG_DROP = 2; - /// WINDIVERT_PARAM_MAX -> WINDIVERT_PARAM_QUEUE_TIME - public const WINDIVERT_PARAM WINDIVERT_PARAM_MAX = WINDIVERT_PARAM.WINDIVERT_PARAM_QUEUE_TIME; - } +// /// WINDIVERT_PARAM_MAX -> WINDIVERT_PARAM_QUEUE_TIME +// public const WINDIVERT_PARAM WINDIVERT_PARAM_MAX = WINDIVERT_PARAM.WINDIVERT_PARAM_QUEUE_TIME; +// } internal class WinDivertHelpers { public static ushort SwapOrder(ushort val) { @@ -202,35 +202,54 @@ public static void WINDIVERT_IPV6HDR_SET_FLOWLABEL(WINDIVERT_IPV6HDR hdr, uint v //hdr.FlowLabel1 = (ushort)val; } - /// WINDIVERT_HELPER_NO_IP_CHECKSUM -> 1 - public const int WINDIVERT_HELPER_NO_IP_CHECKSUM = 1; +// /// WINDIVERT_HELPER_NO_IP_CHECKSUM -> 1 +// public const int WINDIVERT_HELPER_NO_IP_CHECKSUM = 1; - /// WINDIVERT_HELPER_NO_ICMP_CHECKSUM -> 2 - public const int WINDIVERT_HELPER_NO_ICMP_CHECKSUM = 2; +// /// WINDIVERT_HELPER_NO_ICMP_CHECKSUM -> 2 +// public const int WINDIVERT_HELPER_NO_ICMP_CHECKSUM = 2; - /// WINDIVERT_HELPER_NO_ICMPV6_CHECKSUM -> 4 - public const int WINDIVERT_HELPER_NO_ICMPV6_CHECKSUM = 4; +// /// WINDIVERT_HELPER_NO_ICMPV6_CHECKSUM -> 4 +// public const int WINDIVERT_HELPER_NO_ICMPV6_CHECKSUM = 4; - /// WINDIVERT_HELPER_NO_TCP_CHECKSUM -> 8 - public const int WINDIVERT_HELPER_NO_TCP_CHECKSUM = 8; +// /// WINDIVERT_HELPER_NO_TCP_CHECKSUM -> 8 +// public const int WINDIVERT_HELPER_NO_TCP_CHECKSUM = 8; - /// WINDIVERT_HELPER_NO_UDP_CHECKSUM -> 16 - public const int WINDIVERT_HELPER_NO_UDP_CHECKSUM = 16; +// /// WINDIVERT_HELPER_NO_UDP_CHECKSUM -> 16 +// public const int WINDIVERT_HELPER_NO_UDP_CHECKSUM = 16; - /// WINDIVERT_HELPER_NO_REPLACE -> 2048 - public const int WINDIVERT_HELPER_NO_REPLACE = 2048; +// /// WINDIVERT_HELPER_NO_REPLACE -> 2048 +// public const int WINDIVERT_HELPER_NO_REPLACE = 2048; } - [StructLayout(LayoutKind.Sequential)] - internal struct WINDIVERT_ADDRESS { - /// UINT32->unsigned int - public uint IfIdx; - - /// UINT32->unsigned int - public uint SubIfIdx; + internal enum WinDivertPacketFlags : byte + { + Sniffed = 1 << 0, + Outbound = 1 << 1, + Loopback = 1 << 2, + Impostor = 1 << 3, + IPv6 = 1 << 4, + IPChecksum = 1 << 5, + TCPChecksum = 1 << 6, + UDPChecksum = 1 << 7, + } - /// UINT8->unsigned char - public byte Direction; + [StructLayout(LayoutKind.Sequential)] + internal unsafe struct WINDIVERT_ADDRESS { + /// INT64 + public long Timestamp; + /// UINT32:8 + public byte Layer; + + /// UINT32:8 + public byte Event; + /// + public WinDivertPacketFlags Flags; + + /// UINT32:8 + public byte Reserved1; + /// UINT32 + public uint Reserved2; + public fixed byte Reserved3[64]; } internal enum WINDIVERT_LAYER { @@ -239,16 +258,25 @@ internal enum WINDIVERT_LAYER { /// WINDIVERT_LAYER_NETWORK_FORWARD -> 1 WINDIVERT_LAYER_NETWORK_FORWARD = 1, - } - internal enum WINDIVERT_PARAM { - /// WINDIVERT_PARAM_QUEUE_LEN -> 0 - WINDIVERT_PARAM_QUEUE_LEN = 0, + /// WINDIVERT_LAYER_FLOW -> 2 + WINDIVERT_LAYER_FLOW = 2, - /// WINDIVERT_PARAM_QUEUE_TIME -> 1 - WINDIVERT_PARAM_QUEUE_TIME = 1, + /// WINDIVERT_LAYER_SOCKET -> 3 + WINDIVERT_LAYER_SOCKET = 3, + + /// WINDIVERT_LAYER_REFLECT -> 4 + WINDIVERT_LAYER_REFLECT = 4, } +// internal enum WINDIVERT_PARAM { +// /// WINDIVERT_PARAM_QUEUE_LEN -> 0 +// WINDIVERT_PARAM_QUEUE_LEN = 0, + +// /// WINDIVERT_PARAM_QUEUE_TIME -> 1 +// WINDIVERT_PARAM_QUEUE_TIME = 1, +// } + internal struct WINDIVERT_IPHDR { public uint HdrLength { get { @@ -710,49 +738,50 @@ internal class SafeNativeMethods { ///handle: HANDLE->void* ///pPacket: PVOID->void* ///packetLen: UINT->unsigned int + ///pRecvLen: UINT* ///pAddr: PWINDIVERT_ADDRESS->Anonymous_7d42ad21_898e_4fdf_a30d_dc1e2c77a38f* - ///readLen: UINT* [DllImport(dllPath, EntryPoint = "WinDivertRecv", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertRecv([In] IntPtr handle, byte[] pPacket, uint packetLen, ref WINDIVERT_ADDRESS pAddr, ref uint readLen); - - /// Return Type: BOOL->int - ///handle: HANDLE->void* - ///pPacket: PVOID->void* - ///packetLen: UINT->unsigned int - ///flags: UINT64->unsigned __int64 - ///pAddr: PWINDIVERT_ADDRESS->Anonymous_7d42ad21_898e_4fdf_a30d_dc1e2c77a38f* - ///readLen: UINT* - ///lpOverlapped: LPOVERLAPPED->_OVERLAPPED* - [DllImport(dllPath, EntryPoint = "WinDivertRecvEx", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertRecvEx([In] IntPtr handle, byte[] pPacket, uint packetLen, ulong flags, ref WINDIVERT_ADDRESS pAddr, ref uint readLen, ref NativeOverlapped lpOverlapped); - - /// Return Type: BOOL->int - ///handle: HANDLE->void* - ///pPacket: PVOID->void* - ///packetLen: UINT->unsigned int - ///pAddr: PWINDIVERT_ADDRESS->Anonymous_7d42ad21_898e_4fdf_a30d_dc1e2c77a38f* - ///writeLen: UINT* - [DllImport(dllPath, EntryPoint = "WinDivertSend", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertSend([In] IntPtr handle, [In] byte[] pPacket, uint packetLen, [In] ref WINDIVERT_ADDRESS pAddr, ref uint writeLen); + public static extern bool WinDivertRecv([In] IntPtr handle, byte[] pPacket, uint packetLen, ref uint pRecvLen, ref WINDIVERT_ADDRESS pAddr); + +// /// Return Type: BOOL->int +// ///handle: HANDLE->void* +// ///pPacket: PVOID->void* +// ///packetLen: UINT->unsigned int +// ///flags: UINT64->unsigned __int64 +// ///pAddr: PWINDIVERT_ADDRESS->Anonymous_7d42ad21_898e_4fdf_a30d_dc1e2c77a38f* +// ///readLen: UINT* +// ///lpOverlapped: LPOVERLAPPED->_OVERLAPPED* +// [DllImport(dllPath, EntryPoint = "WinDivertRecvEx", SetLastError = true)] +// [return: MarshalAs(UnmanagedType.Bool)] +// public static extern bool WinDivertRecvEx([In] IntPtr handle, byte[] pPacket, uint packetLen, ulong flags, ref WINDIVERT_ADDRESS pAddr, ref uint readLen, ref NativeOverlapped lpOverlapped); + +// /// Return Type: BOOL->int +// ///handle: HANDLE->void* +// ///pPacket: PVOID->void* +// ///packetLen: UINT->unsigned int +// ///pAddr: PWINDIVERT_ADDRESS->Anonymous_7d42ad21_898e_4fdf_a30d_dc1e2c77a38f* +// ///writeLen: UINT* +// [DllImport(dllPath, EntryPoint = "WinDivertSend", SetLastError = true)] +// [return: MarshalAs(UnmanagedType.Bool)] +// public static extern bool WinDivertSend([In] IntPtr handle, [In] byte[] pPacket, uint packetLen, [In] ref WINDIVERT_ADDRESS pAddr, ref uint writeLen); /// Return Type: BOOL->int ///handle: HANDLE->void* ///pPacket: PVOID->void* ///packetLen: UINT->unsigned int + ///pSendLen: PUINT ///flags: UINT64->unsigned __int64 ///pAddr: PWINDIVERT_ADDRESS->Anonymous_7d42ad21_898e_4fdf_a30d_dc1e2c77a38f* - ///writeLen: UINT* + ///addrLen: UINT ///lpOverlapped: LPOVERLAPPED->_OVERLAPPED* [DllImport(dllPath, EntryPoint = "WinDivertSendEx", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertSendEx([In] IntPtr handle, [In] byte[] pPacket, uint packetLen, ulong flags, [In] ref WINDIVERT_ADDRESS pAddr, ref uint writeLen, ref NativeOverlapped lpOverlapped); + public static extern bool WinDivertSendEx([In] IntPtr handle, [In] byte[] pPacket, uint packetLen, ref uint pSendLen, ulong flags, [In] ref WINDIVERT_ADDRESS pAddr, uint addrLen, ref NativeOverlapped lpOverlapped); - [DllImport(dllPath, EntryPoint = "WinDivertSendEx", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertSendEx([In] IntPtr handle, [In] byte[] pPacket, uint packetLen, ulong flags, [In] ref WINDIVERT_ADDRESS pAddr, IntPtr writeLen, IntPtr lpOverlapped); + // [DllImport(dllPath, EntryPoint = "WinDivertSendEx", SetLastError = true)] + // [return: MarshalAs(UnmanagedType.Bool)] + // public static extern bool WinDivertSendEx([In] IntPtr handle, [In] byte[] pPacket, uint packetLen, ref uint pSendLen, ulong flags, [In] ref WINDIVERT_ADDRESS pAddr, uint addrLen, IntPtr lpOverlapped); /// Return Type: BOOL->int ///handle: HANDLE->void* @@ -760,75 +789,79 @@ internal class SafeNativeMethods { [return: MarshalAs(UnmanagedType.Bool)] public static extern bool WinDivertClose([In] IntPtr handle); - /// Return Type: BOOL->int - ///handle: HANDLE->void* - ///param: WINDIVERT_PARAM->Anonymous_e5050871_9359_4204_b35d_ed31a2bded35 - ///value: UINT64->unsigned __int64 - [DllImport(dllPath, EntryPoint = "WinDivertSetParam", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertSetParam([In] IntPtr handle, WINDIVERT_PARAM param, ulong value); - - /// Return Type: BOOL->int - ///handle: HANDLE->void* - ///param: WINDIVERT_PARAM->Anonymous_e5050871_9359_4204_b35d_ed31a2bded35 - ///pValue: UINT64* - [DllImport(dllPath, EntryPoint = "WinDivertGetParam", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertGetParam([In] IntPtr handle, WINDIVERT_PARAM param, [Out] out ulong pValue); +// /// Return Type: BOOL->int +// ///handle: HANDLE->void* +// ///param: WINDIVERT_PARAM->Anonymous_e5050871_9359_4204_b35d_ed31a2bded35 +// ///value: UINT64->unsigned __int64 +// [DllImport(dllPath, EntryPoint = "WinDivertSetParam", SetLastError = true)] +// [return: MarshalAs(UnmanagedType.Bool)] +// public static extern bool WinDivertSetParam([In] IntPtr handle, WINDIVERT_PARAM param, ulong value); + +// /// Return Type: BOOL->int +// ///handle: HANDLE->void* +// ///param: WINDIVERT_PARAM->Anonymous_e5050871_9359_4204_b35d_ed31a2bded35 +// ///pValue: UINT64* +// [DllImport(dllPath, EntryPoint = "WinDivertGetParam", SetLastError = true)] +// [return: MarshalAs(UnmanagedType.Bool)] +// public static extern bool WinDivertGetParam([In] IntPtr handle, WINDIVERT_PARAM param, [Out] out ulong pValue); /// Return Type: BOOL->int ///pPacket: PVOID->void* ///packetLen: UINT->unsigned int ///ppIpHdr: PWINDIVERT_IPHDR* ///ppIpv6Hdr: PWINDIVERT_IPV6HDR* + ///pProtocol: UINT8 * ///ppIcmpHdr: PWINDIVERT_ICMPHDR* ///ppIcmpv6Hdr: PWINDIVERT_ICMPV6HDR* ///ppTcpHdr: PWINDIVERT_TCPHDR* ///ppUdpHdr: PWINDIVERT_UDPHDR* ///ppData: PVOID* ///pDataLen: UINT* + ///ppNext: PVOID* + ///pNextLen: UINT* [DllImport(dllPath, EntryPoint = "WinDivertHelperParsePacket", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] - public static unsafe extern bool WinDivertHelperParsePacket(byte* pPacket, uint packetLen, WINDIVERT_IPHDR** ppIpHdr, WINDIVERT_IPV6HDR** ppIpv6Hdr, WINDIVERT_ICMPHDR** ppIcmpHdr, WINDIVERT_ICMPV6HDR** ppIcmpv6Hdr, WINDIVERT_TCPHDR** ppTcpHdr, WINDIVERT_UDPHDR** ppUdpHdr, byte** ppData, uint* pDataLen); - - /// Return Type: BOOL->int - ///addrStr: char* - ///pAddr: UINT32* - [DllImport(dllPath, EntryPoint = "WinDivertHelperParseIPv4Address", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertHelperParseIPv4Address([In] [MarshalAs(UnmanagedType.LPStr)] string addrStr, IntPtr pAddr); - - /// Return Type: BOOL->int - ///addrStr: char* - ///pAddr: UINT32* - [DllImport(dllPath, EntryPoint = "WinDivertHelperParseIPv6Address", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertHelperParseIPv6Address([In] [MarshalAs(UnmanagedType.LPStr)] string addrStr, IntPtr pAddr); + public static unsafe extern bool WinDivertHelperParsePacket(byte* pPacket, uint packetLen, WINDIVERT_IPHDR** ppIpHdr, WINDIVERT_IPV6HDR** ppIpv6Hdr, byte* pProtocol, WINDIVERT_ICMPHDR** ppIcmpHdr, WINDIVERT_ICMPV6HDR** ppIcmpv6Hdr, WINDIVERT_TCPHDR** ppTcpHdr, WINDIVERT_UDPHDR** ppUdpHdr, byte** ppData, uint* pDataLen, byte** ppNext, uint* pNextLen); + +// /// Return Type: BOOL->int +// ///addrStr: char* +// ///pAddr: UINT32* +// [DllImport(dllPath, EntryPoint = "WinDivertHelperParseIPv4Address", SetLastError = true)] +// [return: MarshalAs(UnmanagedType.Bool)] +// public static extern bool WinDivertHelperParseIPv4Address([In] [MarshalAs(UnmanagedType.LPStr)] string addrStr, IntPtr pAddr); + +// /// Return Type: BOOL->int +// ///addrStr: char* +// ///pAddr: UINT32* +// [DllImport(dllPath, EntryPoint = "WinDivertHelperParseIPv6Address", SetLastError = true)] +// [return: MarshalAs(UnmanagedType.Bool)] +// public static extern bool WinDivertHelperParseIPv6Address([In] [MarshalAs(UnmanagedType.LPStr)] string addrStr, IntPtr pAddr); /// Return Type: UINT->unsigned int ///pPacket: PVOID->void* ///packetLen: UINT->unsigned int + ///pAddr: PWINDIVERT_ADDRESS ///flags: UINT64->unsigned __int64 [DllImport(dllPath, EntryPoint = "WinDivertHelperCalcChecksums", SetLastError = true)] - public static extern uint WinDivertHelperCalcChecksums(byte[] pPacket, uint packetLen, ulong flags); - - /// Return Type: BOOL->int - ///filter: char* - ///layer: WINDIVERT_LAYER->Anonymous_d7dac89f_91f7_4aca_b997_239f157c8039 - ///errorStr: char** - ///errorPos: UINT* - [DllImport(dllPath, EntryPoint = "WinDivertHelperCheckFilter", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertHelperCheckFilter([In] [MarshalAs(UnmanagedType.LPStr)] string filter, WINDIVERT_LAYER layer, ref IntPtr errorStr, IntPtr errorPos); - - /// Return Type: BOOL->int - ///filter: char* - ///layer: WINDIVERT_LAYER->Anonymous_d7dac89f_91f7_4aca_b997_239f157c8039 - ///pPacket: PVOID->void* - ///packetLen: UINT->unsigned int - ///pAddr: PWINDIVERT_ADDRESS->Anonymous_7d42ad21_898e_4fdf_a30d_dc1e2c77a38f* - [DllImport(dllPath, EntryPoint = "WinDivertHelperEvalFilter", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinDivertHelperEvalFilter([In] [MarshalAs(UnmanagedType.LPStr)] string filter, WINDIVERT_LAYER layer, [In] byte[] pPacket, uint packetLen, [In] ref WINDIVERT_ADDRESS pAddr); + public static unsafe extern uint WinDivertHelperCalcChecksums(byte[] pPacket, uint packetLen, ref WINDIVERT_ADDRESS pAddr, ulong flags); + +// /// Return Type: BOOL->int +// ///filter: char* +// ///layer: WINDIVERT_LAYER->Anonymous_d7dac89f_91f7_4aca_b997_239f157c8039 +// ///errorStr: char** +// ///errorPos: UINT* +// [DllImport(dllPath, EntryPoint = "WinDivertHelperCheckFilter", SetLastError = true)] +// [return: MarshalAs(UnmanagedType.Bool)] +// public static extern bool WinDivertHelperCheckFilter([In] [MarshalAs(UnmanagedType.LPStr)] string filter, WINDIVERT_LAYER layer, ref IntPtr errorStr, IntPtr errorPos); + +// /// Return Type: BOOL->int +// ///filter: char* +// ///layer: WINDIVERT_LAYER->Anonymous_d7dac89f_91f7_4aca_b997_239f157c8039 +// ///pPacket: PVOID->void* +// ///packetLen: UINT->unsigned int +// ///pAddr: PWINDIVERT_ADDRESS->Anonymous_7d42ad21_898e_4fdf_a30d_dc1e2c77a38f* +// [DllImport(dllPath, EntryPoint = "WinDivertHelperEvalFilter", SetLastError = true)] +// [return: MarshalAs(UnmanagedType.Bool)] +// public static extern bool WinDivertHelperEvalFilter([In] [MarshalAs(UnmanagedType.LPStr)] string filter, WINDIVERT_LAYER layer, [In] byte[] pPacket, uint packetLen, [In] ref WINDIVERT_ADDRESS pAddr); } } \ No newline at end of file diff --git a/src/NTMinerNoDevFee/NoDevFee/WinDivert.dll b/src/NTMinerNoDevFee/NoDevFee/WinDivert.dll index 7d6215e19..a6ef7c790 100644 Binary files a/src/NTMinerNoDevFee/NoDevFee/WinDivert.dll and b/src/NTMinerNoDevFee/NoDevFee/WinDivert.dll differ diff --git a/src/NTMinerNoDevFee/NoDevFee/WinDivert64.sys b/src/NTMinerNoDevFee/NoDevFee/WinDivert64.sys index 475ce21a5..b671a9fe1 100644 Binary files a/src/NTMinerNoDevFee/NoDevFee/WinDivert64.sys and b/src/NTMinerNoDevFee/NoDevFee/WinDivert64.sys differ