Windivert64 sys что это
Windivert64 sys что это
WinDivertTool.exe is a simple program for:
WinDivertTool.exe is designed to work for any version of WinDivert.
WinDivert is an open source (LGPL) software package for capturing and modifying network packets for Windows. WinDivert was originally developed as part of the ReQrypt project for tunneling HTTP(S) traffic. Since then, WinDivert has used by many applications such as packet filtering, packet sniffing, firewalls, NATs, VPNs, tunneling applications, etc. Some projects that use WinDivert include:
Why is WinDivert on my system?
In this example, the WinDivertTool.exe output indicates that a program called tallow.exe (see the Tallow project) is using WinDivert. The WinDivertTool.exe also prints some additional technical information, including the process ID and hash, as well as the WinDivert version, filter string, layer, priority and flags.
How do I uninstall WinDivert?
The recommended method for uninstalling WinDivert is to uninstall whatever application is using it. In the example above, this can be achieved by uninstalling Tallow.
WinDivertTool.exe can also forcibly terminate all programs/applications using WinDivert and uninstall the WinDivert driver(s) from your system. This approach is not recommended and should only be used as a last resort. To forcibly uninstall WinDivert, run WinDivertTool.exe with the uninstall argument:
Note that this will not prevent the program/application from reinstalling WinDivert after WinDivertTool.exe has completed.
For security reasons, a program using WinDivert must have Administrator access rights, else the WinDivert driver will refuse to load/work. This policy mirrors similar policies for related tools on other platforms, such as divert sockets for MacOSX and netfilterqueue for Linux. Programs do not run as Administrator by default, and a program requesting Administrator rights will trigger a comfirmation via the UAC prompt.
Как скачать и исправить Windivert64.sys (3-х шаговое руководство)
Последнее обновление: 07/01/2021 [Необходимое время для чтения:
Файл windivert64.sys, также известный как файл WinDivert (web: http://reqrypt.org/windivert.html) (donate: 1C5vZVSbizPeZ8ydTYhUfm4LA2cNwBfcYh), был создан компанией Free Connected для разработки WinDivert driver. Файлы SYS относятся к категории типов файлов Win64 EXE (Драйвер).
Впервые windivert64.sys был представлен 01/31/2019 в составе Free Download Manager 5.1.38.7312 для Windows 10. Последней версией файла для X-VPN 50 является v1.1.8 built by: WinDDK, выпущенная 08/15/2019.
В этой статье приведены подробные сведения о windivert64.sys, руководство по устранению неполадок с файлом SYS и список версий, доступных для бесплатной загрузки.
Рекомендуемая загрузка: исправить ошибки реестра в WinThruster, связанные с windivert64.sys и (или) X-VPN.
Совместимость с Windows 10, 8, 7, Vista, XP и 2000
Средняя оценка пользователей
Обзор файла
Общие сведения ✻ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Имя файла: | windivert64.sys | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Расширение файла: | расширение SYS | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Описание: | WinDivert (web: http://reqrypt.org/windivert.html) (donate: 1C5vZVSbizPeZ8ydTYhUfm4LA2cNwBfcYh) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Тип объектного файла: | Driver | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Файловая операционная система: | Windows NT 32-bit | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Тип MIME: | application/octet-stream | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Пользовательский рейтинг популярности: |
Сведения о разработчике и ПО | |
---|---|
Разработчик ПО: | Basil |
Программа: | WinDivert driver |
Авторское право: | Copyright © Basil 2011-2015 |
Сведения о файле | |
---|---|
Набор символов: | Unicode |
Код языка: | English (U.S.) |
Флаги файлов: | Private build |
Маска флагов файлов: | 0x003f |
Точка входа: | 0x4e04 |
Размер кода: | 19456 |
Информация о файле | Описание |
---|---|
Размер файла: | 37 kB |
Дата и время изменения файла: | 2020:01:10 14:13:04+00:00 |
Тип файла: | Win64 EXE |
Тип MIME: | application/octet-stream |
Тип компьютера: | AMD AMD64 |
Метка времени: | 2015:07:28 13:55:14+00:00 |
Тип PE: | PE32+ |
Версия компоновщика: | 9.0 |
Размер кода: | 19456 |
Размер инициализированных данных: | 13312 |
Размер неинициализированных данных: | 0 |
Точка входа: | 0x4e04 |
Версия ОС: | 6.1 |
Версия образа: | 6.1 |
Версия подсистемы: | 6.1 |
Подсистема: | Native |
Номер версии файла: | 1.0.0.0 |
Номер версии продукта: | 1.0.0.0 |
Маска флагов файлов: | 0x003f |
Флаги файлов: | Private build |
Файловая ОС: | Windows NT 32-bit |
Тип объектного файла: | Driver |
Подтип файла: | 6 |
Код языка: | English (U.S.) |
Набор символов: | Unicode |
Наименование компании: | Basil |
Описание файла: | WinDivert (web: http://reqrypt.org/windivert.html) (donate: 1C5vZVSbizPeZ8ydTYhUfm4LA2cNwBfcYh) |
Версия файла: | 1.1.8 built by: WinDDK |
Внутреннее имя: | WinDivert.sys |
Авторское право: | Copyright © Basil 2011-2015 |
Название продукта: | WinDivert driver |
Версия продукта: | 1.1.8 |
✻ Фрагменты данных файлов предоставлены участником Exiftool (Phil Harvey) и распространяются под лицензией Perl Artistic.
Что такое сообщения об ошибках windivert64.sys?
Windivert64.sys — ошибки «синего экрана» (BSOD)
Существует ряд причин, по которым вы можете столкнуться с проблемами с windivert64.sys. Большинство проблем с файлами SYS связаны с ошибками «синего экрана» (BSOD). Эти типы ошибок windivert64.sys могут быть вызваны аппаратными проблемами, устаревшей прошивкой, поврежденными драйверами или другими проблемами, связанными с программным обеспечением (например, обновление X-VPN). В число этих ошибок входят:
Обнаружена проблема, в результате которой ОС Windows завершила работу, чтобы предотвратить повреждение компьютера. По всей видимости, причиной проблемы стал следующий файл: windivert64.sys.
🙁 На вашем ПК возникла проблема, которую не удалось устранить, и его необходимо перезагрузить. Сведения об ошибке можно найти в Интернете: [BSOD] (windivert64.sys).
STOP 0x0000001E: KMODE EXCEPTION NOT HANDLED (windivert64.sys)
STOP 0x00000050: PAGE FAULT IN A NONPAGED AREA (windivert64.sys)
STOP 0x0000007E: SYSTEM THREAD EXCEPTION NOT HANDLED (windivert64.sys)
STOP 0x0000000A: IRQL NOT LESS EQUAL (windivert64.sys)
STOP 0x0000003B: SYSTEM SERVICE EXCEPTION (windivert64.sys)
STOP 0×0000007A: KERNEL DATA INPAGE (windivert64.sys)
Крайне важно устранять ошибки «синего экрана»
В большинстве случаев ошибки BSOD windivert64.sys возникают после установки нового оборудования, программного обеспечения (X-VPN) или выполнения неудачного обновления Windows. В остальных случаях к ошибке «синего экрана» windivert64.sys может привести повреждение программного обеспечения, вызванное заражением вредоносным программным обеспечением. Таким образом, крайне важно, чтобы антивирус постоянно поддерживался в актуальном состоянии и регулярно проводил сканирование системы.
СОВЕТ ОТ СПЕЦИАЛИСТА: Как показывает опыт, целесообразно всегда создавать резервную копию системы Windows и (или) точку восстановления системы, прежде чем вносить какие-либо изменения в аппаратное или программное обеспечение на компьютере. Таким образом, в случае неблагоприятного поворота событий и возникновения связанной с файлом windivert64.sys ошибки «синего экрана» после недавних изменений можно восстановить систему в предыдущее состояние.
Как исправить ошибки windivert64.sys — 3-шаговое руководство (время выполнения:
Если вы столкнулись с одним из вышеуказанных сообщений об ошибке, выполните следующие действия по устранению неполадок, чтобы решить проблему windivert64.sys. Эти шаги по устранению неполадок перечислены в рекомендуемом порядке выполнения.
Шаг 1. Восстановите компьютер до последней точки восстановления, «моментального снимка» или образа резервной копии, которые предшествуют появлению ошибки.
Чтобы начать восстановление системы (Windows XP, Vista, 7, 8 и 10):
Если на этапе 1 не удается устранить ошибку windivert64.sys, перейдите к шагу 2 ниже.
Шаг 2. Если вы недавно установили приложение X-VPN (или схожее программное обеспечение), удалите его, затем попробуйте переустановить X-VPN.
Чтобы удалить программное обеспечение X-VPN, выполните следующие инструкции (Windows XP, Vista, 7, 8 и 10):
После полного удаления приложения следует перезагрузить ПК и заново установить X-VPN.
Если на этапе 2 также не удается устранить ошибку windivert64.sys, перейдите к шагу 3 ниже.
Шаг 3. Выполните обновление Windows.
Когда первые два шага не устранили проблему, целесообразно запустить Центр обновления Windows. Во многих случаях возникновение сообщений об ошибках windivert64.sys может быть вызвано устаревшей операционной системой Windows. Чтобы запустить Центр обновления Windows, выполните следующие простые шаги:
Если Центр обновления Windows не смог устранить сообщение об ошибке windivert64.sys, перейдите к следующему шагу. Обратите внимание, что этот последний шаг рекомендуется только для продвинутых пользователей ПК.
Если эти шаги не принесут результата: скачайте и замените файл windivert64.sys (внимание: для опытных пользователей)
Если этот последний шаг оказался безрезультативным и ошибка по-прежнему не устранена, единственно возможным вариантом остается выполнение чистой установки Windows 10.
СОВЕТ ОТ СПЕЦИАЛИСТА: Мы должны подчеркнуть, что переустановка Windows является достаточно длительной и сложной задачей для решения проблем, связанных с windivert64.sys. Во избежание потери данных следует убедиться, что перед началом процесса вы создали резервные копии всех важных документов, изображений, установщиков программного обеспечения и других персональных данных. Если вы в настоящее время не создаете резервных копий своих данных, вам необходимо сделать это немедленно.
Аппаратный мониторинг материнских плат. Программно-аппаратная реализация (часть 1)
Цель
Цель написания данной статьи – объяснить пользователю, что такое аппаратный мониторинг, как он реализован схемотехнически, а также научить пользователя навыкам самостоятельного измерения температур и напряжений, не прибегая к возможностям соответствующего диагностического программного обеспечения, типа HWINFO и AIDA64.
Объект исследования
реклама
Аппаратный мониторинг – набор программно-аппаратных средств для непрерывного измерения системных температур и напряжений различных узлов и компонентов в составе материнской платы – центрального процессора, чипсета, модулей памяти и т.д.
Для аппаратного мониторинга любая материнская плата оснащается микросхемой Super I/O Chip, называемой в народе «мультиконтроллер». Это многофункциональный многоцелевой контроллер ввода-вывода, совмещающий в себе как минимум блок аппаратного монитора, контроллер управления вентиляторами, контроллер интеллектуальной термозащиты, контроллер последовательных и параллельных портов, флоппи-диска, клавиатуры. Более новые модели микросхемы могут интегрировать в себе больший набор блоков и контроллеров, например, контроллер подачи и отключения питания. В рамках данной статьи ознакомимся только с блоком аппаратного монитора, называемым также контроллером окружения (Environment Controller – EC).
Согласно давней традиции все материнские платы компании Gigabyte Technology оснащаются «мультиконтроллерами» фирмы ITE. Разнообразие модельного ряда микросхем ITE обширно. Однако число контактов (Voltage Inputs или сокращённо – VIN-линии), которые задействованы для отслеживания EC-контроллером входных напряжений, уже долгое время остаётся неизменным и ограничен количеством 8 штук. Понятно, что с таким ограниченным набором все системные напряжения отслеживать невозможно. Поэтому для обеспечения мониторинга других системных напряжений, как правило аналоговых, в дополнение к основному «мультиконтроллеру» материнскую плату оснащают микросхемой с содействующей функциональностью, например, ITE IT8792E. То же самое касается и системных температур. Если старый модельный ряд микросхем, вроде IT8705E (модель 2003 г.), ограничивался считыванием температур только из трёх источников, то более современные микросхемы, например, IT8686E (модель 2016 г.) имеют шесть температурных TEMP-линий. Наличие дополнительного контроллера IT8792E на материнской плате за счёт наличия трёх TEMP-линий расширяет мониторинг системных температур до девяти.
Каждый пользователь хотя бы раз проявлял любопытство в отношении того, какие температуры и напряжения отслеживаются в соответствующем разделе графической оболочки BIOS Setup Utility. Как раз-таки BIOS визуализирует показания, считываемые из основного и дополнительного EC-контроллеров. Но зачастую, этот набор неполный. Например, в BIOS многих современных материнских плат не отображаются показания напряжения элемента питания (VBAT-напряжение), непрерывно поддерживающего системные часы и CMOS с настройками BIOS. В таких случаях приходится прибегать к фирменному программному обеспечению либо сторонних разработчиков, типа HWINFO или AIDA64. Но и здесь зачастую царит неразбериха. Набор температур и напряжений, а также их показания в обоих программах может разниться. Единственным решением этой проблемы является изучение схемотехнической документации на конкретную модель материнской платы.
реклама
Получить доступ к чертежам и схемам, как и любой другой конструкторской документации материнских плат, нелегко. Являясь конфиденциальной информацией, она не размещается в открытом доступе. Однако в Интернете существует достаточно русскоязычных сайтов, где её можно взять бесплатно либо за символическую оплату. Но, как правило, там размещена документация для не столь современных моделей материнских плат. Мне, например, удалось приобрести архив со схемотехникой в формате pdf для 800 моделей материнских плат Gigabyte у тайского продавца. Для примера обратимся к такой документации на материнскую плату Gigabyte GA-AX370 Gaming 5.
Как видим на схеме выше (Рис.3) данная материнская плата оснащена «мультиконтроллером» ITE IT8686E. Контакты с номерами 121–127 задействованы под VIN-линии для считывания напряжений, а контакты 117–119 (TEMP-линии) подключены к источникам температурного измерения – термисторам и термодиодам. Определить, для каких напряжений задействованы VIN-линии на данной схеме затруднительно, т.к. они обозначены меткой общего вида – VIN0, VIN1, VIN5 и т.д. Но для температурных линий есть подсказка – CPU_TEMP, PM_TEMP и SYS_TEMP. В этом случае за разъяснениями обращаемся к другой схеме документации.
Как видно на схеме (Рис.4), по линии VIN4 отслеживается напряжение VCore SOC (напряжение «северного моста»), по линии VIN0 – VCore (напряжение на ядре процессора), VIN6 – VDDQ (напряжение на модулях памяти), VIN1 – VCC3 (+3,3 В), VIN3 – VCC (+5 В), VIN2 – +12V, VIN5 – A_VDDP. Что касается температурных линий, то согласно схеме (Рис.5) здесь всё интуитивно понятно. По лини CPU_TEMP EC-контроллер считывает температуру с термодиода, интегрированного в ядро центрального процессора. По линии SYS_TEMP считывается температура окружающей среды в системном блоке, показания которой обеспечивает наружный термистор, размещённый на материнской плате. Линия PM_TEMP связывает интегрированный в чипсет (микросхема «южного моста») термодиод и EC-контроллер.
Теперь проанализируем, какие входные напряжения и температуры отслеживает дополнительный контроллер аппаратного монитора IT8792E.
реклама
Как видим на схеме (Рис. 6), здесь задействованы группа из шести VIN-линий VINA0–VINA5 (контакты 49–54) и группа из трёх температурных линий – EC_TEMP1, EC_TEMP2 и EC_TEMP3 (контакты 44–46). Предназначение VIN-линий определяется схемой ниже (Рис. 7).
Что касается температурных линий, то здесь (Рис. 8.) схемотехническая документация содержит подсказку лишь для входов EC_TEMP2 и EC_TEMP3. Первый из них подключен к наружному термистору, расположенному возле одного из гнезд PCIE x16. Второй вход, по аналогии с линией SYS_TEMP «мультиконтроллера», связан с наружным термистором материнской платы, измеряющим температуру окружающего воздуха. Также установлено, что линия EC_TEMP1 отслеживает температуру возле одного из гнёзд PCIE 8x.
Вывод
Таким образом, анализ схемотехнической документации в части аппаратной реализации мониторинга температур и напряжений позволяет сделать вывод о том, что материнская плата Gigabyte GA-AX370 Gaming 5 в этом плане крайне функциональна. Аппаратно предусмотрено считывание показаний из 13 источников системных напряжений и 6 температур. Но и это не всё. Любопытный читатель наверняка обратил внимание на приведённые выше общие схемы двух контроллеров ( Рис. 3 и Рис. 6) и обнаружил, что обе микросхемы также подключаются к источникам «классических» напряжений – VBAT, 3VSB и VCC3 (AVCC3), а значит показания этих напряжений предположительно можно отслеживать. Изучение фирменного программного обеспечения Gigabyte и графической оболочки BIOS Setup Utility подтвердило наличие мониторинга «мультиконтроллером» ещё трёх температур – PCIE 16x, VRM и SOC MOSFET.
Во второй части статьи буден дано подробное разъяснение, как при помощи универсального и известного всем программного обеспечения считывать регистры аппаратного монитора, создавать простейшие формулы для преобразования целочисленных значений регистров в показания системных напряжений.
WinDivert 2.2: Windows Packet Divert
Table of Contents
1. Introduction
WinDivert is a powerful user-mode capture/sniffing/modification/blocking/re-injection package for Windows 7, Windows 8 and Windows 10. WinDivert can be used to implement user-mode packet filters, packet sniffers, firewalls, NAT, VPNs, tunneling applications, etc., without the need to write kernel-mode code.
The main features of the WinDivert are:
WinDivert provides similar functionality to divert sockets from FreeBSD/MacOS, NETLINK sockets from Linux.
2. Building
Note that pre-built WinDivert binary distributions are available from the WinDivert website. Most users do not need to build their own version of WinDivert from source.
The source code for WinDivert is available for download at:
To build the WinDivert drivers from source:
To build the WinDivert user-mode library ( WinDivert.dll ) and sample programs:
The generated WinDivert.dll / WinDivert.lib files should be compatible with all major compilers, including both MinGW and Visual Studio.
2.1 Driver Signing
If you built your own WinDivert32.sys / WinDivert64.sys drivers, they must be digitally signed before they can be used. See Driver Signing Requirements for Windows for more information.
Note that the pre-built WinDivert32.sys / WinDivert64.sys drivers from the official WinDivert distribution are already digitally signed.
3. Installing
WinDivert does not require any special installation. Depending on your target configuration, simply place the following files in your application’s home directory:
4. Uninstalling
Alternatively, the WinDivert driver can be removed by using the windivertctl.exe sample program by issuing the following command:
5. Programming API
5.1 WINDIVERT_LAYER
WinDivert supports several layers for diverting or capturing network packets/events. Each layer has its own capabilities, such as the ability to block events or to inject new events, etc. The list of supported WinDivert layers is summarized below:
Layer | Capability | Description | |||
---|---|---|---|---|---|
Block? | Inject? | Data? | PID? | ||
WINDIVERT_LAYER_NETWORK | ✔ | ✔ | ✔ | Network packets to/from the local machine. | |
WINDIVERT_LAYER_NETWORK_FORWARD | ✔ | ✔ | ✔ | Network packets passing through the local machine. | |
WINDIVERT_LAYER_FLOW | ✔ | Network flow established/deleted events. | |||
WINDIVERT_LAYER_SOCKET | ✔ | ✔ | Socket operation events. | ||
WINDIVERT_LAYER_REFLECT | ✔ | ✔ | WinDivert handle events. |
Here, the layer capabilities are:
The WINDIVERT_LAYER_NETWORK and WINDIVERT_LAYER_NETWORK_FORWARD layers allow the user application to capture/block/inject network packets passing to/from (and through) the local machine. Due to technical limitations, process ID information is not available at these layers.
The WINDIVERT_LAYER_FLOW layer captures information about network flow establishment/deletion events. Here, a flow represents either (1) a TCP connection, or (2) an implicit flow created by the first sent/received packet for non-TCP traffic, e.g., UDP. Old flows are deleted when the corresponding connection is closed (for TCP), or based on an activity timeout (non-TCP). Flow-related events can be captured, but not blocked nor injected. Process ID information is also available at this layer. Due to technical limitations, the WINDIVERT_LAYER_FLOW layer cannot capture flow events that occurred before the handle was opened.
5.2 WINDIVERT_EVENT
Each layer supports one or more events summarized below:
WINDIVERT_LAYER_NETWORK and WINDIVERT_LAYER_NETWORK_FORWARD : Only a single event is supported:
Event | Description |
---|---|
WINDIVERT_EVENT_NETWORK_PACKET | A new network packet. |
WINDIVERT_LAYER_FLOW : Two events are supported:
Event | Description |
---|---|
WINDIVERT_EVENT_FLOW_ESTABLISHED | A new flow is created. |
WINDIVERT_EVENT_FLOW_DELETED | An old flow is deleted. |
WINDIVERT_LAYER_SOCKET : The following events are supported:
Event | Description |
---|---|
WINDIVERT_EVENT_SOCKET_BIND | A bind() operation. |
WINDIVERT_EVENT_SOCKET_CONNECT | A connect() operation. |
WINDIVERT_EVENT_SOCKET_LISTEN | A listen() operation. |
WINDIVERT_EVENT_SOCKET_ACCEPT | An accept() operation. |
WINDIVERT_EVENT_SOCKET_CLOSE | A socket endpoint is closed. This corresponds to a previous binding being released, or an established connection being terminated. The event cannot be blocked. |
WINDIVERT_LAYER_REFLECT : Two events are supported:
Event | Description |
---|---|
WINDIVERT_EVENT_REFLECT_OPEN | A new WinDivert handle was opened. |
WINDIVERT_EVENT_REFLECT_CLOSE | An old WinDivert handle was closed. |
5.3 WINDIVERT_ADDRESS
Remarks
The WINDIVERT_ADDRESS structure represents the «address» of a captured or injected packet. The address includes the packet’s timestamp, layer, event, flags, and layer-specific data. All fields are set by WinDivertRecv() when the packet/event is captured. Only some fields are used by WinDivertSend() when a packet is injected.
The Event indicates the layer-specific event ( WINDIVERT_EVENT_* ) that was captured.
The Outbound flag is set for outbound packets/events, and is cleared for inbound or direction-less packets/events.
The Loopback flag is set for loopback packets. Note that Windows considers any packet originating from, and destined to, the current machine to be a loopback packet, so loopback packets are not limited to localhost addresses. Note that WinDivert considers loopback packets to be outbound only, and will not capture loopback packets on the inbound path.
The IPv6 flag is set for IPv6 packets/events, and cleared for IPv4 packets/events.
The *Checksum flags indicate whether the packet has valid checksums or not. When IP/TCP/UDP checksum offloading is enabled, it is possible that captured packets do not have valid checksums. Invalid checksums may be arbitrary values.
The Network.* fields are only valid at the WINDIVERT_LAYER_NETWORK and WINDIVERT_LAYER_NETWORK_FORWARD layers. The Network.IfIdx / Network.SubIfIdx indicate the packet’s network adapter (a.k.a. interface) index. These values are ignored for outbound packets.
5.4 WinDivertOpen
Return Value
A valid WinDivert handle on success, or INVALID_HANDLE_VALUE if an error occurred. Use GetLastError() to get the reason for the error. Common errors include:
A typical application is only interested in a subset of all network traffic or events. In this case the filter should match as closely as possible to the subset of interest. This avoids unnecessary overheads introduced by diverting packets to the user-mode application. See the filter language section for more information.
The layer of the WinDivert handle is determined by the layer parameter. See WINDIVERT_LAYER for more information. Currently the following layers are supported:
Layer | Description |
---|---|
WINDIVERT_LAYER_NETWORK = 0 | Network packets to/from the local machine. This is the default layer. |
WINDIVERT_LAYER_NETWORK_FORWARD | Network packets passing through the local machine. |
WINDIVERT_LAYER_FLOW | Network flow established/deleted events. |
WINDIVERT_LAYER_SOCKET | Socket operation events. |
WINDIVERT_LAYER_REFLECT | WinDivert handle events. |
Different WinDivert handles can be assigned different priorities by the priority parameter. Packets are diverted to higher priority handles before lower priority handles. Packets injected by a handle are then diverted to the next priority handle, and so on, provided the packet matches the handle’s filter. A packet is only diverted once per priority level, so handles should not share priority levels unless they use mutually exclusive filters. Otherwise it is not defined which handle will receive the packet first. Higher priority values represent higher priorities, with WINDIVERT_PRIORITY_HIGHEST being the highest priority, 0 the middle (and a good default) priority, and WINDIVERT_PRIORITY_LOWEST the lowest priority.
Different flags affect how the opened handle behaves. The following flags are supported:
Note that any combination of (WINDIVERT_FLAG_SNIFF | WINDIVERT_FLAG_DROP) or (WINDIVERT_FLAG_RECV_ONLY | WINDIVERT_FLAG_SEND_ONLY) are considered invalid.
Some layers have mandatory flags, as listed below:
Layer | Required Flags |
---|---|
WINDIVERT_LAYER_FLOW | WINDIVERT_FLAG_SNIFF | WINDIVERT_FLAG_RECV_ONLY |
WINDIVERT_LAYER_SOCKET | WINDIVERT_FLAG_RECV_ONLY |
WINDIVERT_LAYER_REFLECT | WINDIVERT_FLAG_SNIFF | WINDIVERT_FLAG_RECV_ONLY |
5.5 WinDivertRecv
Return Value
TRUE if a packet/event was successfully received, or FALSE if an error occurred. Use GetLastError() to get the reason for the error.
Common errors include:
Name | Code | Description |
---|---|---|
ERROR_INSUFFICIENT_BUFFER | 122 | The captured packet is larger than the pPacket buffer. |
ERROR_NO_DATA | 232 | The handle has been shutdown using WinDivertShutdown() and the packet queue is empty. |
Only some layers can capture packets/data, as summarized below:
Layer | Data? | Description |
---|---|---|
WINDIVERT_LAYER_NETWORK | ✔ | Network packet. |
WINDIVERT_LAYER_NETWORK_FORWARD | ✔ | Network packet. |
WINDIVERT_LAYER_FLOW | — | |
WINDIVERT_LAYER_SOCKET | — | |
WINDIVERT_LAYER_REFLECT | ✔ | Filter object. |
Captured packets are guaranteed to have correct checksums or have the corresponding *Checksum flag unset (see WINDIVERT_ADDRESS ).
WinDivertRecv() should not be used on any WinDivert handle created with the WINDIVERT_FLAG_DROP set.
5.6 WinDivertRecvEx
Return Value
TRUE if a packet was successfully received, or FALSE otherwise. Use GetLastError() to get the reason. The error code ERROR_IO_PENDING indicates that the overlapped operation has been successfully initiated and that completion will be indicated at a later time. All other codes indicate an error.
Remarks
This function is equivalent to WinDivertRecv() except:
Batched I/O makes it possible to receive up to WINDIVERT_BATCH_MAX packets at once using a single operation, reducing the number of kernel/user-mode context switches and improving performance. To enable batched I/O:
5.7 WinDivertSend
Return Value
TRUE if a packet was successfully injected, or FALSE if an error occurred. Use GetLastError() to get the reason for the error.
Common errors include:
Name | Code | Description |
---|---|---|
ERROR_HOST_UNREACHABLE | 1232 | This error occurs when an impostor packet (with pAddr->Impostor set to 1 ) is injected and the ip.TTL or ipv6.HopLimit field goes to zero. This is a defense of last resort against infinite loops caused by impostor packets. |
Only the WINDIVERT_LAYER_NETWORK and WINDIVERT_LAYER_NETWORK_FORWARD layers support packet injection, as summarized below:
Layer | Inject? |
---|---|
WINDIVERT_LAYER_NETWORK | ✔ |
WINDIVERT_LAYER_NETWORK_FORWARD | ✔ |
WINDIVERT_LAYER_FLOW | |
WINDIVERT_LAYER_SOCKET | |
WINDIVERT_LAYER_REFLECT |
For packets injected into the inbound path, the pAddr->Network.IfIdx and pAddr->Network.SubIfIdx fields are assumed to contain valid interface numbers. These may be retrieved from WinDivertRecv() (for packet modification), or from the IP Helper API.
For outbound injected packets, the IfIdx and SubIfIdx fields are currently ignored and may be arbitrary values. Injecting an inbound packet on the outbound path may work (for some types of packets), however this should be considered «undocumented» behavior, and may be changed in the future.
Injected packets must have the correct checksums or have the corresponding pAddr->*Checksum flag unset. A packet/address pair captured by WinDivertRecv() is guaranteed to satisfy this condition, so can be reinjected unmodified without recalculating checksums. Otherwise, if a modification is necessary, checksums can be recalculated using the WinDivertHelperCalcChecksums() function.
5.8 WinDivertSendEx
Return Value
TRUE if a packet was successfully injected, or FALSE otherwise. Use GetLastError() to get the reason. The error code ERROR_IO_PENDING indicates that the overlapped operation has been successfully initiated and that completion will be indicated at a later time. All other codes indicate an error.
Remarks
This function is equivalent to WinDivertSend() except:
Batched I/O makes it possible to send up to WINDIVERT_BATCH_MAX packets at once using a single operation, reducing the number of kernel/user-mode context switches and improving performance. To use batched I/O:
5.9 WinDivertShutdown
Return Value
TRUE if successful, FALSE if an error occurred. Use GetLastError() to get the reason for the error.
Remarks
This operation causes all or part of a WinDivert handle to be shut down. The possible values for how are:
5.10 WinDivertClose
Return Value
TRUE if successful, FALSE if an error occurred. Use GetLastError() to get the reason for the error.
5.11 WinDivertSetParam
Return Value
TRUE if successful, FALSE if an error occurred. Use GetLastError() to get the reason for the error.
Remarks
Sets a WinDivert parameter. Currently, the following WinDivert parameters are defined.
5.12 WinDivertGetParam
Return Value
TRUE if successful, FALSE if an error occurred. Use GetLastError() to get the reason for the error.
Parameter | Description |
---|---|
WINDIVERT_PARAM_VERSION_MAJOR | Returns the major version of the driver. |
WINDIVERT_PARAM_VERSION_MINOR | Returns the minor version of the driver. |
6. Helper Programming API
6.1 WINDIVERT_IPHDR
Fields
See here for more information.
Remarks
IPv4 header definition.
The following fields can only be get/set using the following macro definitions:
6.2 WINDIVERT_IPV6HDR
Fields
See here for more information.
Remarks
IPv6 header definition.
The following fields can only be get/set using the following macro definitions:
6.3 WINDIVERT_ICMPHDR
Fields
See here for more information.
Remarks
ICMP header definition.
6.4 WINDIVERT_ICMPV6HDR
Fields
See here for more information.
Remarks
ICMPv6 header definition.
6.5 WINDIVERT_TCPHDR
Fields
See here for more information.
Remarks
TCP header definition.
6.6 WINDIVERT_UDPHDR
Fields
See here for more information.
Remarks
UDP header definition.
6.7 WinDivertHelperParsePacket
Return Value
TRUE if successful, FALSE if an error occurred.
Remarks
Parses a raw packet or batch of packets (e.g. from WinDivertRecv() ) into the various packet headers and/or payloads that may or may not be present.
This function does not do any verification of the header/payload contents beyond checking the header length and any other minimal information required for parsing. This function will always succeed provided the pPacket buffer contains at least one IPv4 or IPv6 header and the packetLen is correct.
6.8 WinDivertHelperHashPacket
Return Value
A 64bit hash value.
Remarks
Calculates a 64bit hash value of the given packet. Note that the hash function depends on the packet’s IP and transport headers only, and not the payload of the packet. That said, a weak dependency on the payload will exist if the TCP/UDP checksums are valid. The hash function itself is based on the xxHash algorithm and is not cryptographic.
The optional seed value is also incorporated into the hash.
6.9 WinDivertHelperParseIPv4Address
Return Value
TRUE if successful, FALSE if an error occurred. Use GetLastError() to get the reason for the error.
6.10 WinDivertHelperParseIPv6Address
Return Value
TRUE if successful, FALSE if an error occurred. Use GetLastError() to get the reason for the error.
6.11 WinDivertHelperParseIPv4Address
Return Value
TRUE if successful, FALSE if an error occurred. Use GetLastError() to get the reason for the error.
Remarks
Convert an IPv4 address into a string.
6.12 WinDivertHelperParseIPv6Address
Return Value
TRUE if successful, FALSE if an error occurred. Use GetLastError() to get the reason for the error.
Remarks
Convert an IPv6 address into a string.
6.13 WinDivertHelperCalcChecksums
Return Value
TRUE if successful, FALSE if an error occurred.
By default this function will calculate each checksum from scratch, even if the existing checksum is correct. This may be inefficient for some applications. For better performance, incremental checksum calculations should be used instead (not provided by this API).
6.14 WinDivertHelperDecrementTTL
For IPv4, this function will preserve the validity of the IPv4 checksum. That is, if the packet had a valid checksum before the operation, the resulting checksum will also be valid after the operation. This function updates the checksum field incrementally.
6.15 WinDivertHelperCompileFilter
Return Value
TRUE if the packet filter compilation is successful, FALSE otherwise.
The compilation operation will succeed if the given filter string is valid with respect to the filter language. Otherwise, if the filter is invalid, then a human readable description of the error is returned by errorStr (if non- NULL ), and the error’s position is returned by errorPos (if non- NULL ).
Note that all strings returned through errorStr are global static objects, and therefore do not need to be deallocated.
6.16 WinDivertHelperEvalFilter
Return Value
TRUE if the packet matches the filter string, FALSE otherwise.
Remarks
Evaluates the given packet against the given packet filter string. This function returns TRUE if the packet matches, and returns FALSE otherwise.
Note that this function is relatively slow since the packet filter string will be (re)compiled for each call. This overhead can be minimized by pre-compiling the filter string into the object representation using the WinDivertHelperCompileFilter() function.
6.17 WinDivertHelperFormatFilter
Return Value
TRUE if successful, FALSE if an error occurred. Use GetLastError() to get the reason for the error.
6.18 WinDivertHelperNtoh*
Return Value
The output value in host byte order.
Remarks
Converts a value/IPv6-address from network to host byte-order.
6.19 WinDivertHelperHton*
Return Value
The output value in network byte order.
Remarks
Converts a value/IPv6-address from host to network byte-order.
7. Filter Language
The WinDivertOpen() function accepts a string containing a filter. Only packets/events that match the filter will be blocked and/or captured. All other non-matching packets/events will be allowed to continue as normal.
The filter allows an application to select only a subset traffic that is of interest. For example, a HTTP blacklist filter is only interested in packets that might contain URLs. This could be achieved using the following filter.
This filter selects only the subset of all traffic that is:
A filter is a Boolean expression of the form:
A test is of the following form:
where op is one of the following:
Operator | Description |
---|---|
== or = | Equal |
!= | Not equal |
Less-than | |
> | Greater-than |
Less-than-or-equal | |
>= | Greater-than-or-equal |
Finally, a field is some layer-specific property matching the packet or event. The possible fields are:
Field | Layer | Description | ||||
---|---|---|---|---|---|---|
NETWORK | FORWARD | FLOW | SOCKET | REFLECT | ||
zero | ✔ | ✔ | ✔ | ✔ | ✔ | The value zero |
timestamp | ✔ | ✔ | ✔ | ✔ | ✔ | The packet/event timestamp |
event | ✔ | ✔ | ✔ | ✔ | ✔ | The event |
outbound | ✔ | ✔ | Is outbound? | |||
inbound | ✔ | ✔ | Is inbound? | |||
ifIdx | ✔ | ✔ | Interface index | |||
subIfIdx | ✔ | ✔ | Sub-interface index | |||
loopback | ✔ | ✔ | ✔ | Is loopback packet? | ||
impostor | ✔ | ✔ | Is impostor packet? | |||
fragment | ✔ | ✔ | Is IP fragment packet? | |||
endpointId | ✔ | ✔ | Endpoint ID | |||
parentEndpointId | ✔ | ✔ | Parent endpoint ID | |||
processId | ✔ | ✔ | ✔ | Process ID | ||
random8 | ✔ | ✔ | 8-bit random number | |||
random16 | ✔ | ✔ | 16-bit random number | |||
random32 | ✔ | ✔ | 32-bit random number | |||
layer | ✔ | The handle’s layer | ||||
priority | ✔ | The handle’s priority | ||||
packet[i] | ✔ | ✔ | The i th 8-bit word of the packet | |||
packet16[i] | ✔ | ✔ | The i th 16-bit word of the packet | |||
packet32[i] | ✔ | ✔ | The i th 32-bit word of the packet | |||
length | ✔ | ✔ | The packet length | |||
ip | ✔ | ✔ | ✔ | ✔ | Is IPv4? | |
ipv6 | ✔ | ✔ | ✔ | ✔ | Is IPv6? | |
icmp | ✔ | ✔ | ✔ | ✔ | Is ICMP? | |
icmpv6 | ✔ | ✔ | ✔ | ✔ | Is ICMPv6? | |
tcp | ✔ | ✔ | ✔ | ✔ | Is TCP? | |
udp | ✔ | ✔ | ✔ | ✔ | Is UDP? | |
protocol | ✔ | ✔ | ✔ | The protocol | ||
localAddr | ✔ | ✔ | ✔ | The local address | ||
localPort | ✔ | ✔ | ✔ | The local port | ||
remoteAddr | ✔ | ✔ | ✔ | The remote address | ||
remotePort | ✔ | ✔ | ✔ | The remote port | ||
ip.* | ✔ | ✔ | IPv4 fields (see WINDIVERT_IPHDR ) | |||
ipv6.* | ✔ | ✔ | IPv6 fields (see WINDIVERT_IPV6HDR ) | |||
icmp.* | ✔ | ✔ | ICMP fields (see WINDIVERT_ICMPHDR ) | |||
icmpv6.* | ✔ | ✔ | ICMPV6 fields (see WINDIVERT_ICMPV6HDR ) | |||
tcp.* | ✔ | ✔ | TCP fields (see WINDIVERT_TCPHDR ) | |||
tcp.PayloadLength | ✔ | ✔ | The TCP payload length | |||
tcp.Payload[i] | ✔ | ✔ | The i th 8-bit word of the TCP payload | |||
tcp.Payload16[i] | ✔ | ✔ | The i th 16-bit word of the TCP payload | |||
tcp.Payload32[i] | ✔ | ✔ | The i th 32-bit word of the TCP payload | |||
udp.* | ✔ | ✔ | UDP fields (see WINDIVERT_UDPHDR ) | |||
udp.PayloadLength | ✔ | ✔ | The UDP payload length | |||
udp.Payload[i] | ✔ | ✔ | The i th 8-bit word of the UDP payload | |||
udp.Payload16[i] | ✔ | ✔ | The i th 16-bit word of the UDP payload | |||
udp.Payload32[i] | ✔ | ✔ | The i th 32-bit word of the UDP payload |
A test will also fails if the field is not relevant. For example, the test tcp.DstPort == 80 will fail if the packet does not contain a TCP header.
The processId field matches the ID of the process associated to an event. Due to technical limitations, this field is not supported by the WINDIVERT_LAYER_NETWORK* layers. That said, it is usually possible to associate process IDs to network packets matching the same network 5-tuple. Note that a fundamental race condition exists between the processId and the termination of the corresponding process, see the know issues listed below.
These fields can be used to match filters against the contents of packets/payloads in addition to address/header information. Words are assumed to be in network-byte ordering. If the index is out-of-bounds then the corresponding test is deemed to have failed.
The random* fields are not really random but use a deterministic hash value calculated using the WinDivertHelperHashPacket() function.
Macro | Layer | Value | ||||
---|---|---|---|---|---|---|
NETWORK | FORWARD | FLOW | SOCKET | REFLECT | ||
TRUE | ✔ | ✔ | ✔ | ✔ | ✔ | 1 |
FALSE | ✔ | ✔ | ✔ | ✔ | ✔ | 0 |
TCP | ✔ | ✔ | ✔ | ✔ | ✔ | IPPROTO_TCP ( 6 ) |
UDP | ✔ | ✔ | ✔ | ✔ | ✔ | IPPROTO_UDP ( 17 ) |
ICMP | ✔ | ✔ | ✔ | ✔ | ✔ | IPPROTO_ICMP ( 1 ) |
ICMPV6 | ✔ | ✔ | ✔ | ✔ | ✔ | IPPROTO_ICMPV6 ( 58 ) |
PACKET | ✔ | ✔ | WINDIVERT_EVENT_NETWORK_PACKET | |||
ESTABLISHED | ✔ | WINDIVERT_EVENT_FLOW_ESTABLISHED | ||||
DELETED | ✔ | WINDIVERT_EVENT_FLOW_DELETED | ||||
BIND | ✔ | WINDIVERT_EVENT_SOCKET_BIND | ||||
CONNECT | ✔ | WINDIVERT_EVENT_SOCKET_CONNECT | ||||
ACCEPT | ✔ | WINDIVERT_EVENT_SOCKET_ACCEPT | ||||
LISTEN | ✔ | WINDIVERT_EVENT_SOCKET_LISTEN | ||||
OPEN | ✔ | WINDIVERT_EVENT_REFLECT_OPEN | ||||
CLOSE | ✔ | ✔ | WINDIVERT_EVENT_SOCKET_CLOSE for the SOCKET layer, or WINDIVERT_EVENT_REFLECT_CLOSE for the REFLECT layer. | |||
NETWORK | ✔ | WINDIVERT_LAYER_NETWORK | ||||
NETWORK_FORWARD | ✔ | WINDIVERT_LAYER_NETWORK_FORWARD | ||||
FLOW | ✔ | WINDIVERT_LAYER_FLOW | ||||
SOCKET | ✔ | WINDIVERT_LAYER_SOCKET | ||||
REFLECT | ✔ | WINDIVERT_LAYER_REFLECT |
7.1 Filter Examples
7.2 Filter Usage
The purpose of the filter is to help applications select the subset of all network traffic that the application is interested in. Ideally the filter should be
For some applications these two objectives can conflict. That is, a selective filter is not short, and a short filter is not selective. For such applications the developer should experiment with different filter configurations and carefully measure the performance impact to find the optimal solution.
8. Performance
Using WinDivert to redirect network traffic to/from a user application incurs performance overheads, such as copying packet data and user/kernel mode context switching. Under heavy load (≥1Gbps) these overheads can be significant. The following techniques can be used to reduce overheads (in order of importance):
The passthru.exe sample program can be used to experiment with different batch sizes and thread counts.
9. Samples
Some samples have been provided to demonstrate the WinDivert API. The sample programs are:
The samples are intended for educational purposes only, and are not fully-featured applications.
The following basic template for a WinDivert application using the WINDIVERT_LAYER_NETWORK layer. The basic idea is to open a WinDivert handle, then enter a capture-modify-reinject loop:
10. Known Issues
WinDivert has some known limitations listed below:
11. License
WinDivert is dual-licensed under your choice of either the GNU Lesser General Public License (LGPL) Version 3 or the GNU General Public License (GPL) Version 2. Please see the notices below:
- Ttl выход что это
- чери бонус масляный фильтр манн фильтр