internal static WinDivertHandle[] OpenDropHandles(short priority, IList <FilterDefinition> filters) { byte[] ruleBuffer = new byte[10240]; WinDivertHandle[] ret = new WinDivertHandle[filters.Count]; for (int i = 0; i < ret.Length; i++) { ret[i] = OpenHandle(ruleBuffer, filters[i], WinDivertLayer.Network, priority, WinDivertFlag.Drop); } return(ret); }
private void ThreadProc() { _handle = null; BeforeStart(); bool error = false; try { _handle = Library.OpenHandle(_filter, WinDivertLayer.Network, _priority, WinDivertFlag.Sniff); _isActive = !_handle.IsInvalid; byte[] packet = new byte[1600]; WinDivertAddress addr; int len; while (_isActive) { if (_handle.Receive(packet, packet.Length, out addr, out len)) { // поймали пакет OnPacketCaptured(packet, len, in addr); } } } catch (Exception e) { error = true; } finally { if (null != _handle) { _handle.Close(); _handle = null; } AfterStop(error); } }