Модель ввода / вывода в Windows основана на стеке компонентов. Данные должны проходить через различные компоненты этого стека, который существует между физической сетевой картой и приложением, которое будет использовать данные. Иногда эти различные компоненты проверяют данные (например, пакет TCP), когда они проходят через стек, и на основе содержимого этого пакета данные могут быть изменены или пакет может быть полностью отброшен.
Это упрощенная модель «сетевого стека», через который проходят пакеты, чтобы попасть из приложения в проводную сеть и наоборот.
Одним из наиболее интересных компонентов, показанных на снимке экрана выше, является API-интерфейс WFP (Windows Filtering Platform). Если мы увеличим масштаб, это может выглядеть примерно так:
Разработчики могут свободно вставлять свои собственные модули в соответствующие места в этом стеке. Например, антивирусные продукты обычно используют «драйвер фильтра», который подключается к этой модели и проверяет сетевой трафик или предоставляет возможности брандмауэра. Служба брандмауэра Windows также явно вписывается в эту модель.
Если вы хотите написать приложение, которое записывает сетевой трафик, такой как Wireshark, то соответствующим способом будет использовать собственный драйвер и вставить его в стек как можно ниже, чтобы он мог обнаруживать сетевые пакеты. до того, как у вашего модуля брандмауэра есть шанс отбросить их.
Таким образом, есть много «драйверов», вовлеченных в этот процесс. Много разных типов драйверов тоже. Кроме того, другие формы ввода / вывода в системе, такие как чтение и запись на жестком диске, следуют очень похожим моделям.
Еще одно замечание - выноски WFP - не единственный способ проникнуть в сетевой стек. Например, WinPCap взаимодействует с NDIS напрямую с драйвером, что означает, что у него есть шанс перехватить трафик, прежде чем вообще будет выполнена фильтрация.
Драйверы NDIS
WinPCap
Ссылки:
Стек TCP / IP следующего поколения в Vista +
Архитектура платформы фильтрации Windows