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.
