初始化微型端口驱动程序

当网络设备可用时,系统将加载 NDIS 微型端口驱动程序以管理设备 (如果尚未加载驱动程序) 。 每个微型端口驱动程序都必须提供 DriverEntry 函数。 系统在 加载驱动程序后调用 DriverEntryDriverEntry 将微型端口驱动程序的特征注册到 NDIS (包括支持的 NDIS 版本和驱动程序入口点) 。

系统将两个参数传递给 DriverEntry

  • 指向驱动程序对象的指针,该对象由 I/O 系统创建。

  • 指向注册表路径的指针,该路径指定存储特定于驱动程序的参数的位置。

DriverEntry 中,微型端口驱动程序在调用 NdisMRegisterMiniportDriver 函数时传递这两个指针。 微型端口驱动程序通过将入口点存储在 NDIS_MINIPORT_DRIVER_CHARACTERISTICS 结构中,并传递给 NdisMRegisterMiniportDriver 来导出一组标准 MiniportXxx 函数。

微型端口驱动程序的 DriverEntry 返回对 NdisMRegisterMiniportDriver 的调用返回的值

微型端口驱动程序还会执行 DriverEntry 中所需的任何其他特定于驱动程序的初始化。 驱动程序在 MiniportInitializeEx 函数中执行特定于适配器的初始化。 有关适配器初始化的信息,请参阅 初始化适配器

DriverEntry 可以在堆栈 NDIS_MINIPORT_DRIVER_CHARACTERISTICS 分配该结构,因为 NDIS 库将相关信息复制到其自己的存储。 DriverEntry 应在其成员中设置驱动程序提供的任何值之前,使用 NdisZeroMemory 清除此结构的内存。 MajorNdisVersionMinorNdisVersion 成员必须包含驱动程序支持的 NDIS 的主要版本和次要版本。 在特征结构的每个 XxxHandler 成员中, DriverEntry 必须设置驱动程序提供的 MiniportXxx 函数的入口点,或者成员必须为 NULL

若要使微型端口驱动程序能够配置可选服务,NDIS 在微型端口驱动程序调用 NdisMRegisterMiniportDriver 的上下文中调用 MiniportSetOptions 函数。 有关可选服务详细信息,请参阅 配置可选微型端口驱动程序服务

调用 NdisMRegisterMiniportDriver 的驱动程序必须准备好让 NDIS 在 DriverEntry 返回后随时调用其 MiniportInitializeEx 函数。 此类驱动程序必须有足够的安装和配置信息存储在注册表中,或者可从对 NdisXxx 总线类型特定的配置函数的调用获取,以设置驱动程序执行网络 I/O 操作所需的任何特定于 NIC 的资源。

微型端口驱动程序最终必须调用 NdisMDeregisterMiniportDriver ,以释放通过调用 NdisMRegisterMiniportDriver 分配的资源。 如果在调用 NdisMRegisterMiniportDriver 成功后驱动程序初始化失败,则驱动程序可以从 DriverEntry 中调用 NdisMDeregisterMiniportDriver。 否则,微型端口驱动程序必须释放它在 MiniportDriverUnload 函数中分配的特定于驱动程序的资源。 换句话说,如果 NdisMRegisterMiniportDriver 不返回NDIS_STATUS_SUCCESS, DriverEntry 必须在返回控制之前释放它分配的任何资源。 如果发生这种情况,将不会加载驱动程序。 有关详细信息,请参阅 卸载微型端口驱动程序