/// <summary> /// </summary> /// <param name="p"></param> /// <param name="header"></param> public void SendPacket(ReadOnlySpan <byte> p, ICaptureHeader captureHeader) { ThrowIfNotOpen(); bool res; WinDivertAddress addr = default; if (!(captureHeader is WinDivertHeader)) { addr = GetAddress(p); } else { var header = captureHeader as WinDivertHeader; addr.IfIdx = header.InterfaceIndex; addr.SubIfIdx = header.SubInterfaceIndex; addr.Flags = header.Flags; } unsafe { fixed(byte *p_packet = p) { res = WinDivertNative.WinDivertSend(Handle, new IntPtr(p_packet), (uint)p.Length, out var pSendLen, ref addr); } } if (!res) { ThrowLastWin32Error("Can't send packet"); } }
private void SendPacket(ReadOnlySpan <byte> p, WinDivertAddress addr) { ThrowIfNotOpen(); bool res; unsafe { fixed(byte *p_packet = p) { res = WinDivertNative.WinDivertSend(Handle, new IntPtr(p_packet), (uint)p.Length, out var pSendLen, ref addr); } } if (!res) { ThrowLastWin32Error("Can't send packet"); } }