Zuweisung einer VM-Warteschlange
Um eine Warteschlange mit einem anfänglichen Satz von Konfigurationsparametern zuzuordnen, gibt ein übersteigender Treiber eine OID_RECEIVE_FILTER_ALLOCATE_QUEUE Methoden-OID-Anforderung aus. Das InformationBuffer-Element der NDIS_OID_REQUEST-Struktur enthält zunächst einen Zeiger auf eine NDIS_RECEIVE_QUEUE_PARAMETERS-Struktur . Nach einer erfolgreichen Rückgabe von der OID-Methodenanforderung enthält das InformationBuffer-Element der NDIS_OID_REQUEST-Struktur einen Zeiger auf eine NDIS_RECEIVE_QUEUE_PARAMETERS-Struktur mit einem neuen Warteschlangenbezeichner und einem MSI-X-Tabelleneintrag.
Die NDIS_RECEIVE_QUEUE_PARAMETERS-Struktur wird in der OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID und der OID_RECEIVE_FILTER_QUEUE_PARAMETERS OID verwendet. Weitere Informationen zu VM-Warteschlangenparametern finden Sie unter Abrufen und Aktualisieren von VM-Warteschlangenparametern.
Der überlastende Treiber initialisiert die NDIS_RECEIVE_QUEUE_PARAMETERS-Struktur mit den folgenden Warteschlangenkonfigurationsparametern:
Der Warteschlangentyp (NdisReceiveQueueTypeVMQueue aus der NDIS_RECEIVE_QUEUE_TYPE-Enumeration .)
Die Prozessoraffinität für die Warteschlange.
Der Warteschlangenname und der Name des virtuellen Computers.
Die Lookahead-Split-Parameter.
Hinweis Ab NDIS 6.30 wird das Aufteilen von Paketdaten in separate Lookaheadpuffer nicht mehr unterstützt.
Hinweis Der überlastende Treiber kann die NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION- und NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED-Flags im Flags-Element der NDIS_RECEIVE_QUEUE_PARAMETERS-Struktur festlegen. Die anderen Flags werden nicht für die Warteschlangenzuordnung verwendet.
Wenn NDIS eine OID-Anforderung empfängt, um eine Empfangswarteschlange zuzuordnen, werden die Warteschlangenparameter überprüft. Nachdem NDIS die erforderlichen Ressourcen und den Warteschlangenbezeichner zugewiesen hat, sendet es die OID-Anforderung an den zugrunde liegenden Miniporttreiber. Der Warteschlangenbezeichner ist für den zugeordneten Netzwerkadapter eindeutig.
Wenn der Miniporttreiber die erforderlichen Software- und Hardwareressourcen für die Empfangswarteschlange erfolgreich zuordnen kann, wird die OID-Anforderung erfolgreich status.
Bevor NDIS die OID-Anforderung an den Miniporttreiber sendet, weist NDIS einen Warteschlangenbezeichner im QueueId-Member der NDIS_RECEIVE_QUEUE_PARAMETERS-Struktur zu und übergibt die Methodenanforderung an den Miniporttreiber. Der Miniporttreiber stellt den MSI-X-Tabelleneintrag im MSIXTableEntry-Member bereit.
Der Miniporttreiber muss die Warteschlangenbezeichner für die zugeordneten Empfangswarteschlangen beibehalten. NDIS verwendet den Warteschlangenbezeichner einer Empfangswarteschlange für nachfolgende Aufrufe des Miniporttreibers, um einen Empfangsfilter für die Empfangswarteschlange festzulegen, die Empfangswarteschlangenparameter zu ändern oder die Empfangswarteschlange freizusetzen.
Hinweis Die Standardwarteschlange (Warteschlangenbezeichner null) wird immer zugeordnet und kann nicht freigegeben werden.
Der überlastende Treiber muss den Warteschlangenbezeichner verwenden, den NDIS in nachfolgenden OID-Anforderungen bereitstellt, z. B. zum Ändern der Warteschlangenparameter oder zum Freigeben der Warteschlange. Der Warteschlangenbezeichner ist auch in den OOB-Daten für alle NET_BUFFER_LIST Strukturen enthalten, die der Warteschlange zugeordnet sind. Treiber verwenden das makro NET_BUFFER_LIST_RECEIVE_QUEUE_ID , um den Warteschlangenbezeichner in einer NET_BUFFER_LIST-Struktur abzurufen.
Hinweis Ein Protokolltreiber kann VMQ-Filter jederzeit festlegen, nachdem er eine Warteschlange erfolgreich zugeordnet hat und bevor die Warteschlange gelöscht wird.
Der Protokolltreiber stellt eine OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE Methoden-OID-Anforderung aus, um die Warteschlangenzuordnung abzuschließen. Der Miniporttreiber kann freigegebenen Arbeitsspeicher und andere Ressourcen zuordnen, wenn die Zuordnung abgeschlossen ist. Weitere Informationen zur Zuweisung von Ressourcen mit freigegebenem Arbeitsspeicher finden Sie unter Zuordnung von Ressourcen für gemeinsam genutzten Arbeitsspeicher.
Nachdem ein Miniporttreiber eine OID_RECEIVE_FILTER_QUEUE_ALLOCATION OID-Anforderung empfangen und erfolgreich verarbeitet hat, befindet sich die Warteschlange im Status Zugeordnet . Weitere Informationen zu Warteschlangenzuständen finden Sie unter Warteschlangenzustände und Vorgänge.
Nachdem ein Überlastungstreiber eine oder mehrere Empfangswarteschlangen zugewiesen hat (und optional die anfänglichen Filter festlegt), muss er OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE Festlegen von OID-Anforderungen ausgeben, um den Miniporttreiber darüber zu informieren, dass die Zuordnung für den aktuellen Batch von Empfangswarteschlangen abgeschlossen ist.
Der Miniporttreiber darf keine Pakete in einer Empfangswarteschlange aufbewahren, wenn keine Filter für diese Warteschlange festgelegt sind. Wenn für eine Warteschlange nie Filter festgelegt wurden oder alle Filter gelöscht wurden, sollte die Warteschlange leer sein, und alle Pakete sollten verworfen werden. Das heißt, sie werden nicht im Treiberstapel angegeben oder in der Warteschlange beibehalten.
Überlastende Treiber verwenden die OID_RECEIVE_FILTER_FREE_QUEUE OID, um die von ihnen zugewiesenen Warteschlangen zu befreien. Weitere Informationen zum Freigeben von Warteschlangen finden Sie unter Freigeben einer VM-Warteschlange.