启动驱动程序堆栈

系统检测到网络设备后,系统将启动设备的 NDIS 驱动程序堆栈。 设备可以是虚拟设备,也可以是物理设备。 在任一情况下,驱动程序堆栈启动操作将按如下所示进行:

  1. 如果驱动程序尚未加载,系统会加载并初始化这些驱动程序。

    它不会按任何特定顺序加载驱动程序。

  2. 系统调用每个驱动程序的 DriverEntry 函数。

    在 DriverEntry 返回后:

    • 设备的微型端口适配器处于“已停止”状态。
    • 筛选器模块处于“分离”状态。
    • 协议绑定处于“未绑定”状态。
  3. 系统请求 NDIS 启动微型端口适配器。

    为了初始化微型端口适配器,NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数。 如果 MiniportInitializeEx 成功,微型端口适配器将进入 Paused 状态。

  4. NDIS 附加筛选器模块,从最靠近微型端口驱动程序的模块开始,并前进到驱动程序堆栈的顶部。

    若要请求驱动程序将筛选器模块附加到驱动程序堆栈,NDIS 调用筛选器驱动程序的 FilterAttach 函数。 如果每个附加操作都成功,筛选器模块将进入“已暂停”状态。

  5. 在所有基础驱动程序都处于“已暂停”状态后,NDIS 会调用协议驱动程序的 ProtocolBindAdapterEx 函数。

    然后,协议驱动程序绑定进入“打开”状态。 协议驱动程序调用 NdisOpenAdapterEx 函数以使用微型端口适配器打开绑定。

  6. NDIS 为绑定分配必要的资源,并调用协议驱动程序的 ProtocolOpenAdapterCompleteEx 函数。

    绑定进入“已暂停”状态。

  7. 若要完成绑定操作,协议驱动程序调用 NdisCompleteBindAdapterEx 函数。

  8. NDIS 重启驱动程序堆栈。 有关重启驱动程序堆栈的详细信息,请参阅 重启驱动程序堆栈