OID-aanvragen filteren in een NDIS-filterstuurprogramma
Filterstuurprogramma's kunnen OID-aanvragen verwerken die afkomstig zijn van bovenliggende stuurprogramma's. NDIS roept de functie FilterOidRequest aan om elke OID-aanvraag te verwerken. Filterstuurprogramma's kunnen OID-aanvragen doorsturen naar onderliggende stuurprogramma's door de NdisFOidRequest--functie aan te roepen.
NDIS kan de FilterCancelOidRequest functie aanroepen om een OID-aanvraag te annuleren. Wanneer NDIS FilterCancelOidRequestaanroept, moet het filterstuurprogramma proberen de NdisFOidRequest functie zo snel mogelijk aan te roepen.
In de volgende afbeelding ziet u een gefilterde OID-aanvraag.
Het filterstuurprogramma kan de OID-aanvraag synchroon of asynchroon voltooien door respectievelijk NDIS_STATUS_SUCCESS of NDIS_STATUS_PENDING te retourneren van FilterOidRequest-. FilterOidRequest kan ook synchroon worden voltooid met een foutstatus.
Een filterstuurprogramma dat een OID-setaanvraag verwerkt, moet het SupportedRevision lid instellen in de NDIS_OID_REQUEST structuur bij terugkeer van de OID-setaanvraag. De SupportedRevision-eigenschap meldt aan de initiator van de OID-aanvraag welke revisie door het stuurprogramma wordt ondersteund. Zie NDIS-versiegegevens opgevenvoor meer informatie over versie-informatie in NDIS-structuren.
Als FilterOidRequest NDIS_STATUS_PENDING retourneert, moet deze de functie NdisFOidRequestComplete aanroepen nadat de OID-aanvraag is voltooid. In dit geval geeft het stuurprogramma de resultaten van de aanvraag door aan de OidRequest parameter van NdisFOidRequestComplete. Het stuurprogramma geeft de definitieve status van de aanvraag door aan de Statusparameter van NdisFOidRequestComplete.
Als FilterOidRequest NDIS_STATUS_SUCCESS retourneert, retourneert het de resultaten van een opvraagverzoek in de NDIS_OID_REQUEST structuur bij de OidRequest parameter. In dit geval roept het stuurprogramma de NdisFOidRequestComplete functie niet aan.
Als u een OID-aanvraag wilt doorsturen naar onderliggende stuurprogramma's, roept een filterstuurprogramma de NdisFOidRequest functie aan. Als een aanvraag niet naar de onderliggende stuurprogramma's moet worden doorgestuurd, kan een filterstuurprogramma de aanvraag onmiddellijk voltooien. Om de aanvraag te voltooien zonder doorsturen, kan de driver NDIS_STATUS_SUCCESS (of een foutstatus) retourneren vanuit FilterOidRequest, of kan het NdisFOidRequestComplete aanroepen nadat NDIS_STATUS_PENDING is geretourneerd.
Opmerking Voordat het stuurprogramma NdisFOidRequestaanroept, moet het stuurprogramma een NDIS_OID_REQUEST structuur toewijzen en de aanvraaggegevens overdragen naar de nieuwe structuur door NdisAllocateCloneOidRequestaan te roepen.
De doorgestuurde aanvraag gaat hetzelfde als een aanvraag die is geïnitieerd door een filterstuurprogramma. Zie OID-aanvragen genereren vanuit een NDIS-filterstuurprogrammavoor meer informatie.
Nadat de onderliggende stuurprogramma's een doorgestuurde aanvraag hebben voltooid, kan het filterstuurprogramma het antwoord zo nodig wijzigen en doorgeven aan overliggende stuurprogramma's.
Een filterstuurprogramma kan OID-aanvragen ontvangen van bovenliggende stuurprogramma's wanneer het zich in de opnieuw opstartende, uitvoerende, onderbrekendeof onderbroken status bevindt.
Opmerking Zoals minipoortstuurprogramma's, kunnen filterstuurprogramma's slechts één OID-aanvraag tegelijk ontvangen. Omdat NDIS aanvragen serialiseert die naar een filtermodule worden verzonden, kan een filterstuurprogramma niet worden aangeroepen bij FilterOidRequest voordat de vorige aanvraag is voltooid.
Hier volgt een voorbeeld van een filterstuurprogramma dat een OID-aanvraag wijzigt:
- Een filterstuurprogramma voegt een header toe. In dit geval trekt het filter, nadat het stuurprogramma een antwoord op een query voor OID_GEN_MAXIMUM_FRAME_SIZE van de onderliggende stuurprogramma's ontvangt, de grootte van de header van het antwoord af. Het stuurprogramma trekt de headergrootte af omdat het stuurprogramma een koptekst voor elk verzonden pakket invoegt en de header in elk ontvangen pakket verwijdert.