初始化微型端口适配器
当网络设备可用时,系统会加载所需的 NDIS 微型端口驱动程序(如果尚未加载)。 随后,即插即用 (PnP) 管理器向 NDIS 发送即插即用 IRP 来启动设备。 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数来初始化用于网络 I/O 操作的适配器。 初始化驱动程序后,NDIS 可以随时调用 MiniportInitializeEx 。 有关微型端口驱动程序初始化的详细信息,请参阅 初始化微型端口驱动程序。
在 MiniportInitializeEx 返回之前,NDIS 不会提交要初始化的适配器的请求。 适配器处于“正在初始化”状态。
微型端口驱动程序通常在 MiniportInitializeEx 中执行以下任务:
获取适配器的配置信息。
获取有关适配器的硬件资源的信息。
调用 NdisMSetMiniportAttributes 并提供以下与适配器关联的属性:
- 指向驱动程序分配的上下文区域的指针。
- 适当的属性标志。
- 调用其 MiniportCheckForHangEx 函数的超时间隔。
- 接口类型。
初始化适配器特定的资源。
微型端口驱动程序指定 miniportInitializeEx 传递给 NdisMSetMiniportAttributes的 NDIS_MINIPORT_ADAPTER_ATTRIBUTES 结构中的适配器属性。
通常, MiniportInitializeEx 按以下顺序分配特定于适配器的资源:
非分页池内存。
NET_BUFFER 和 NET_BUFFER_LIST 池 (请参阅 微型端口驱动程序发送和接收操作) 。
旋转锁。
定时器。
IO 端口。
DMA (请参阅 散点/收集 DMA) 。
共享内存。
中断 (请参阅 管理中断) 。
MiniportInitializeEx 成功返回后,适配器将处于 Paused 状态。 NDIS 可以调用 MiniportRestart 函数,将适配器转换为“正在运行”状态。 有关详细信息,请参阅 启动微型端口适配器。
如果 MiniportInitializeEx 返回NDIS_STATUS_SUCCESS,驱动程序应在 MiniportHaltEx 函数中释放适配器的所有资源。 有关详细信息,请参阅 停止微型端口适配器。
如果驱动程序返回NDIS_STATUS_SUCCESS,驱动程序必须调用 NdisMSetMiniportAttributes 并在NDIS_MINIPORT_ADAPTER_ATTRIBUTES结构中设置 GeneralAttributes。
如果 MiniportInitializeEx 失败, MiniportInitializeEx 必须释放它分配的所有资源,然后才能返回,适配器将返回到“已停止”状态。