Сделано это :-) В 2000 году моей первой программой для Windows был драйвер ловушки фильтра .
Что я сделал, так это реализовал драйвер перехватчика фильтров и написал приложение для пользовательского пространства, которое подготовило таблицу фильтров о том, что разрешать и что запрещать. Когда вы обойдете свой первоначальный набор синих экранов (см. Ниже мой совет по отладке в режиме ядра), драйвер режима фильтра довольно прост в использовании ... он передает каждый пакет функции, которую вы написали, и в зависимости от кода возврата удаляет его или пропускает.
Неудачные пакеты на этом уровне являются КВАДРАТНЫМИ необработанными, фрагменты не собираются заново, и это больше похоже на конец «сетевой карты» (но больше не заголовки Ethernet). Так что у вас будет довольно плохое время для декодирования пакетов для фильтрации с этим решением.
Также имеется драйвер перехвата брандмауэра, как описано в этой статье codeproject .
Если вы работаете в Vista или Server 2008, вам лучше взглянуть на WFP ( Windows Filtering Platform ), который, похоже, является обязательным API-интерфейсом для написания межсетевых экранов.
Я не знаю об этом, кроме Google, проверяющего это несколько минут назад, когда я гуглил для драйвера ловушки фильтра.
Обновление: забыл совет отладки:
Sysinternals DbgView показывает вывод DbgPrint в режиме ядра, и, что более важно, он также может читать их из файла дампа, который вы создали в последний синий экран. Так что посыпьте свой код dbgprint, и если он будет синего экрана, просто загрузите дамп в dbgview, чтобы посмотреть, что произошло до его смерти ... ОЧЕНЬ полезно. Используя это, я справился без отладчика ядра.