Aracılığıyla paylaş


Protokol Sürücüsü Başlatma

Sistem, sürücüyü yükledikten sonra bir protokol sürücüsünün DriverEntry yordamını çağırır. Protokol sürücüleri sistem hizmetleri olarak yüklenir. Miniport sürücülerinin yüklenmesinden önce, sırasında veya sonrasında herhangi bir zamanda yüklenebilirler.

Protokol sürücüleri sürücü kaynaklarını ayırır ve ProtocolXxx işlevlerini DriverEntry'de kaydeder. Buna CoNDIS istemcileri ve tek başına çağrı yöneticileri dahildir. protokol sürücüsü, ProtocolXxx işlevlerini NDIS'ye kaydetmek için NdisRegisterProtocolDriver işlevini çağırır.

DriverEntry, sürücü NDIS protokol sürücüsü olarak başarıyla kaydedildiyse STATUS_SUCCESS veya eşdeğer NDIS_STATUS_SUCCESS döndürür. DriverEntry, NdisXxx işlevi tarafından döndürülen bir hata durumunu yayarak veya bir çekirdek mod desteği rutini yüzünden başlatma işlemi başarısız olursa, sürücü yüklü kalmaz. DriverEntry eşzamanlı olarak yürütülmelidir; yani STATUS_PENDING veya eşdeğer NDIS_STATUS_PENDING değerini döndüremez.

NDIS protokol sürücüsünün DriverEntry işlevi, NdisRegisterProtocolDriver işlevini çağırmalıdır. Sürücünün ProtocolXxx giriş noktalarını NDIS kitaplığına kaydetmek için, protokol sürücüsü bir NDIS_PROTOCOL_DRIVER_CHARACTERISTICS yapısı başlatır ve bunu NdisRegisterProtocolDriveriletir.

NdisRegisterProtocolDriver çağıran sürücülerin ProtocolXxx işlevlerinden herhangi birine anında çağrı için hazırlanması gerekir.

NDIS protokol sürücüleri, eski sürücülerin sağladığı işlevlerin güncelleştirilmiş sürümleri olan ProtocolXxx işlevlerini sağlar:

ProtocolSetOptions

ProtocolBindAdapterEx

ProtocolUnbindAdapterEx

ProtocolOpenAdapterCompleteEx

ProtocolCloseAdapterCompleteEx

ProtocolNetPnPEvent

ProtokolKaldır

NDIS protokol sürücüleri, gönderme ve alma işlemleri için aşağıdaki ProtocolXxx işlevlerini sağlar:

ProtocolReceiveNetBufferLists

ProtocolSendNetBufferListsComplete

Tüm NDIS protokol sürücüleri, Tak ve Çalıştır'ı (PnP) desteklemek için tam işlevsel ProtocolBindAdapterEx ve tam işlevsel ProtocolUnbindAdapterEx işlevlerini kaydetmelidir. Genel olarak, bir DriverEntry işlevi, STATUS_SUCCESS veya NDIS_STATUS_SUCCESS durum değeriyle denetimi döndürmeden hemen önce NdisRegisterProtocolDriver çağırmalıdır.

NDIS tanımlı ProtocolXxx işlevlerine ek olarak standart çekirdek modu sürücü yordamları kümesini dışarı aktaran herhangi bir protokol sürücüsünün, DriverEntry işlevine geçirilen belirli sürücü nesnesindeki bu sürücü yordamları için giriş noktalarını ayarlaması gerekir. Böyle bir protokol sürücüsünün DriverEntry işlevinin işlevselliği hakkında daha fazla bilgi için DriverEntry Yordamı Yazmabölümüne bakın.

Sürücünün ağ G/Ç işlemlerini gerçekleştirmesi için gereken kaynakları ayırma girişimi başarısız olursa DriverEntry, STATUS_SUCCESS veya NDIS_STATUS_SUCCESS dışında bir durumla denetim döndürmeden önce önceden ayrılmış olan tüm kaynakları serbest bırakmalıdır.

Başarılı bir NdisRegisterProtocolDriverçağrısından sonra bir hata oluşursa, sürücünün DriverEntry döndürülmeden önce NdisDeregisterProtocolDriver işlevini çağırması gerekir.

Bir protokol sürücüsünün isteğe bağlı hizmetleri yapılandırmasına izin vermek için NDIS, protokol sürücüsünün NdisRegisterProtocolDriverçağrısı bağlamında ProtocolSetOptions işlevini çağırır. İsteğe bağlı hizmetler hakkında daha fazla bilgi için bkz. İsteğe Bağlı Protokol Sürücü Hizmetlerini Yapılandırma.

CoNDIS istemci sürücüleri, ProtocolSetOptions işlevinden NdisSetOptionalHandlers işlevini çağırmalıdır. Sürücü, bir NDIS_CO_CLIENT_OPTIONAL_HANDLERS yapısını başlatır ve bu yapıyı NdisSetOptionalHandlers'in OptionalHandlers parametresine geçirir.

CoNDIS tek başına çağrı yöneticileri de ProtocolSetOptions işlevinden NdisSetOptionalHandlers işlevini çağırmalıdır. Sürücü, bir NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS yapısı başlatır ve bunu NdisSetOptionalHandlers fonksiyonunun OptionalHandlers parametresine geçirir.

MCM'ler protokol sürücüleri değildir. Bu nedenle, MiniportSetOptions işlevinden NdisSetOptionalHandlers işlevini çağırmaları gerekir. MCM, bir NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS yapısını başlatır ve ardından bunu OptionalHandlers parametresi olarak NdisSetOptionalHandlers'e geçirir.

NDIS kaydını kaldırmak için protokol sürücüsü, Unload yordamından NdisDeregisterProtocolDriver çağırır.

Bir protokol sürücüsü kaldırılmadan önce temizleme işlemleri gerçekleştirmek için, protokol sürücüsü bir ProtocolUninstall işlevini kaydedebilir. ProtocolUninstall işlevi isteğe bağlıdır. Örneğin, ara sürücünün protokol alt kenarı bir ProtocolUninstall işlevi gerektirebilir. Ara sürücü, NDIS MiniportDriverUnload işlevini çağırmadan önce, protokol uç kaynaklarını ProtocolUninstall sırasında serbest bırakabilir.