Udostępnij przez


Zagadnienia dotyczące programowania sterowników wywołań

Podczas programowania sterownika callout dla platformy filtrowania systemu Windows należy wziąć pod uwagę następujące tematy.

tryb użytkownika vs. tryb jądra

Jeśli żądane filtrowanie można wykonać przy użyciu standardowej funkcji filtrowania wbudowanej w platformę filtrowania systemu Windows, niezależni dostawcy oprogramowania (ISV) powinni pisać aplikacje zarządzające w trybie użytkownika w celu skonfigurowania silnika filtrowania zamiast pisać sterowniki wywołań trybu jądra. Sterownik wywołania trybu jądra powinien być pisany tylko wtedy, gdy trzeba przetworzyć dane sieciowe w sposób, który nie może być obsługiwany przez standardową, wbudowaną funkcjonalność filtrowania. Aby uzyskać informacje o sposobie pisania aplikacji do zarządzania platformą filtrowania systemu Windows w trybie użytkownika, zobacz dokumentację platformy filtrowania systemu Windows Windows w zestawie Microsoft Windows SDK.

Wybór warstwy filtrowania

Sterownik wywołania powinien filtrować dane sieciowe na najwyższej możliwej warstwie filtrowania w stosie sieciowym. Jeśli na przykład żądane zadanie filtrowania można obsłużyć w warstwie strumienia, nie powinno być implementowane w warstwie sieciowej. Aby uzyskać więcej informacji na temat zaleceń dotyczących warstw filtrowania, których sterownik powinien użyć do zagwarantowania zgodności z IPsec w systemie Windows, zobacz Tworzenie sterowników wywołań IPsec-Compatible.

blokowanie w egzekwowaniu warstwy aplikacji (ALE) ustanowione przepływy w warstwach

Zwykle, jeśli objaśnienie zostało dodane do aparatu filtru w jednym z przepływów ALE ustanowionych warstw filtrowania (FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 lub FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6), jej klasyfikowaćFn funkcji objaśnienia nigdy nie powinna zwracać FWP_ACTION_BLOCK dla akcji. Decyzja o autoryzowaniu lub odrzuceniu połączenia nie powinna być podjęta w jednej z warstw filtrowania ustanowionych przez przepływ ALE. Taka decyzja powinna być zawsze podjęta w jednej z pozostałych warstw filtrowania ALE.

Jedyną prawidłową przyczyną takiego klasyfikowania Fn funkcji odwoławczej, aby zwrócić FWP_ACTION_BLOCK jako reakcja, jest wystąpienie błędu, który może stanowić potencjalne zagrożenie bezpieczeństwa, jeśli nawiązane połączenie nie zostanie przerwane. W takim przypadku zwracanie FWP_ACTION_BLOCK dla akcji powoduje zamknięcie połączenia, aby zapobiec wykorzystaniu potencjalnego zagrożenia bezpieczeństwa.

Czas wykonywania funkcji wywołania

Ponieważ silnik filtra zwykle wywołuje funkcje wywołania przy poziomie IRQL = DISPATCH_LEVEL, upewnij się, że te funkcje kończą swoje wykonanie tak szybko, jak to możliwe, aby zapewnić sprawne działanie systemu. Przedłużone wykonywanie przy IRQL = DISPATCH_LEVEL może negatywnie wpłynąć na ogólną wydajność systemu.

Wstrzykiwanie do ścieżki danych przychodzących

Objaśnienie powinno zostać ponownie obliczone sumy kontrolne IP przed wywołaniem funkcji wstrzykiwania pakietów, które wstrzykiwają do ścieżki danych odbierania, ponieważ suma kontrolna w oryginalnym pakiecie może nie być poprawna, gdy pakiet zostanie ponownie rozsyłany z fragmentów pakietów IP. Nie ma niezawodnego mechanizmu, który wskazuje, czy lista buforów sieciowych jest zrekonstruowana z fragmentów.

Wbudowane wstrzyknięcie pakietu TCP z warstwy transportowej

Ze względu na zachowanie blokowania stosu TCP, wywołanie w warstwie transportowej nie może wstrzyknąć nowego lub sklonowanego pakietu TCP z funkcji klasyfikowaniaFn funkcji wywołania. Jeśli wymagana jest iniekcja śródliniowa, wywołanie musi przekierować DPC do kolejki, aby wykonać iniekcję.

Wyrównanie nagłówka wychodzącego adresu IP

MDL opisujący nagłówek IP w liście buforów sieciowych (NET_BUFFER_CURRENT_MDL(NET_BUFFER_LIST_FIRST_NB(netBufferList))) musi być wyrównany do wskaźnika, gdy jedna z funkcji iniekcji pakietów jest używana do wstrzykiwania danych pakietowych do ścieżki wychodzącej. Ponieważ nagłówek IP pakietu przychodzącego MDL może być wyrównany do wskaźnika, funkcja wywoławcza musi odbudować nagłówek IP (jeśli jeszcze nie jest wyrównany) podczas wstawiania pakietu przychodzącego do ścieżki wychodzącej.

sterowniki wywołań Platformy Filtrowania Windows