forked from basil00/WinDivert
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG
123 lines (123 loc) · 6.23 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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.