Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Följande bild illustrerar en grundläggande mottagningsåtgärd som omfattar en miniportdrivrutin, NDIS och en protokolldrivrutin.
Miniportdrivrutiner anropar funktionen NdisMIndicateReceiveNetBufferLists för att ange NET_BUFFER strukturer till drivrutiner på högre nivå. Varje NET_BUFFER struktur bör vanligtvis kopplas till en separat NET_BUFFER_LIST struktur. Detta gör att protokolldrivrutiner kan skapa en delmängd av den ursprungliga listan över NET_BUFFER_LIST strukturer och vidarebefordra dem till olika klienter. Vissa drivrutiner, till exempel interna IEEE 802.11 miniport-drivrutiner, kan koppla mer än en NET_BUFFER struktur till en NET_BUFFER_LIST struktur.
När du har länkat alla NET_BUFFER_LIST strukturer skickar en miniportdrivrutin en pekare till den första NET_BUFFER_LIST strukturen i listan till funktionen NdisMIndicateReceiveNetBufferLists. NDIS undersöker NET_BUFFER_LIST strukturer och anropar ProtocolReceiveNetBufferLists funktion för varje protokolldrivrutin som är associerad med NET_BUFFER_LIST strukturer. NDIS skickar en delmängd av listan som endast innehåller de NET_BUFFER_LIST strukturer som är associerade med rätt bindning till varje protokolldrivrutin. NDIS matchar värdet NetBufferListFrameType som anges i NET_BUFFER_LIST struktur till den ramtyp som varje protokolldrivrutin registrerar.
Om flaggan NDIS_RECEIVE_FLAGS_RESOURCES är inställd i ReceiveFlags-parametern som skickas till en protokolldrivrutinsfunktion ProtocolReceiveNetBufferLists, återfår NDIS ägarskapet för NET_BUFFER_LIST-strukturerna omedelbart när ProtocolReceiveNetBufferLists-anropet returnerar.
Obs Om flaggan NDIS_RECEIVE_FLAGS_RESOURCES har angetts måste protokolldrivrutinen behålla den ursprungliga uppsättningen NET_BUFFER_LIST strukturer i den länkade listan. När den här flaggan till exempel anges kan drivrutinen bearbeta strukturerna och ange dem i stacken en i taget, men innan funktionen returnerar måste den återställa den ursprungliga länkade listan.
Om NDIS_RECEIVE_FLAGS_RESOURCES-flaggan i parametern ReceiveFlags som skickas till en protokolldrivrutins ProtocolReceiveNetBufferLists funktion inte har angetts, kan protokolldrivrutinen behålla ägarskapet för NET_BUFFER_LIST strukturer. I det här fallet måste protokolldrivrutinen returnera NET_BUFFER_LIST strukturer genom att anropa funktionen NdisReturnNetBufferLists.
Om en miniportdrivrutin har ont om mottagningsresurser kan den ange flaggan NDIS_RECEIVE_FLAGS_RESOURCES i parametern ReceiveFlags i anropet till NdisMIndicateReceiveNetBufferLists. I det fallet kan drivrutinen återta ägarskap för alla angivna strukturer av typen NET_BUFFER_LIST, och för de inbäddade strukturerna NET_BUFFER, så snart NdisMIndicateReceiveNetBufferLists returnerar. Att ange NET_BUFFER-strukturer med NDIS_RECEIVE_FLAGS_RESOURCES-flagga får protokolldrivrutinerna att kopiera data och bör därför undvikas. En miniportdrivrutin bör upptäcka när resurser för att ta emot data håller på att ta slut och vidta nödvändiga åtgärder för att undvika denna situation.
NDIS anropar en miniportdrivrutins MiniportReturnNetBufferLists-funktionen efter att protokolldrivrutinen anropar NdisReturnNetBufferLists.
Obs Om en miniportdrivrutin anger en NET_BUFFER_LIST-struktur med NDIS_RECEIVE_FLAGS_RESOURCES-flagguppsättning, betyder det inte att NDIS anger NET_BUFFER_LIST-struktur för protokolldrivrutinen med samma status. NDIS kan till exempel kopiera en NET_BUFFER_LIST struktur med NDIS_RECEIVE_FLAGS_RESOURCES flagga och ange kopian till protokolldrivrutinen med flaggan avmarkerad.
NDIS kan returnera NET_BUFFER_LIST strukturer till miniportdrivrutinen i valfri godtycklig ordning och i valfri kombination. Den länkade listan över NET_BUFFER_LIST strukturer som returneras till en miniportdrivrutin av ett anrop till dess funktionen MiniportReturnNetBufferLists kan ha NET_BUFFER_LIST strukturer från olika tidigare anrop till NdisMIndicateReceiveNetBufferLists.
Miniportdrivrutiner bör ange medlemmen SourceHandle i NET_BUFFER_LIST-strukturerna till MiniportAdapterHandle som NDIS tillhandahöll till miniportdrivrutinen i funktionen MiniportInitializeEx. Filterdrivrutiner måste ange SourceHandle--medlemmen i varje NET_BUFFER_LIST-struktur som filterdrivrutinen skapade till filtrets NdisFilterHandle, som NDIS tilldelade filterdrivrutinen i funktionen FilterAttach. Filterdrivrutiner får inte ändra SourceHandle- medlem i någon NET_BUFFER_LIST struktur som inte har sitt ursprung från filterdrivrutinen.
Mellanliggande drivrutiner anger också SourceHandle--medlemmen i NET_BUFFER_LIST-strukturen till MiniportAdapterHandle värde som NDIS angav för den mellanliggande drivrutinen i funktionen MiniportInitializeEx. Om en mellanliggande drivrutin vidarebefordrar en mottagningsindikering måste drivrutinen spara det SourceHandle- värde som den underliggande drivrutinen angav innan den skrev till SourceHandle- medlem. När NDIS returnerar en vidarebefordrad NET_BUFFER_LIST struktur till den mellanliggande drivrutinen måste den mellanliggande drivrutinen återställa SourceHandle- som den sparade.