Megosztás:


Protokollillesztő inicializálása

A rendszer meghívja a protokollillesztő DriverEntry rutinját, miután betölti az illesztőprogramot. A protokollillesztők rendszerszolgáltatásokként töltődnek be. A miniportillesztők betöltése előtt, alatt vagy után bármikor betölthetők.

A protokollillesztők lefoglalják az illesztőprogram-erőforrásokat, és regisztrálják a ProtocolXxx függvényeket a DriverEntryben. Ide tartoznak a CoNDIS-ügyfelek és a különálló híváskezelők. A ProtocolXxx-függvények NDIS-ben való regisztrálásához egy protokollillesztő meghívja az NdisRegisterProtocolDriver függvényt.

A DriverEntry STATUS_SUCCESS vagy azzal egyenértékű NDIS_STATUS_SUCCESS értéket ad vissza, ha az illesztőprogram sikeresen regisztrált az NDIS protokollillesztőként. Ha a DriverEntry nem tud inicializálni egy NdisXxx függvény vagy egy kernelmódú támogatási rutin által visszaadott hibaállapot propagálásával, az illesztőprogram nem marad betöltve. DriverEntry szinkron módon kell végrehajtani; más szóval, nem tudja visszaadni STATUS_PENDING vagy azzal egyenértékű NDIS_STATUS_PENDING.

Egy NDIS protokollillesztő DriverEntry függvényének meg kell hívnia a NdisRegisterProtocolDriver függvényt. Ha regisztrálni szeretné az illesztőprogram ProtocolXxx belépési pontjait az NDIS-kódtárban, a protokollillesztő inicializál egy NDIS_PROTOCOL_DRIVER_CHARACTERISTICS struktúrát, és átadja azt a NdisRegisterProtocolDriver-nak.

A NdisRegisterProtocolDriver-t hívó illesztőprogramoknak készen kell állniuk a ProtocolXxx-függvényeik bármelyikének azonnali hívására.

Az NDIS protokollillesztők a következő ProtocolXxx függvényeket biztosítják, amelyek az örökölt illesztőprogramok által biztosított függvények frissített verziói:

ProtocolSetOptions

ProtocolBindAdapterEx

ProtocolUnbindAdapterEx

ProtocolOpenAdapterCompleteEx

ProtocolCloseAdapterCompleteEx

ProtocolNetPnPEvent

ProtocolUninstall

Az NDIS protokollillesztők a következő ProtocolXxx függvényeket biztosítják a küldési és fogadási műveletekhez:

ProtocolReceiveNetBufferLists

ProtocolSendNetBufferListsComplete

A Plug and Play (PnP) támogatásához az NDIS protokollillesztők minden típusának regisztrálnia kell a teljesen működőképes ProtocolBindAdapterEx és ProtocolUnbindAdapterEx függvényeket. A DriverEntry függvényeknek általában közvetlenül azelőtt kell meghívniuk a NdisRegisterProtocolDriver-t , hogy az STATUS_SUCCESS vagy NDIS_STATUS_SUCCESS állapotértékkel rendelkező vezérlőt ad vissza.

Minden olyan protokollillesztőnek, amely az NDIS által definiált ProtocolXxx-függvényeken kívül standard kernelmódú illesztőprogram-rutinokat exportál, meg kell adnia az adott illesztőprogram-objektum azon illesztőprogram-rutinjainak belépési pontjait, amelyeket a rendszer átad a DriverEntry függvénynek. Az ilyen protokollillesztő DriverEntry függvényének funkcióiról további információt a DriverEntry rutin írása című témakörben talál.

Ha az illesztőprogramnak a hálózati I/O műveletek végrehajtásához szükséges erőforrások lefoglalására tett kísérlet meghiúsul, a DriverEntrynek fel kell szabadítania minden már lefoglalt erőforrást, mielőtt az irányítás visszakerül egy nem STATUS_SUCCESS vagy NDIS_STATUS_SUCCESS állapottal.

Ha hiba történik a NdisRegisterProtocolDriver sikeres hívása után, az illesztőprogramnak meg kell hívnia a NdisDeregisterProtocolDriver függvényt a DriverEntry visszatérése előtt.

Annak érdekében, hogy egy protokollillesztő konfigurálhassa az opcionális szolgáltatásokat, az NDIS meghívja a ProtocolSetOptions függvényt a protokollillesztő NdisRegisterProtocolDriver felé irányuló hívásának kontextusában. Az opcionális szolgáltatásokról további információt az Opcionális protokollillesztő-szolgáltatások konfigurálása című témakörben talál.

A CoNDIS-ügyfélillesztőknek meg kell hívniuk a NdisSetOptionalHandlers függvényt a ProtocolSetOptions függvényből. Az illesztőprogram inicializál egy NDIS_CO_CLIENT_OPTIONAL_HANDLERS struktúrát, és átadja azt a NdisSetOptionalHandlersOptionalHandlers paraméterében.

A CoNDIS önálló híváskezelőinek a NdisSetOptionalHandlers függvényt is meg kell hívniuk a ProtocolSetOptions függvényből. Az illesztőprogram inicializál egy NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS struktúrát, és a OptionalHandlers paraméterként adja át a NdisSetOptionalHandlers függvényben.

Az MCM-ek nem protokollillesztők. Ezért meg kell hívniuk a NdisSetOptionalHandlers függvényt a MiniportSetOptions függvényből. Az MCM inicializál egy NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS struktúrát, majd azt a NdisSetOptionalHandlersOptionalHandlers paraméterhez adja át.

Az NDIS regisztrációjának megszüntetéséhez egy protokollillesztő meghívja a NdisDeregisterProtocolDrivert a törlési rutinból.

A protokollillesztők eltávolítása előtt végzett tisztítási műveletek végrehajtásához a protokollillesztő regisztrálhat egy ProtocolUninstall függvényt . A ProtocolUninstall függvény nem kötelező. Előfordulhat például, hogy egy köztes illesztő protokolljának alsó széle protocolUninstall függvényt igényel. A köztes illesztőprogram a ProtocolUninstallban felszabadíthatja a protokoll peremhálózati erőforrásait, mielőtt az NDIS meghívja a MiniportDriverUnload függvényt.