Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Netzwerkadapter zeigt ein empfangenes Paket in einer Warteschlange nur an, wenn er alle Filterfeldtests für einen Filter erfüllt, der in dieser Warteschlange eingestellt ist. Weitere Informationen zu Filtertests finden Sie unter VMQ-Filtervorgänge.
Wenn der Überleitungsprotokolltreiber das NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION-Flag im Flags-Element der NDIS_RECEIVE_QUEUE_PARAMETERS-Struktur gesetzt hat, darf der Miniporttreiber NET_BUFFER_LIST-Strukturen für andere Empfangswarteschlangen nicht mit den NET_BUFFER_LIST-Strukturen für diese Warteschlange in einem einzigen Aufruf der Funktion NdisMIndicateReceiveNetBufferLists vermischen. Außerdem muss im ReceiveFlags-Parameter der Funktion NdisMIndicateReceiveNetBufferLists das Flag NDIS_RECEIVE_FLAGS_SINGLE_QUEUE durch den Treiber festgelegt werden.
Wenn NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION nicht festgelegt wurde, können Miniporttreiber NET_BUFFER_LIST Strukturen für Frames aus verschiedenen VM-Warteschlangen verknüpfen und in einem einzigen Aufruf von NdisMIndicateReceiveNetBufferLists angeben. In diesem Fall muss die angegebene verknüpfte Liste der NET_BUFFER_LIST Strukturen nicht nach Warteschlangennummer sortiert werden. NET_BUFFER_LIST Strukturen für unterschiedliche Warteschlangen müssen nicht gruppiert werden.
Wenn ein Protokoll-Adapter NDIS_RETURN_FLAGS_SINGLE_QUEUE festlegt und Empfangspuffer zurückgibt, müssen alle NET_BUFFER_LIST-Strukturen im NetBufferLists-Parameter der NdisReturnNetBufferLists-Funktion zu derselben VM-Warteschlange gehören. Protokolltreiber müssen jedoch nicht alle NET_BUFFER_LIST Strukturen zurückgeben, die in einem einzigen Aufruf der ProtocolReceiveNetBufferLists-Funktion in einem einzigen Aufruf von NdisReturnNetBufferLists angegeben wurden. Außerdem kann die zurückgegebene Liste NET_BUFFER_LIST Strukturen aus mehreren Empfangsanzeigen enthalten, wenn sie zur gleichen VM-Warteschlange gehören.
Protokolltreiber legen das NDIS_RETURN_FLAGS_SINGLE_QUEUE Bit für den ReturnFlags-Parameter von NdisReturnNetBufferLists fest, um anzugeben, dass alle zurückgegebenen NET_BUFFER_LIST Strukturen zur gleichen VM-Warteschlange gehören.
VMQ-Empfangsanzeigen müssen im NetBufferListInfo-Mitglied der NET_BUFFER_LIST-Strukturen die folgenden Out-of-Band-Informationen (OOB) enthalten.
Geben Sie den Warteschlangenbezeichner in den NetBufferListFilteringInfo-Informationen an.
Legen Sie den Filterbezeichner in den NetBufferListFilteringInfo-Informationen auf Null fest.
Die NetBufferListFilteringInfo-Informationen werden in einer NDIS_NET_BUFFER_LIST_FILTERING_INFO Struktur angegeben. Um auf die NDIS_NET_BUFFER_LIST_FILTERING_INFO Struktur in den NET_BUFFER_LIST OOB-Daten zuzugreifen, ruft ein NDIS-Treiber das NET_BUFFER_LIST_INFO Makro auf und gibt den NetBufferListFilteringInfo-Informationstyp an.
Um direkt auf den Filterbezeichner und den Warteschlangenbezeichner zuzugreifen, verwenden Sie die NET_BUFFER_LIST_RECEIVE_FILTER_ID und NET_BUFFER_LIST_RECEIVE_QUEUE_ID Makros.
VMQ-Empfangsanzeigen müssen freigegebene Speicherinformationen im SharedMemoryInfo-Element der NET_BUFFER-Struktur definieren.
Anmerkung Wenn ein VMQ gelöscht wird (z. B. während der VM-Livemigration), kann der Miniporttreiber eine NBL empfangen, die einen ungültigen QueueId-Wert enthält. In diesem Fall sollte der Miniport die ungültige Warteschlangen-ID ignorieren und stattdessen 0 (die Standardwarteschlange) verwenden. Die QueueId befindet sich im NetBufferListFilteringInfo-Teil der OOB-Daten der NBL und wird mithilfe des NET_BUFFER_LIST_RECEIVE_QUEUE_ID-Makros abgerufen.
Um anzugeben, dass der NET_BUFFER_SHARED_MEMORY Zeiger bei SharedMemoryInfo gültig ist, muss der Miniporttreiber das NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID Flag im ReceiveFlags-Parameter der NdisMIndicateReceiveNetBufferLists-Funktion festlegen. Weitere Informationen zum Layout von freigegebenen Speicherpuffern in VMQ-Empfangspuffern finden Sie unter Freigegebener Speicher in Empfangspuffern.
Die Empfangsanzeige muss die folgenden Informationen in der NET_BUFFER_SHARED_MEMORY Struktur enthalten.
NextSharedMemorySegment
Ein Zeiger auf die nächste NET_BUFFER_SHARED_MEMORY Struktur in einer mit NULL beendeten verknüpften Liste solcher Strukturen.
SharedMemoryHandle
Ein NDIS-Handle für gemeinsamen Speicher, das durch NdisAllocateSharedMemory zurückgegeben wurde.
SharedMemoryOffset
Ein Offset in Bytes zum Beginn der Daten vom Anfang des freigegebenen Speicherpuffers.
SharedMemoryLength
Die Länge des freigegebenen Speichersegments in Bytes.
Wenn der übergeordnete Protokolltreiber das NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED Flag im Flags-Mitglied der NDIS_RECEIVE_QUEUE_PARAMETERS Struktur festgelegt hat, enthält jede NET_BUFFER Folgendes:
Zwei MDLs und entsprechende SharedMemoryInfo-Strukturen .
Ein Nachschlagekopfpuffer mit Rückfüllbereich.
Bei Bedarf kopiert der Protokolltreiber den Inhalt des Lookahead-Puffers in den Rückfüllbereich. Der Rückfüllraum muss jedoch auch vorhanden sein, wenn sich das Paket vollständig im Lookaheadpuffer befindet.
Wenn der übergeordnete Treiber das NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED-Flag nicht festgelegt hat, enthält jede NET_BUFFER-Struktur eine einzelne MDL und eine einzelne SharedMemoryInfo-Struktur.
Die Byteanzahl und der Byteoffset in der MDL und die DataLength und DataOffset Elemente in der NET_BUFFER_DATA Struktur werden auf die gleiche Weise festgelegt wie für Treiber, die VMQ nicht verwenden. Die Elemente SharedMemoryLength und SharedMemoryOffset in der SharedMemoryInfo-Struktur können während der Initialisierung einmal festgelegt werden. Der Miniporttreiber muss die Mitglieder SharedMemoryLength und SharedMemoryOffset nicht für jedes empfangene Paket aktualisieren, da die übergeordneten Treiber und NDIS das NET_BUFFER-DataLength-Mitglied und die MDL-Byteanzahl verwenden können, um den Paketbeginn und die Paketgröße zu ermitteln.
Anmerkung Ab NDIS 6.30 und Windows Server 2012 wird das Aufteilen von Paketdaten in separate Lookaheadpuffer nicht mehr unterstützt. Der übergeordnete Protokolltreiber wird das NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED-Flag nicht setzen.