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.
Om du vill allokera en kö med en inledande uppsättning konfigurationsparametrar skickar en överliggande drivrutin en OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID-metodbegäran. InformationBuffer medlem i NDIS_OID_REQUEST-strukturen innehåller inledningsvis en pekare till en NDIS_RECEIVE_QUEUE_PARAMETERS struktur. Efter en lyckad återkomst från OID-metodbegäran innehåller InformationBuffer-medlemmen i NDIS_OID_REQUEST-strukturen en pekare till en NDIS_RECEIVE_QUEUE_PARAMETERS-struktur som har en ny köidentifierare och en MSI-X tabellpost.
Den NDIS_RECEIVE_QUEUE_PARAMETERS strukturen används i OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID och OID_RECEIVE_FILTER_QUEUE_PARAMETERS OID. Mer information om vm-köparametrar finns i Hämta och uppdatera vm-köparametrar.
Den överliggande drivrutinen initierar NDIS_RECEIVE_QUEUE_PARAMETERS strukturen med följande kökonfigurationsparametrar:
Kötypen (NdisReceiveQueueTypeVMQueue från NDIS_RECEIVE_QUEUE_TYPE-uppräkningen.)
Processortillhörigheten för kö.
Könamnet och namnet på den virtuella datorn.
Parametrarna för lookahead-split.
Observera Från och med NDIS 6.30 stöds inte längre att dela upp paketdata i separata lookahead-buffertar.
Obs Den överdrivande drivrutinen kan ange flaggorna NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION och NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED i Flags medlem i NDIS_RECEIVE_QUEUE_PARAMETERS-strukturen. De andra flaggorna används inte för köallokering.
När NDIS tar emot en OID-begäran om att allokera en mottagningskö verifierar den köparametrarna. När NDIS har allokerat de nödvändiga resurserna och köidentifieraren, skickar den OID-begäran till den underliggande miniportdrivrutinen. Köidentifieraren är unik för det associerade nätverkskortet.
Om miniportdrivrutinen kan allokera nödvändiga programvaru- och maskinvaruresurser för mottagarkön, slutför den OID-begäran med statusen lyckad.
Innan NDIS skickar OID-begäran till miniportdrivrutinen tilldelar NDIS en köidentifierare i QueueId medlem i NDIS_RECEIVE_QUEUE_PARAMETERS-strukturen och skickar metodbegäran till miniportdrivrutinen. Miniportdrivrutinen tillhandahåller tabellposten MSI-X i medlemsvariabeln MSIXTableEntry.
Miniportdrivrutinen måste behålla köidentifierarna för de allokerade mottagningsköerna. NDIS använder köidentifieraren för en mottagningskö för efterföljande anrop till miniportdrivrutinen för att ange ett mottagningsfilter i mottagarkön, ändra parametrarna för mottagningskö eller frigöra mottagarkön.
Obs Standardkön (köidentifierare noll) allokeras alltid och kan inte frigöras.
Den överordnade drivrutinen måste använda köidentifieraren som NDIS tillhandahåller i efterföljande OID-begäranden, till exempel för att ändra köparametrarna eller frigöra kön. Köidentifieraren ingår också i OOB-data på alla NET_BUFFER_LIST strukturer som är associerade med kön. Drivrutiner använder makrot NET_BUFFER_LIST_RECEIVE_QUEUE_ID för att hämta köidentifieraren i en NET_BUFFER_LIST struktur.
Obs En protokolldrivrutin kan ange VMQ-filter när som helst när den har allokerat en kö och innan kön tas bort.
Protokolldrivrutinen utfärdar en OID-begäran för OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE metod för att slutföra köallokeringen. Miniportdrivrutinen kan allokera delat minne och andra resurser när allokeringen är klar. Mer information om hur du allokerar delade minnesresurser finns i Resursallokering av delat minne.
När en miniportdrivrutin tar emot en OID_RECEIVE_FILTER_QUEUE_ALLOCATION OID-begäran och hanterar den framgångsrikt är kön i tillståndet Allokerad. Mer information om kötillstånd finns i Kötillstånd och åtgärder.
När en överdrivande drivrutin allokerar en eller flera mottagningsköer (och eventuellt anger de första filtren) måste den utfärda OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE ange OID-begäranden för att meddela miniportdrivrutinen att allokeringen är klar för den aktuella batchen med mottagningsköer.
Miniportdrivrutinen får inte behålla några paket i en mottagningskö om det inte finns några filter på den kön. Om en kö aldrig har haft några filter angivna eller om alla filter har rensats bör kön vara tom och eventuella paket ska diskardas. De indikeras alltså inte upp genom drivrutinsstacken eller hålls kvar i kön.
Överliggande drivrutiner använder OID_RECEIVE_FILTER_FREE_QUEUE OID för att frigöra köer som de allokerar. Mer information om hur du frigör köer finns i Frigöra en VM-kö.