Delen via


Netwerkgegevens ontvangen

In de volgende afbeelding ziet u een eenvoudige ontvangstbewerking, die betrekking heeft op een minipoortstuurprogramma, NDIS en een protocolstuurprogramma.

diagram waarin een eenvoudige netwerk-ontvangstbewerking wordt geïllustreerd.

Miniportstuurprogramma's roepen de NdisMIndicateReceiveNetBufferLists functie aan om NET_BUFFER structuren aan te geven aan stuurprogramma's op een hoger niveau. Elke NET_BUFFER structuur moet meestal worden gekoppeld aan een afzonderlijke NET_BUFFER_LIST structuur. Hierdoor kunnen protocolstuurprogramma's een subset maken van de oorspronkelijke lijst met NET_BUFFER_LIST structuren en deze doorsturen naar verschillende clients. Sommige stuurprogramma's, bijvoorbeeld systeemeigen IEEE 802.11-minipoortstuurprogramma's, kunnen meer dan één NET_BUFFER structuur koppelen aan een NET_BUFFER_LIST structuur.

Nadat alle NET_BUFFER_LIST-structuren zijn gekoppeld, geeft een miniportstuurprogramma een pointer door naar de eerste NET_BUFFER_LIST-structuur in de lijst, met behulp van de NdisMIndicateReceiveNetBufferLists functie. NDIS onderzoekt de NET_BUFFER_LIST structuren en roept de ProtocolReceiveNetBufferLists functie aan van elk protocolstuurprogramma dat is gekoppeld aan de NET_BUFFER_LIST structuren. NDIS geeft een subset van de lijst door die alleen de NET_BUFFER_LIST structuren bevat die aan de juiste binding aan elk protocolstuurprogramma zijn gekoppeld. NDIS komt overeen met de NetBufferListFrameType waarde die is opgegeven in de NET_BUFFER_LIST structuur voor het frametype dat elk protocolstuurprogramma registreert.

Als de vlag NDIS_RECEIVE_FLAGS_RESOURCES in de ReceiveFlags parameter die wordt doorgegeven aan de ProtocolReceiveNetBufferLists functie van een protocolstuurprogramma is ingesteld, krijgt NDIS het eigendom van de NET_BUFFER_LIST structuren onmiddellijk nadat de ProtocolReceiveNetBufferLists-aanroep wordt geretourneerd.

Opmerking Als de vlag NDIS_RECEIVE_FLAGS_RESOURCES is ingesteld, moet het protocolstuurprogramma 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 retourneert, moet de oorspronkelijke gekoppelde lijst worden hersteld.

Als de NDIS_RECEIVE_FLAGS_RESOURCES vlag in de ReceiveFlags parameter die wordt doorgegeven aan de ProtocolReceiveNetBufferLists functie van een protocolstuurprogramma niet is ingesteld, kan het protocolstuurprogramma eigenaar blijven van de NET_BUFFER_LIST structuren. In dit geval moet het protocolstuurprogramma de NET_BUFFER_LIST structuren retourneren door de NdisReturnNetBufferLists functie aan te roepen.

Als een minipoortstuurprogramma weinig beschikbare resources heeft, kan het de vlag NDIS_RECEIVE_FLAGS_RESOURCES instellen in de parameter ReceiveFlags bij de aanroep van NdisMIndicateReceiveNetBufferLists. In dat geval kan de bestuurder het eigendom van alle aangegeven NET_BUFFER_LIST structuren en ingesloten NET_BUFFER structuren terugvorderen zodra NdisMIndicateReceiveNetBufferLists retourneert. Als NET_BUFFER-structuren worden aangegeven met de NDIS_RECEIVE_FLAGS_RESOURCES vlag set, worden de protocolstuurprogramma's gedwongen om de gegevens te kopiëren en moeten daarom worden vermeden. Een minipoortstuurprogramma moet detecteren wanneer het dreigt zijn ontvangstbronnen op te raken en elke noodzakelijke stap nemen om deze situatie te voorkomen.

NDIS roept de MiniportReturnNetBufferLists functie aan nadat het protocolstuurprogramma NdisReturnNetBufferListsaanroept.

Opmerking Als een minipoortstuurprogramma een NET_BUFFER_LIST structuur aangeeft met de NDIS_RECEIVE_FLAGS_RESOURCES vlag ingesteld, betekent dit niet dat NDIS de NET_BUFFER_LIST structuur aangeeft aan het protocolstuurprogramma met dezelfde status. NDIS kan bijvoorbeeld een NET_BUFFER_LIST-structuur kopiëren met de NDIS_RECEIVE_FLAGS_RESOURCES-vlag die is ingesteld en vervolgens de kopie doorgeven aan het protocolstuurprogramma met de vlag gewist.

NDIS kan NET_BUFFER_LIST structuren retourneren aan het miniport-stuurprogramma in willekeurige volgorde en in elke combinatie. Met andere woorden, de gekoppelde lijst met NET_BUFFER_LIST-structuren die zijn geretourneerd naar een minipoortstuurprogramma door een aanroep naar de MiniportReturnNetBufferLists-functie, zou NET_BUFFER_LIST-structuren kunnen bevatten van verschillende eerdere aanroepen naar NdisMIndicateReceiveNetBufferLists.

Minipoortstuurprogramma's moeten het SourceHandle-lid in de NET_BUFFER_LIST structuren instellen op de MiniportAdapterHandle die NDIS aan het minipoortstuurprogramma verstrekt in de functie MiniportInitializeEx. Filterstuurprogramma's moeten het lid SourceHandle van elke NET_BUFFER_LIST-structuur, die oorspronkelijk door het filterstuurprogramma is aangemaakt, instellen op de NdisFilterHandle die NDIS aan het filterstuurprogramma verstrekt heeft in de FilterAttach functie. Filterstuurprogramma's mogen het SourceHandle- lid niet wijzigen in NET_BUFFER_LIST structuren die niet afkomstig zijn van het filterstuurprogramma.

Tussenliggende stuurprogramma's stellen ook het SourceHandle- lid in de NET_BUFFER_LIST structuur in op de MiniportAdapterHandle--waarde die NDIS aan het tussenliggende stuurprogramma heeft verstrekt in de MiniportInitializeEx- functie. Als een tussenliggend stuurprogramma een ontvangstindicatie doorstuurt, moet het stuurprogramma de SourceHandle waarde opslaan die het onderliggende stuurprogramma heeft opgegeven voordat het naar het SourceHandle- lid wordt geschreven. Wanneer NDIS een doorgestuurde NET_BUFFER_LIST structuur naar het tussenliggende stuurprogramma retourneert, moet het tussenliggende stuurprogramma de SourceHandle herstellen die het heeft opgeslagen.