Paylaşılan Bellek Kaynaklarının Dağıtımı

Bir VM kuyruğu için paylaşılan bellek kaynaklarını ayırmak için bir miniport sürücüsü NdisAllocateSharedMemory işlevini çağırır. Örneğin, miniport sürücüsü OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID'yi aldığında paylaşılan belleği ayırır. Ayrıca, bir miniport sürücüsü, ağ bağdaştırıcısı başlatma sırasında varsayılan kuyruk için paylaşılan bellek ayırabilir. Kuyrukları ayırma hakkında daha fazla bilgi için bkz. VM Kuyruğu ayırma.

Miniport sürücüsü, kuyruk boşaltılana kadar kuyruk için daha fazla bellek ayırabilir. Kuyruğu boşaltma hakkında daha fazla bilgi için bkz. VM Kuyruğu boşaltma.

NDIS_SHARED_MEMORY_PARAMETERS yapısı, paylaşılan bellek ayırma isteği için paylaşılan bellek parametrelerini belirtir. Miniport sürücüleri bu yapıyı NdisAllocateSharedMemory işlevine geçirir. NDIS bu yapıyı NetAllocateSharedMemory işlevine (ALLOCATE_SHARED_MEMORY_HANDLER giriş noktası) geçirir.

Bir miniport sürücüsü paylaşılan belleği ayırdığında aşağıdakileri belirtir:

  • Kuyruk tanımlayıcısı.

  • Paylaşılan bellek uzunluğu.

  • Paylaşılan belleğin nasıl kullanıldığı. Miniport sürücüsü, paylaşılan belleğin alma arabellekleri için kullanılacağını belirtmek amacıyla NdisSharedMemoryUsageReceive değerini belirtir.

NDIS_SHARED_MEM_PARAMETERS_CONTIGOUS bayrağı Flags üyesinde ayarlanmamışsa, paylaşılan bellek bitişik olmayan bellekte bulunan bir dağılım toplama listesinde belirtilebilir.

NDIS_SHARED_MEMORY_USAGE numaralandırması, paylaşılan belleğin nasıl kullanıldığını belirtir. NDIS_SHARED_MEMORY_USAGE numaralandırması NDIS_SHARED_MEMORY_PARAMETERS ve NDIS_SCATTER_GATHER_LIST_PARAMETERS yapılarında kullanılır. VMQ alma veri arabelleklerindeki paylaşılan bellek parametreleri hakkında bilgi için bkz. Alma Arabellekleri'nde Paylaşılan Bellek.

NdisAllocateSharedMemory işlevi çağırana aşağıdakileri sağlar:

  • Ayrılan belleğin sanal adresi.

  • Dağılım-toplama listesi.

  • Paylaşılan bellek tutamacı - alım bildirimleri için.

  • Ayırma kulpu - belleği daha sonra belirlemek için kullanılır.

Miniport sürücüleri, bir kuyruk için paylaşılan belleği boşaltmak için NdisFreeSharedMemory işlevini çağırır. Miniport sürücüsü paylaşılan belleği varsayılan olmayan bir kuyruk için ayırdıysa, OID_RECEIVE_FILTER_FREE_QUEUE OID bağlamında, kuyruğu serbest bırakırken paylaşılan belleği de serbest bırakır. Miniport sürücüleri, MiniportHaltEx işlevi bağlamında varsayılan kuyruk için ayırdıkları boş paylaşılan bellek.