Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Filterstuurprogramma's kunnen ontvangstindicaties initiëren of filterindicaties ontvangen van onderliggende stuurprogramma's. Wanneer een minipoortstuurprogramma de NdisMIndicateReceiveNetBufferLists functie aanroept, verzendt NDIS de opgegeven NET_BUFFER_LIST structuur naar de laagste bovenliggende filtermodule in de stuurprogrammastack.
Indicaties ontvangen door een filterstuurprogramma
In de volgende afbeelding ziet u een ontvangstindicatie die wordt gestart door een filterstuurprogramma.
Filterstuurprogramma's roepen de NdisFIndicateReceiveNetBufferLists functie aan om ontvangen gegevens aan te geven. De NdisFIndicateReceiveNetBufferLists functie geeft de aangegeven lijst met NET_BUFFER_LIST structuren door naar de stack voor hogere stuurprogramma's. Het filterstuurprogramma wijst de structuren toe op basis van pools die tijdens de initialisatie zijn gemaakt.
Als een filterstuurprogramma de vlag NDIS_RECEIVE_FLAGS_RESOURCES instelt in de parameter ReceiveFlags van NdisFIndicateReceiveNetBufferLists, geeft dit aan dat het filterstuurprogramma onmiddellijk opnieuw eigenaar moet worden van de NET_BUFFER_LIST structuren. In dit geval roept NDIS de FilterReturnNetBufferLists functie van het filterstuurprogramma niet aan om de NET_BUFFER_LIST structuren te retourneren. Het filterstuurprogramma krijgt onmiddellijk weer eigendom nadat NdisFIndicateReceiveNetBufferLists retourneert.
Als een filterstuurprogramma de vlag NDIS_RECEIVE_FLAGS_RESOURCES niet instelt in de ReceiveFlags parameter van NdisFIndicateReceiveNetBufferLists, retourneert NDIS de aangegeven NET_BUFFER_LIST structuren naar de FilterReturnNetBufferLists functie van het filterstuurprogramma. In dit geval geeft het filterstuurprogramma het eigendom van de aangegeven structuren op totdat NDIS deze retourneert naar FilterReturnNetBufferLists.
Opmerking Een filterstuurprogramma moet de ontvangstindicaties bijhouden die worden gestart en ervoor zorgen dat de NdisFReturnNetBufferLists functie niet wordt aangeroepen wanneer de ontvangstbewerking is voltooid.
Filters ontvangen indicaties
In de volgende afbeelding ziet u een gefilterde ontvangstindicatie die wordt geïnitieerd door een onderliggend stuurprogramma.
NDIS roept de FilterReceiveNetBufferLists functie van een filterstuurprogramma aan om ontvangstindicaties te verwerken die afkomstig zijn van onderliggende stuurprogramma's. NDIS roept FilterReceiveNetBufferLists aan nadat een onderliggend stuurprogramma een ontvangstindicatiefunctie aanroept (bijvoorbeeld NdisMIndicateReceiveNetBufferLists) om ontvangen netwerk- of loopbackgegevens aan te geven.
Als de NDIS_RECEIVE_FLAGS_RESOURCES vlag in de ReceiveFlags parameter van FilterReceiveNetBufferLists niet is ingesteld, blijft het filterstuurprogramma eigenaar van de NET_BUFFER_LIST structuren totdat de NdisFReturnNetBufferLists functie aanroept.
Als de NDIS_RECEIVE_FLAGS_RESOURCES vlag in de parameter ReceiveFlags is ingesteld, kan het filterstuurprogramma de NET_BUFFER_LIST structuur en de bijbehorende onderliggende resources die aan het stuurprogramma zijn toegewezen, niet behouden. Deze vlag kan erop wijzen dat het onderliggende stuurprogramma weinig resources ontvangt. De functie FilterReceiveNetBufferLists zou zo snel mogelijk moeten worden uitgevoerd.
Opmerking Als de vlag NDIS_RECEIVE_FLAGS_RESOURCES is ingesteld, moet het filterstuurprogramma de oorspronkelijke set NET_BUFFER_LIST structuren in de gekoppelde lijst behouden. Wanneer deze vlag bijvoorbeeld is ingesteld, kan het stuurprogramma de structuren verwerken en deze één voor één aangeven, maar voordat de functie wordt geretourneerd, moet de oorspronkelijke gekoppelde lijst worden hersteld.
Filterstuurprogramma's kunnen filterbewerkingen uitvoeren op ontvangen gegevens voordat de gegevens worden aangegeven voor overliggende stuurprogramma's. Voor elke buffer die is verzonden naar de FilterReceiveNetBufferLists functie, kan een filterstuurprogramma het volgende doen:
Geef het door aan het volgende overliggende stuurprogramma door NdisFIndicateReceiveNetBufferListsaan te roepen. Het stuurprogramma kan de inhoud van de buffer wijzigen. NDIS garandeert de beschikbaarheid van contextruimte (zie NET_BUFFER_LIST_CONTEXT structuur).
Een filterstuurprogramma kan de status wijzigen die NDIS heeft doorgegeven aan FilterReceiveNetBufferLists of deze eenvoudig doorgeven aan NdisFIndicateReceiveNetBufferLists.
Opmerking Een filterstuurprogramma kan een buffer doorgeven met NdisFIndicateReceiveNetBufferLists, zelfs als NDIS de vlag NDIS_RECEIVE_FLAGS_RESOURCES instelt in de ReceiveFlags-parameter van FilterReceiveNetBufferLists. In dit geval mag het filterstuurprogramma niet terugkeren van FilterReceiveNetBufferLists totdat het het eigendom over de buffer terugkrijgt.
Verwijder de buffer. Als NDIS de NDIS_RECEIVE_FLAGS_RESOURCES vlag in de ReceiveFlags parameter van FilterReceiveNetBufferListsheeft gewist, roept u de NdisFReturnNetBufferLists functie aan om de buffer te verwijderen. Als NDIS de NDIS_RECEIVE_FLAGS_RESOURCES vlag instelt in de parameter ReceiveFlags parameter van FilterReceiveNetBufferLists, voert u geen actie uit en keert u terug uit FilterReceiveNetBufferLists om de buffer te verwijderen.
De buffer in een lokale gegevensstructuur in de wachtrij plaatsen voor latere verwerking. Als NDIS de NDIS_RECEIVE_FLAGS_RESOURCES vlag in de ReceiveFlags parameter van FilterReceiveNetBufferListsheeft ingesteld, moet het filterstuurprogramma een kopie maken voordat het vanuit FilterReceiveNetBufferListswordt geretourneerd.
Kopieer de buffer en initieer een ontvangstindicatie met de kopie. De ontvangstindicatie is vergelijkbaar met een door het filterstuurprogramma geïnitieerde ontvangstindicatie. In dit geval moet het stuurprogramma de oorspronkelijke buffer retourneren aan het onderliggende stuurprogramma.
De NdisFIndicateReceiveNetBufferLists functie geeft de aangegeven lijst met NET_BUFFER_LIST structuren van de stuurprogrammastack door aan overliggende stuurprogramma's. De ontvangstbewerking verloopt op dezelfde manier als een door het filterstuurprogramma geïnitieerde ontvangstbewerking.
Als een bovenliggend stuurprogramma het eigendom van de buffer behoudt, roept NDIS de functie FilterReturnNetBufferLists aan voor de filtermodule. In de FilterReturnNetBufferLists functie, maakt het filterstuurprogramma de bewerkingen ongedaan die het op de buffer op het ontvangstindicatiepad heeft uitgevoerd.
Wanneer de filtermodule van de laagste laag aangeeft dat deze wordt uitgevoerd met een buffer, retourneert NDIS de buffer naar het minipoortstuurprogramma. Als NDIS de NDIS_RECEIVE_FLAGS_RESOURCES vlag in de ReceiveFlags parameter van FilterReceiveNetBufferListsheeft gewist, roept het filterstuurprogramma NdisFReturnNetBufferLists aan om de buffer te retourneren. Als NDIS de vlag NDIS_RECEIVE_FLAGS_RESOURCES instelt in de parameter ReceiveFlags van FilterReceiveNetBufferLists, dan retourneert FilterReceiveNetBufferLists de buffer.