Since pseudo checksums can now be arbitrary values, the WinDivertHelperCalcChecksums function no longer attempts to calculate the pseudo- header checksum.
132 lines
6.5 KiB
Plaintext
132 lines
6.5 KiB
Plaintext
WinDivert 1.0.0
|
|
- First release of WinDivert 1.0
|
|
WinDivert 1.0.1
|
|
- Fixed stack overflow bug in 32bit versions of the driver.
|
|
WinDivert 1.0.2
|
|
- WinDivert now requires Administrator privileges in order to access
|
|
(as opposed to just install) the WinDivert device.
|
|
WinDivert 1.0.3
|
|
- Fix bug(s) relating to the parsing of IPv6 addresses.
|
|
- DivertOpen() now returns more meaningful error codes on failure.
|
|
- Two new helper API functions: DivertHelperParseIPvXAddress(..), X=4,6.
|
|
- Renamed DivertHelperParse(..) to DivertHelperParsePacket(..).
|
|
WinDivert 1.0.4
|
|
- Same as WinDivert 1.0.3 except:
|
|
* Released with signed drivers.
|
|
* MinGW compiled gcc-4.6
|
|
* Minor documentation changes.
|
|
WinDivert 1.0.5
|
|
- Fix the DIVERT_NETWORK_FORWARD_LAYER implementation.
|
|
- Upgrade Visual Studio support to 2012.
|
|
WinDivert 1.1.0-rc
|
|
- Re-brand "DIVERT" to "WINDIVERT" throughout the code-base.
|
|
- New flag:
|
|
* WINDIVERT_FLAG_NO_CHECKSUM: Do not guarantee that diverted packets
|
|
have a correct checksum.
|
|
- 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(..)
|
|
- The WinDivert driver now services reads (WinDivertRecv()) out-of-band.
|
|
- The WinDivert driver now protects packet data from modification by
|
|
other callout drivers and the user program.
|
|
- The WinDivert service is no longer created when the driver fails to
|
|
load.
|
|
WinDivert 1.1.1
|
|
- Fixed a BSOD that sometimes occurs when the driver is unloaded.
|
|
WinDivert 1.1.2-rc
|
|
- Renamed drivers to "WinDivert32.sys" and "WinDivert64.sys". Both can
|
|
exist in the same directory, and WinDivert.dll automatically loads the
|
|
correct version.
|
|
- Deprecate both the WinDivert.inf and WdfCoInstaller*.dll files.
|
|
WinDivert 1.1.3
|
|
- Fixed a bug that causes some outbound TCP packets to be lost.
|
|
WinDivert 1.1.4
|
|
- Fixed a BSOD that occurs when NULL is passed as the address parameter to
|
|
WinDivertRecv(..) or WinDivertSend(..).
|
|
WinDivert 1.1.5
|
|
- Insert WinDivert as the highest priority WFP sublayer.
|
|
WinDivert 1.1.6
|
|
- WinDivert now searches for the driver files in the application's
|
|
directory (as opposed to the current directory).
|
|
WinDivert 1.1.7
|
|
- Improved IPv6 support:
|
|
* Fixed incorrect IPV6 TCP/UDP checksum calculation in
|
|
WinDivertHelperCalcChecksums().
|
|
* WinDivert driver now calculates checksums for IPV6 packets.
|
|
* WinDivert can now handle IPV6 extension headers.
|
|
* Fixed WinDivertHelperParseIPv6Address().
|
|
WinDivert 1.1.8
|
|
- Fix ip.TOS handling bug.
|
|
- Fix IPv6 comparison bug.
|
|
WinDivert 1.2.0-rc
|
|
- The WinDivert filter language now supports C-style "(F1? F2: F3)"
|
|
expressions, where {F1,F2,F3} are themselves filter expressions.
|
|
- New WinDivert helper functions:
|
|
* WinDivertHelperCheckFilter() checks if a filter string is valid.
|
|
* WinDivertHelperEvalFilter() evaluates a filter on a packet.
|
|
- Some packets (specifically outbound or loopback packets) returned by
|
|
WinDivertRecv() or WinDivertRecvEx() are no longer required to have
|
|
correct checksums. Absent checksum fields will be set to zero. If need
|
|
be the checksums can be recovered by WinDivertHelperCalcChecksums().
|
|
- The WINDIVERT_FLAG_NO_CHECKSUM flag has been deprecated.
|
|
- The WinDivertHelperCalcChecksums() function now accepts a new
|
|
WINDIVERT_HELPER_NO_REPLACE flag, which indicates that non-zero checksum
|
|
fields should not be replaced.
|
|
- Support for the old WinDivert1.0 API has been removed.
|
|
WinDivert 1.2.1
|
|
- Identical to WinDivert 1.2.0-rc.
|
|
WinDivert 1.3.0
|
|
- Fix BSOD that sometimes occurs after abnormal user application exit.
|
|
- Fix BSOD that sometimes occurs when WinDivert is combined with other
|
|
callout drivers.
|
|
- WinDivertSend() has been optimized. However, it may not detect as
|
|
many packet injection errors as it could before.
|
|
WinDivert 1.4.0-rc
|
|
- Add a new WINDIVERT_PARAM_QUEUE_SIZE parameter that can be used to
|
|
control the maximum number of bytes used by the packet queue.
|
|
- Add a new WINDIVERT_FLAG_DEBUG flag that causes WinDivertSend() to
|
|
block until the packet exits the Windows TCP/IP stack. This is slower
|
|
but provides better error messages, so is useful for debugging.
|
|
- Internally queued packets are now reinjected when WinDivertClose() is
|
|
called instead of being dropped.
|
|
- WINDIVERT_ADDRESS now includes a Timestamp field that indicates when
|
|
the packet was first captured by WinDivert. The timestamp uses the
|
|
same clock as QueryPerformanceCounter().
|
|
- WINDIVERT_ADDRESS now includes a Loopback field that indicates whether
|
|
the packet is a loopback packet or not.
|
|
- The filter language has been extended to include a loopback field that
|
|
matches loopback packets.
|
|
- Loopback packets are now considered to be outbound-only.
|
|
- WINDIVERT_ADDRESS now includes an Impostor field which indicates that the
|
|
packet originated from another driver rather than from the network or
|
|
TCP/IP stack.
|
|
- WinDivertRecv() will eventually fail with ERROR_HOST_UNREACHABLE if
|
|
an impostor packet enters an infinite loop (see #41).
|
|
- The filter language has been extended to include an impostor field that
|
|
matches impostor packets.
|
|
- WINDIVERT_ADDRESS now includes three new flags relating to checksums:
|
|
* PseudoIPChecksum
|
|
* PseudoTCPChecksum
|
|
* PseudoUDPChecksum
|
|
When set, these flags indicate that the corresponding packet uses
|
|
"pseudo" IP/TCP/UDP checksums instead of the default full checksums.
|
|
Pseudo checksums are cheaper to calculate, and can be used when the
|
|
network hardware supports checksum offloading.
|
|
- WinDivertHelperCalcChecksums() now takes an optional pointer to a
|
|
WINDIVERT_ADDRESS structure, and calculates pseudo checksums if the
|
|
corresponding Pseudo*Checksum flag is set.
|
|
- The WINDIVERT_HELPER_NO_REPLACE flag for WinDivertHelperCalcChecksums()
|
|
has been deprecated. It is no longer necessary to calculate checksums
|
|
for unmodified packets.
|
|
WinDivert 1.4.1
|
|
- Dual license WinDivert under LGPLv3 and GPLv2.
|
|
WinDivert 1.4.2
|
|
- Add workaround for pseudo checksum issue (see #134).
|
|
WinDivert 1.4.3
|
|
- WinDivert.dll no longer depends on MSVCRT*.dll.
|
|
WinDivert 1.4.4
|
|
- Optimize pseudo checksum calculation.
|