Ara Sürücü Ağ Veri Yönetimi

Orta seviye sürücü, ağ üzerinden göndermek üzere üst düzey bir sürücüden bir veya daha fazla ilişkili MDL'ye sahip NET_BUFFER_LIST yapıları alır. Ara sürücü, sürücünün bağlantısız bir alt kenarı varsa, verileri NdisSendNetBufferLists çağırarak veya sürücünün bağlantı-odaklı bir alt kenarı varsa, NdisCoSendNetBufferLists çağırarak temel sürücüye geçirebilir. Alternatif olarak, ara sürücü zincirlenmiş arabelleklerin içeriğini veya diğer iletimlere göre gelen verilerin sıralamasını veya zamanlamasını değiştirmek için bazı eylemler gerçekleştirebilir.

Ara sürücünün amacına bağlı olarak, böyle bir sürücü gelen NET_BUFFER_LIST yapılarına zincirlenmiş arabellekleri yeniden paketleyebilir. Örneğin, ara sürücü aşağıdaki durumlarda ağ verilerini yeniden paketler:

  • Ara sürücü, üst protokol sürücüsünden, temel alınan ortam üzerinden tek bir arabellekte gönderilebilenden daha büyük bir veri arabelleği alır. Sonuç olarak, ara sürücü gelen verileri daha küçük arabelleklere bölmelidir.

  • Ara sürücü, her gönderme işlemini temel alınan sürücüye iletmeden önce verileri sıkıştırarak veya şifreleyerek ağ verilerinin uzunluğunu veya içeriğini değiştirir.

Ağ veri yönetimi oluşturma hakkında bilgi için bkz. protokol sürücüsü arabellek yönetimi .

NDIS, NET_BUFFER_LIST yapılarını kopyalamak ve parçalamak için arabirimler sağlar. Yapıları kopyalama ve parçalama hakkında daha fazla bilgi için bkz. türetilmiş NET_BUFFER_LIST Yapıları .

NET_BUFFER_LIST yapıları, gerektiğinde, sürücünün başlatılması sırasında veya ProtocolBindAdapterEx işlevinde ayrılabilir. Bir ara sürücü geliştiricisi, gerekirse ve performans nedenleriyle, başlatma zamanında bir dizi yapı ayırabilir. Böylece, ProtocolReceiveNetBufferLists işlevi daha üst seviyedeki bir sürücüye göstermek için gelen verileri kopyalayabileceği önceden ayrılmış kaynaklara sahip olur. Aynı şekilde, MiniportSendNetBufferLists işlevi, gelen ağ gönderi verilerini bir sonraki daha alt seviyedeki sürücüye aktarmak için kullanılabilir NET_BUFFER_LIST yapıları (ve muhtemelen arabellekler) bulundurur.

Ara sürücü, gönderilen verileri veya alınan verileri yeni bir arabelleğe veya arabelleklere kopyalarsa ve son arabellekteki gerçek veri uzunluğu arabelleğe ayrılan uzunluktan azsa, ara sürücü NdisAdjustMdlLength çağırarak arabelleği verilerin gerçek uzunluğuna ayarlayabilir.

Bağlantısız alt kenara sahip bir ara sürücü, daima ilgili miniport bağdaştırıcısından gelen verileri ProtocolReceiveNetBufferLists işlevi aracılığıyla alır.

Bağlantı odaklı alt kenara sahip bir ara sürücü, her zaman ProtocolCoReceiveNetBufferLists işlevinden bir miniport bağdaştırıcısından gelen verileri alır.