Commit Graph
46 Commits
Author SHA1 Message Date
basil00 8ff3c86330 Version tweaks. 2018-11-15 08:24:46 +08:00
basil00 6250568974 Add a new FLOW layer into WinDivert.
Adds a new WINDIVERT_LAYER_FLOW layer that can:
- Track when flows are established
- Track when existing flows are deleted
2018-09-30 09:07:16 +08:00
basil00 e82552153b Optimize pseudo checksum "calculation"
Since pseudo checksums can now be arbitrary
values, the WinDivertHelperCalcChecksums function
no longer attempts to calculate the pseudo-
header checksum.
2018-07-19 09:16:15 +08:00
basil00 6ac22c1650 Retire MSVC-2012 and (non-driver) WDDK builds.
The new MINGW build should be compatible with all
major compilers, including Visual Studio 201X.
2018-07-02 19:23:49 +08:00
basil00 ae25f27469 Fix #131 2018-05-23 18:14:36 +08:00
basil00 1543e958e6 Dual-license WinDivert under the LGPLv3 and GPLv2.
This allows projects that are strictly "GPLv2
only" to use WinDivert without licensing issues.
See the FSF's compatibility matrix here:
https://www.gnu.org/licenses/gpl-faq.en.html

This change does not affect existing projects
that can continue to use the LGPLv3 as before.

Also, bump the WinDivert version to 1.4.1.
2018-04-04 18:41:45 +08:00
basil00 af5cd69883 Document the 1753 error. 2017-11-27 06:45:18 +08:00
basil00 884622c5c7 Update documentation. 2017-11-18 15:38:15 +08:00
basil00 bbf6a34aa6 Add Loopback and Timestamp fields to addresses.
- Loopback=1 for loopback packets, 0 otherwise.
- Timestamp is the time when packet captured.
2017-11-05 12:12:19 +08:00
basil00 60c3a26e1c Documentation improvements. 2017-11-01 20:56:51 +08:00
basil00 4c4f586f4d Add WINDIVERT_FLAG_DEBUG for WinDivertOpen() 2017-10-31 10:53:06 +08:00
basil00 b2fd7eb891 Bump version to 1.4 2017-10-22 21:07:06 +08:00
basil00 bd4265897a Increase packet queue limits.
Queued packets use PagedPool, so increase limits:
- Queue length (min=16,max=16384,default=2048)
- Queue time (min=20,max=8000,default=1000ms)
2017-10-21 18:13:58 +08:00
clmul 751ed975e3 Fix documentation, the default packet queue length is 1024 2017-10-19 10:41:23 +08:00
basil00 910a2e3050 Add new WINDIVERT_PARAM_QUEUE_SIZE parameter.
Controls the number of bytes used by the packet queue.
2017-10-01 15:33:58 +08:00
basil00 7b7d92cd26 Bump version to WinDivert 1.3.0
This prevents the old 1.2 driver from being used by new 1.3 software.

Also, clean up the driver code.
2017-09-24 15:48:38 +08:00
basil00 7cfc3e2e72 Further integrate the streamdump sample.
Untested.
2016-01-19 10:57:47 +08:00
basil00 609ab63594 Add a NO_REPLACE for WinDivertHelperCalcChecksums
The WINDIVERT_HELPER_NO_REPLACE flag tells WinDivertHelperCalcChecksums not to
recalculate and replace non-zero checksum fields.  This is useful for
reconstructing the checksums for packets returned by WinDivertRecv(), where
all non-zero checksum fields are already valid.  This allows WinDivert1.2
to achieve similar efficiency as WinDivert1.1, where checksums were calculated
by the driver.

Note that for modified packets, the WINDIVERT_HELPER_NO_REPLACE flag should
not be used, as all checksums need to be recalculated from scratch anyway.
2015-07-25 13:24:28 +08:00
basil00 82fb0e704c Update documentation.
Add notes about zero-checksums and known issues.
2015-07-25 12:40:03 +08:00
basil00 7666386af2 Update the WinDivert documentation for version 1.2 2015-07-18 10:46:20 +08:00
basil00 90da7a92c7 - Fix documentation; ipv6 extension headers are now supported. 2014-11-29 13:22:52 +08:00
basil00 232459cc11 - Document the WinDivertHelperParseIPvXAddress() byte/word orderings. 2014-11-18 00:02:47 +08:00
basil00 08fef993ba - Update documentation to reflect the new installation instructions. 2013-12-12 22:55:19 +08:00
basil00 f9f11c0e23 - Documentation tweaks and improvements. 2013-11-27 23:49:00 +08:00
basil00 8ecfc1e52b - Add documentation for WinDivertRecvEx() and WinDivertSendEx(). 2013-10-05 13:03:33 +08:00
basil00 fd9d8eb0c3 - Documentation tweaks, including comments in (1275) errors. 2013-09-24 14:15:28 +08:00
basil00 835d604d4e - Remove the PASSTHRU flag; The same result can be achieved with a "false"
filter.
2013-09-10 17:52:43 +08:00
basil00 bbd3b0e9e9 - Update documentation to version 1.1 API 2013-08-16 22:50:00 +08:00
basil00 38f1f3a16d - Towards WinDivert 1.1:
* Re-brand "DIVERT" to "WINDIVERT" throughout the code-base.
* New flags:
  > WINDIVERT_FLAG_PASSTHRU: Do not drop nor capture packets.  Useful
    for injection-only handles.
  > WINDIVERT_FLAG_NO_CHECKSUM: Do not guarantee that diverted packets
    have a correct checksum.
  NOTE: Not yet tested!
* New default values and limits for various WinDivert parameters,
  including WINDIVERT_PARAM_QUEUE_LEN, WINDIVERT_PARAM_QUEUE_TIME, and
  the maximum filter length.
* New extended WinDivert functions that support asynchronous I/O:
  > WinDivertRecvEx(..)
  > WinDivertSendEx(..)
  NOTE: Not yet tested!
* The WinDivert driver now services reads (receives) out-of-band.
  The motivation is because WFP callouts are run at DISPATCH_LEVEL, so
  we should not be doing expensive work in the ClassifyFn.  This is also
  the same reason why the filter length has been restricted.
2013-06-30 15:58:21 +08:00
basil00 e0e1feabad - Update support to Visual Studio 2012. 2013-06-25 23:22:41 +08:00
basil00 3d7d3e4fd4 - Documentation improvements. 2013-06-20 18:31:32 +08:00
basil00 eb667e4c32 - New version 1.0.4
- Documentation tweaks
- Use a newer version of MinGW
- Use signed driver in release.
2013-06-03 18:32:30 +08:00
basil00 6ef0028edd - Fix stray `;' in code sample (issue #5). 2013-05-02 11:09:00 +08:00
basil00 3d881423d6 - Replace (110) errors with more meaningful error codes.
- Add two new helper API functions: DivertHelperParseIPv?Addr(..)
- Document these new features.
2013-04-06 23:41:00 +08:00
basil00 898ea780e2 - Fix typo 2012-10-24 21:58:43 +08:00
basil00 5ce2f868d6 - Expand documentation regarding test signing the WinDivert driver.
(this was causing some confusion).
2012-06-01 23:14:46 +08:00
basil00 7cb25b8a1e - Added build-system documentation 2012-03-26 22:31:21 +08:00
basil00 13b2ab4418 ***MAJOR UPDATE***
Name and version:

* Now officially called 'WinDivert'
* Now officially working towards a version 1.0 release

New features:

* WinDivert now supports a packet-sniffing mode.  This mode merely
  copies packets, and does not drop the original.
* WinDivert now also supports a packet-dropping mode.
* WinDivert now supports filter priorities.
* WinDivert now supports a forwarded packet layer (WARNING: untested).
* WinDivert now supports get/set parameters such as packet queue length and
  time.
* WinDivert now supports larger filters (but use at own risk).
* WinDivert now uninstalls the driver on program exit/library unload
* Different versions of WinDivert can co-exist on the same machine
  (WARNING: untested, as there is currently only one version).

New License:

* WinDivert is now LGPL.  This is less restrictive than the GPL so WinDivert
  can be linked to by commercial software (under the terms of the LGPL
  license).

Technical:

* Cleaner IOCTL interface.
* Cleaner driver implementation.
* Thread local events in WinDivert.dll
* Many minor tweaks and fixes.
2012-02-21 23:18:45 +08:00
basil00 a205259bec - Divert driver and library now fully support multi-threaded code. This
includes making the driver handle I/O requests in parallel, and changing
  the library such that it uses overlapped I/O.  Overall the package is
  now significantly faster.
- The divert driver now only adds WFP callouts when a filter is set,
  instead of when a handle is created.
- The divert driver now attempts to avoid adding WFP callouts that are
  superfluous with respect to the filter.
- The divert driver now explicitly deletes filters and callouts during
  cleanup.  This appears to resolve a bug where network connectivity is
  sometimes lost.
- Added a new sample program: passthru.exe.  This example doesn't do anything
  interesting but is useful for speed testing.
- Rename build.sh to mingw-build.sh to avoid confusion.
2011-11-08 23:54:01 +08:00
basil00 5dce077e86 - Fix bug where WdfRequestProbeAndLockUserBufferFor* was not in the caller
context, resulting in an occasional BSOD.
- Fix bug where the driver rejects the "false" filter.
- Update documentation to reflect that the "false" filter is still useful
  for packet injection.
2011-10-19 20:53:49 +08:00
basil00 f1b7ead828 The divert.dll library can now be build with MinGW Linux cross-compilation.
This is useful for projects that use MinGW instead of MSVC.  Otherwise, the
.dlls are incompatible.
2011-10-15 17:40:18 +08:00
basil00 8906eaa02c - Move some mis-placed text 2011-08-23 23:37:41 +08:00
basil00 0ff63cda99 - Make the package compile for i386
- Make the pAddr arg for DivertRecv() optional
- Make the i386 user binaries compatible with an amd64 driver.
  (useful for projects not yet ported to amd64)
2011-08-23 22:18:02 +08:00
basil00 ee386df032 Figured out a way to split the "address" part of the buffer from the packet
data itself.  This makes for a much cleaner interface.

sys/divert.c
dll/divert.c
include/*.h
	DivertRecv and DivertSend now use IOCTLs instead of reads/writes.
	The 'address' parameter is passed by pointer to the driver, which
	writes directly to it (after sanity checks).
	This means that the data buffer now only contains the packet, which
	help to avoid some messy code.

examples/*/*.c
	Update the examples to reflect the new API.

doc/divert.html
	Update the documentation to reflect the new API.
2011-08-21 17:59:13 +08:00
basil00 cf80d12e5d Fix out-of-date documentation 2011-08-19 22:08:29 +08:00
basil00 019f9d509b First commit of the Windows Divert project 2011-08-19 20:11:17 +08:00