public void Open(string filter, DivertLayer layer, short priority, DivertFlags flags) { if (String.IsNullOrWhiteSpace(filter)) { throw new ArgumentNullException("filter"); } ulong m_flag = Convert.ToUInt64(flags); WINDIVERT_LAYER m_layer = (WINDIVERT_LAYER)layer; _divert_handle = NativeMethods.WinDivertOpen(filter, m_layer, priority, m_flag); int lastWin32Error = Marshal.GetLastWin32Error(); if (_divert_handle.IsInvalid) { switch (lastWin32Error) { case WinError.ERROR_FILE_NOT_FOUND: throw new Exception("The driver files WinDivert32.sys or WinDivert64.sys were not found."); case WinError.ERROR_ACCESS_DENIED: throw new Exception("You don't have sufficent privilege to use the driver."); case WinError.ERROR_INVALID_PARAMETER: throw new Exception("Filter string, layer, priority, or flags parameters contain invalid values."); case WinError.ERROR_INVALID_IMAGE_HASH: throw new Exception("The WinDivert32.sys or WinDivert64.sys driver does not have a valid digital signature."); case WinError.ERROR_DRIVER_BLOCKED: throw new Exception("The driver is blocked from operating. This can happen for various reasons, such as interference from security software, or usage inside a virtualization environment that does not support drivers."); default: throw new Exception("Failed to open WinDivert safe handle. Cause is unknown. Win32 Error is " + lastWin32Error); } } }
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 extern bool WinDivertHelperCheckFilter([In][MarshalAs(UnmanagedType.LPStr)] string filter, WINDIVERT_LAYER layer, ref IntPtr errorStr, IntPtr errorPos);
public static extern IntPtr WinDivertOpen([In][MarshalAs(UnmanagedType.LPStr)] string filter, WINDIVERT_LAYER layer, short priority, ulong flags);
private extern static UIntPtr WinDivertOpen(string filter, WINDIVERT_LAYER layer, Int16 prio, WINDIVERT_FLAG flags);
internal static extern System.IntPtr WinDivertOpen([In][MarshalAs(UnmanagedType.LPStr)] System.String filter, [In] WINDIVERT_LAYER layer, [In] System.Int16 priority, [In] System.UInt64 flags);
public static extern DivertSafeHandle WinDivertOpen([InAttribute(), MarshalAs(UnmanagedType.LPStr)] string filter, WINDIVERT_LAYER layer, short priority, ulong flags);