Freigeben einer VM-Warteschlange
Zum Freigeben einer Empfangswarteschlange gibt ein übersteigender Treiber eine OID_RECEIVE_FILTER_FREE_QUEUE festlegende OID-Anforderung aus. Das InformationBuffer-Element der NDIS_OID_REQUEST-Struktur enthält einen Zeiger auf eine NDIS_RECEIVE_QUEUE_FREE_PARAMETERS-Struktur mit einem Warteschlangenbezeichner vom Typ NDIS_RECEIVE_QUEUE_ID.
OID_RECEIVE_FILTER_FREE_QUEUE gibt eine Empfangswarteschlange frei, die einem überlastenden Treiber mithilfe der OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID zugewiesen wurde. Weitere Informationen zum Zuweisen einer Empfangswarteschlange finden Sie unter Zuweisen einer VM-Warteschlange.
Hinweis Die Standardwarteschlange, die über den Warteschlangenbezeichner NDIS_DEFAULT_RECEIVE_QUEUE_ID verfügt, ist immer zugeordnet und kann nicht freigegeben werden.
Ein überlastender Treiber muss alle Filter freigeben, die er für eine Warteschlange festlegt, bevor er die Warteschlange freigibt. Außerdem muss ein überlastender Treiber alle Empfangswarteschlangen freigeben, die er auf einem Netzwerkadapter zugeordnet hat, bevor er die NdisCloseAdapterEx-Funktion aufruft, um eine Bindung an den Netzwerkadapter zu schließen. NDIS gibt alle Warteschlangen frei, die auf einem Netzwerkadapter zugeordnet sind, bevor die MiniportHaltEx-Funktion des Miniport-Treibers aufgerufen wird.
Wenn ein Miniporttreiber eine Anforderung zum Freigeben einer Warteschlange empfängt, führt er folgende Aktionen aus:
DMA für freigegebene Speicherressourcen, die der Warteschlange zugeordnet sind, muss sofort beendet werden.
Generiert einen status Hinweis, der angibt, dass der DMA beendet wurde.
Wartet darauf, dass alle ausstehenden NET_BUFFER_LIST Strukturen zurückgegeben werden, die der Warteschlange zugeordnet sind.
Gibt den zugeordneten freigegebenen Arbeitsspeicher und die Hardwareressourcen frei.
Wenn ein Miniporttreiber eine OID_RECEIVE_FILTER_FREE_QUEUE set-Anforderung empfängt, muss die Warteschlange den Status DMA beenden, den DMA-Status in einer Warteschlange beenden, und der Miniporttreiber muss die status Änderung mithilfe der NDIS_STATUS_RECEIVE_QUEUE_STATE status anzeigen. Weitere Informationen zu Warteschlangenzuständen finden Sie unter Warteschlangenstatus und Vorgänge.
Nachdem der Miniporttreiber die NDIS_STATUS_RECEIVE_QUEUE_STATE status Zeigt, muss er warten, bis alle ausstehenden Empfangsanzeigen abgeschlossen sind, bevor er den zugeordneten freigegebenen Arbeitsspeicher freigeben kann. Weitere Informationen zum Freigeben von freigegebenem Arbeitsspeicher finden Sie unter Shared Memory-Ressourcenzuordnung.