Udostępnij przez


Zarządzanie buforem sterownika filtru

Sterowniki filtrów tworzą bufory w celu kopiowania danych sieciowych uzyskanych z innych sterowników lub do inicjowania operacji wysyłania lub odbierania.

Jeśli sterownik filtru nie tworzy buforów, nie zarządza pulami buforów. Taki sterownik po prostu przekazuje bufory odbierane z innych sterowników.

Sterownik filtru, który tworzy bufory do obsługi operacji wysyłania lub odbierania, musi zarządzać pulami struktury NET_BUFFER_LIST i pulami struktury NET_BUFFER.

Aby utworzyć te pule, sterowniki wywołają następujące funkcje:

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

Sterowniki filtrów mogą używać następujących funkcji do przydzielania struktur z pul:

NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBuffer

Wywoływanie NdisAllocateNetBufferAndNetBufferList jest bardziej wydajne niż wywoływanie NdisAllocateNetBufferList, następnie NdisAllocateNetBuffer. Jednak NdisAllocateNetBufferAndNetBufferList tworzy tylko jedną strukturę NET_BUFFER w strukturze NET_BUFFER_LIST. Aby użyć NdisAllocateNetBufferAndNetBufferList, sterownik musi ustawić parametr AllocateNetBuffer, aby true, gdy wywołuje NdisAllocateNetBufferListPool.

Sterowniki filtrów, które inicjują żądania wysyłania, powinny określać wymagania dotyczące kontekstu i przestrzeni do uzupełnienia poniżej leżących sterowników. Sterowniki filtrów używają atrybutów ponownego uruchamiania, aby określić wymagania dotyczące wypełniania danych podstawowych sterowników. Sterownik filtru powinien ustalić wymagania dotyczące uzupełniania i kontekstu w stanie Ponowne uruchamianie. Sterownik powinien przydzielić wystarczającą ilość miejsca buforowego i kontekstowego dla całego stosu. W razie potrzeby sterownik filtru może zwolnić pule i ponownie przenieść je w stan Ponowne uruchamianie .

Sterowniki filtrów używają następujących funkcji, aby zwolnić pule:

NdisFreeNetBufferListPool

NdisFreeNetBufferPool

Sterowniki filtrów używają następujących funkcji, aby zwolnić struktury przydzielone z pul:

NdisFreeNetBufferList

NdisFreeNetBuffer

Programiści powinni zwolnić struktury NET_BUFFER przydzielone za pomocą NdisAllocateNetBuffer przed zwolnieniem skojarzonej struktury NET_BUFFER_LIST. NET_BUFFER struktury przydzielone za pomocą NdisAllocateNetBufferAndNetBufferList są zwalniane, gdy sterownik wywołuje NdisFreeNetBufferList dla skojarzonej struktury NET_BUFFER_LIST.