VM Kuyruğu boşaltma

Üst düzey bir sürücü bir alma kuyruğunu boşaltmak için OID_RECEIVE_FILTER_FREE_QUEUE ayar OID isteği gönderir. NDIS_OID_REQUEST yapısının InformationBuffer üyesi, NDIS_RECEIVE_QUEUE_IDtüründe bir kuyruk tanımlayıcısına sahip bir NDIS_RECEIVE_QUEUE_FREE_PARAMETERS yapısının işaretçisini içerir.

OID_RECEIVE_FILTER_FREE_QUEUE, üzerinde çalışan bir sürücünün OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID'yi kullanarak ayırdığı alma kuyruğunu serbest bırakır. Alım kuyruğu ayırma hakkında daha fazla bilgi için bkz. VM Kuyruğu Ayırma.

Not Varsayılan kuyruk, NDIS_DEFAULT_RECEIVE_QUEUE_ID kuyruk tanımlayıcısına sahip olup, her zaman ayrılır ve serbest bırakılamaz.

Üst düzey bir sürücü, kuyruğu boşaltmadan önce kuyrukta oluşturduğu tüm filtreleri serbest bırakmalıdır. Ayrıca, aşırı yükleyen bir sürücünün ağ bağdaştırıcısına bağlamayı kapatmak için NdisCloseAdapterEx işlevini çağırmadan önce ağ bağdaştırıcısında ayırmış olduğu tüm alma kuyruklarını boşaltması gerekir. NDIS, miniport sürücüsünün MiniportHaltEx işlevini çağırmadan önce bir ağ bağdaştırıcısında ayrılan tüm kuyrukları serbest bırakır.

Bir miniport sürücüsü kuyruk boşaltma isteği aldığında aşağıdakileri yapar:

  • Kuyrukla ilişkili paylaşılan bellek kaynaklarına DMA'nın hemen durdurulması gerekir.

  • DMA'nın durdurulduğunu belirtmek için bir durum göstergesi oluşturur.

  • Kuyrukla ilişkili tüm bekleyen NET_BUFFER_LIST yapılarının döndürülmesini bekler.

  • İlişkili paylaşılan bellek ve donanım kaynaklarını serbest bırakır.

Bir miniport sürücüsü OID_RECEIVE_FILTER_FREE_QUEUE kümesi isteği aldığında kuyruğun DMA'yı durdur durumunu girmesi, kuyrukta DMA'yı durdurması ve miniport sürücüsünün NDIS_STATUS_RECEIVE_QUEUE_STATE durum göstergesini kullanarak durum değişikliğini belirtmesi gerekir. Kuyruk durumları hakkında daha fazla bilgi için bkz. Kuyruk Durumları ve İşlemler.

Miniport sürücüsü NDIS_STATUS_RECEIVE_QUEUE_STATE durum göstergesini verdikten sonra, ilişkili paylaşılan belleği boşaltmadan önce bekleyen tüm alma göstergelerinin tamamlanmasını beklemesi gerekir. Paylaşılan belleği boşaltma hakkında daha fazla bilgi için bkz. Paylaşılan Bellek Kaynak Ayırma.