Aracılığıyla paylaş


Filtre Sürücüsü Arabellek Yönetimi

Filtre sürücüleri, diğer sürücülerden alınan ağ verilerini kopyalamak veya gönderme veya alma işlemlerini başlatmak için arabellekler oluşturur.

Bir filtre sürücüsü arabellek oluşturmazsa, sürücü arabellek havuzlarını yönetmez. Böyle bir sürücü diğer sürücülerden aldığı arabellekleri basitçe geçirir.

Gönderim veya alma işlemlerini destekleyen bir filtre sürücüsü, NET_BUFFER_LIST yapı havuzlarını ve NET_BUFFER yapı havuzlarını yönetmelidir.

Bu havuzları oluşturmak için sürücüler aşağıdaki işlevleri çağırır:

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

Filtre sürücüleri havuzlardan yapıları ayırmak için aşağıdaki işlevleri kullanabilir:

NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBuffer

NdisAllocateNetBufferAndNetBufferList çağırmak, NdisAllocateNetBufferList ve ardından NdisAllocateNetBufferçağırmaktan daha verimlidir. Ancak NdisAllocateNetBufferAndNetBufferList NET_BUFFER_LIST yapısında yalnızca bir NET_BUFFER nesnesi oluşturur. NdisAllocateNetBufferAndNetBufferListkullanmak için, sürücü NdisAllocateNetBufferListPoolçağırdığında AllocateNetBuffer parametresini TRUE olarak ayarlamalıdır.

Gönderme isteklerini başlatan filtre sürücüleri, altta yatan sürücülerin bağlamını ve geri doldurma alanı gereksinimlerini belirlemelidir. Filtre sürücüleri, temel sürücülerin geri doldurma gereksinimlerini belirlemek için yeniden başlatma özniteliklerini kullanır. Filtre sürücüsü, Yeniden Başlatma durumundaki geri doldurma ve bağlam gereksinimlerini belirlemelidir. Sürücü, yığının tamamı için yeterli geri doldurma ve bağlam alanı ayırmalıdır. Gerekirse, bir filtre sürücüsü havuzları boşaltabilir ve Yeniden Başlatıyor durumunda yeniden yerleştirebilir.

Filtre sürücüleri havuzları boşaltmak için aşağıdaki işlevleri kullanır:

NdisFreeNetBufferListPool

NdisFreeNetBufferPool

Filtre sürücüleri, havuzlardan tahsis edilmiş yapıları serbest bırakmak için aşağıdaki işlevleri kullanır.

NdisFreeNetBufferList

NdisFreeNetBuffer

Sürücüler, ilişkili NET_BUFFER_LIST yapısını boşaltmadan önce NdisAllocateNetBuffer ile ayrılan NET_BUFFER yapılarını serbest bırakmalıdır. NdisAllocateNetBufferAndNetBufferList ile ayrılan NET_BUFFER yapılar, sürücü ilişkili NET_BUFFER_LIST yapısı için NdisFreeNetBufferList çağırdığında serbest bırakılır.