Gedeserialiseerde NDIS Miniport-stuurprogramma's
Alle NDIS 6.0 en later stuurprogramma's worden gedeserialiseerd.
Een gedeserialiseerd NDIS miniportstuurprogramma serialiseert de werking van zijn eigen MiniportXxx functies en plaatst alle verzendverzoeken intern in de wachtrij, in plaats van dat NDIS deze functies uitvoert. Als gevolg hiervan kan een gedeserialiseerde minipoortstuurprogramma aanzienlijk betere full-duplex prestaties bereiken dan een geserialiseerd miniportstuurprogramma.
Het gedeserialiseerde stuurprogrammamodel is het standaardmodel voor NDIS-minipoortstuurprogramma's. Verbindingsgeoriënteerde minipoortstuurprogramma's, evenals minipoortstuurprogramma's met een WDM-onderrand, moeten gedeserialiseerde stuurprogramma's zijn. Wanneer u een nieuw NDIS-minipoortstuurprogramma schrijft, moet u een gedeserialiseerd stuurprogramma schrijven. Indien mogelijk moet u oudere stuurprogramma's ook overzetten naar NDIS 6.0 of hoger. Zie voor meer informatie over het overzetten van stuurprogramma's:
- NDIS 5.x-stuurprogramma's overzetten naar NDIS 6.0
- NDIS 6.x-stuurprogramma's overzetten naar NDIS 6.20
- NDIS 6.x-stuurprogramma's overzetten naar NDIS 6.30
Een gedeserialiseerde minipoortstuurprogramma moet voldoen aan de volgende vereisten wanneer het communiceert met NDIS:
Een gedeserialiseerd miniport-stuurprogramma moet zichzelf als zodanig aan NDIS identificeren tijdens de initialisatiefase.
Een gedeserialiseerd minipoortstuurprogramma moet alle verzendaanvragen asynchroon voltooien. Als u een verzendaanvraag wilt voltooien, roepen verbindingsloze NDIS 6.0- en latere minipoortstuurprogramma's de NdisMSendNetBufferListsComplete-functie aan. Verbindingsgeoriënteerde NDIS 6.0- en latere minipoortstuurprogramma's roepen de functie NdisMCoSendNetBufferListsComplete aan.
Een gedeserialiseerd minipoortstuurprogramma dat NDIS 6.0 of hoger ondersteunt, stelt het Status lid van de NET_BUFFER_LIST-structuur in, die wordt doorgegeven aan NdisMSendNetBufferListsComplete.
Als een gedeserialiseerd minipoortstuurprogramma verzendaanvragen niet onmiddellijk kan voltooien, kan het de aanvragen niet terugsturen naar NDIS om opnieuw in de wachtrij te plaatsen. In plaats daarvan moet het minipoortstuurprogramma intern aanvragen in de wachtrij plaatsen totdat er voldoende resources beschikbaar zijn om de gegevens te verzenden.
Een gedeserialiseerd minipoortstuurprogramma mag de structuren die het aan NDIS doorgeeft niet onderzoeken in ontvangstindicatoren totdat NDIS ze heeft geretourneerd. NDIS retourneert NET_BUFFER_LIST structuren naar de MiniportReturnNetBufferLists functie van een minipoortstuurprogramma.
Een gedeserialiseerde minipoortstuurprogramma moet voldoen aan de volgende interne vereisten voor stuurprogramma's:
Een gedeserialiseerde minipoortstuurprogramma moet de netwerkbufferwachtrijen beschermen met spinvergrendelingen. Een gedeserialiseerde minipoortstuurprogramma moet ook de gedeelde status beschermen tegen gelijktijdige toegang door zijn eigen MiniportXxx functies.
De MiniportXxx- functies van een gedeserialiseerd miniportstuurprogramma kunnen draaien op IRQL <= DISPATCH_LEVEL. Daarom kan de schrijver van het stuurprogramma niet aannemen dat MiniportXxx- functies worden aangeroepen in de volgorde waarin ze aanvragen verwerken. Een MiniportXxx functie kan een andere MiniportXxx functie die wordt uitgevoerd op een lagere IRQL vooraf laten gaan.
Een gedeserialiseerde minipoortstuurprogramma is verantwoordelijk voor netwerkbufferwachtrijbeheer. Wanneer het minipoortstuurprogramma een resourceprobleem ondervindt, kan het geen verzendverzoeken terugsturen naar NDIS om opnieuw in de wachtrij geplaatst te worden. In plaats daarvan moet het minipoortstuurprogramma intern alle verzendaanvragen in de wachtrij plaatsen totdat er voldoende resources beschikbaar zijn om de gegevens te verzenden.
Een gedeserialiseerde minipoortstuurprogramma moet het verzenden van aanvragen in de door het protocol vastgestelde volgorde voltooien.
Zie Verzenden- en ontvangstbewerkingenvoor meer informatie over verzend- en ontvangstvereisten voor NDIS-stuurprogramma's.
Houd er rekening mee dat een gedeserialiseerde minipoortstuurprogramma meestal het verzenden van aanvragen in de door het protocol vastgestelde volgorde voltooit. Een minipoortstuurprogramma dat pakketprioriteit ondersteunt (bijvoorbeeld IEEE 802.1p) kan verzenden aanvragen echter opnieuw ordenen op basis van prioriteitsgegevens.