初始化微型端口适配器

当网络设备可用时,系统会加载所需的 NDIS 微型端口驱动程序(如果尚未加载)。 随后,即插即用 (PnP) 管理器向 NDIS 发送即插即用 IRP 来启动设备。 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数来初始化用于网络 I/O 操作的适配器。 初始化驱动程序后,NDIS 可以随时调用 MiniportInitializeEx 。 有关微型端口驱动程序初始化的详细信息,请参阅 初始化微型端口驱动程序

MiniportInitializeEx 返回之前,NDIS 不会提交要初始化的适配器的请求。 适配器处于“正在初始化”状态。

微型端口驱动程序通常在 MiniportInitializeEx 中执行以下任务:

  1. 获取适配器的配置信息。

  2. 获取有关适配器的硬件资源的信息。

  3. 调用 NdisMSetMiniportAttributes 并提供以下与适配器关联的属性:

    • 指向驱动程序分配的上下文区域的指针。
    • 适当的属性标志。
    • 调用其 MiniportCheckForHangEx 函数的超时间隔。
    • 接口类型。
  4. 初始化适配器特定的资源。

微型端口驱动程序指定 miniportInitializeEx 传递给 NdisMSetMiniportAttributes的 NDIS_MINIPORT_ADAPTER_ATTRIBUTES 结构中的适配器属性。

通常, MiniportInitializeEx 按以下顺序分配特定于适配器的资源:

  1. 非分页池内存。

  2. NET_BUFFERNET_BUFFER_LIST 池 (请参阅 微型端口驱动程序发送和接收操作) 。

  3. 旋转锁。

  4. 定时器。

  5. IO 端口。

  6. DMA (请参阅 散点/收集 DMA) 。

  7. 共享内存。

  8. 中断 (请参阅 管理中断) 。

MiniportInitializeEx 成功返回后,适配器将处于 Paused 状态。 NDIS 可以调用 MiniportRestart 函数,将适配器转换为“正在运行”状态。 有关详细信息,请参阅 启动微型端口适配器

如果 MiniportInitializeEx 返回NDIS_STATUS_SUCCESS,驱动程序应在 MiniportHaltEx 函数中释放适配器的所有资源。 有关详细信息,请参阅 停止微型端口适配器

如果驱动程序返回NDIS_STATUS_SUCCESS,驱动程序必须调用 NdisMSetMiniportAttributes 并在NDIS_MINIPORT_ADAPTER_ATTRIBUTES结构中设置 GeneralAttributes

如果 MiniportInitializeEx 失败, MiniportInitializeEx 必须释放它分配的所有资源,然后才能返回,适配器将返回到“已停止”状态。

停止微型端口适配器

微型端口适配器状态和操作

微型端口驱动程序发送和接收操作

散点/收集 DMA

启动微型端口适配器