激活 NDIS 端口

在微型端口驱动程序成功分配 NDIS 端口之后,在 NDIS 函数中使用端口号之前,驱动程序必须激活该端口。 若要激活端口,微型端口驱动程序会将端口激活即插即用 (PnP) 事件发送到 NDIS。 若要发送端口激活 PnP 事件,微型端口驱动程序在调用 NdisMNetPnPEvent 函数时使用 NetEventPortActivationPnP 事件 代码。

若要激活端口,微型端口驱动程序必须设置 NdisMNetPnPEventNetPnPEvent 参数指向的 NET_PNP_EVENT_NOTIFICATION 结构的成员,如下所示:

PortNumber
事件通知的源端口。 将此成员设置为零,因为端口号是在 NetPnPEvent 成员指定的结构的 Buffer 成员中提供的。

NetPnPEvent
描述端口激活事件的 NET_PNP_EVENT 结构。 按如下所示设置此结构的成员:

NetEvent
描述事件的事件代码。 将此成员设置为 NetEventPortActivation

缓冲区
指向NDIS_PORT结构链接列表 指针。 NDIS_PORT 结构的 Next 成员指向列表中的下一个NDIS_PORT结构。

BufferLength
Buffer 中指定的字节数。 将 BufferLength 设置为NDIS_PORT结构的大小。

其他成员
将 NET_PNP_EVENT 的其余成员设置为 NULL

微型端口驱动程序在 NDIS_PORT 结构的链接列表中列出已将状态从非活动更改为活动状态的端口。 但是,如果微型端口适配器的默认端口是 NetEventPortActivation PnP 事件的目标,则默认端口必须是列表中的唯一端口。

当微型端口驱动程序通知 NDIS 端口 (激活时,并且可能在此通知调用返回) 之前,微型端口驱动程序必须准备好处理与端口关联的发送请求和 OID 请求。 在 NdisMNetPnPEvent 调用返回之前,微型端口驱动程序不得在状态中使用新激活的端口的端口号或接收指示。

在默认端口处于活动状态之前,NDIS 不会通知过度驱动程序已激活的端口。 当 NDIS 调用协议驱动程序的 ProtocolBindAdapterEx 函数时,NDIS 会在 BindParameters 参数指向的 NDIS_BIND_PARAMETERS 结构的 ActivePorts 成员中提供所有当前活动端口的列表。 当微型端口驱动程序激活新端口时,NDIS 使用 NetEventPortActivation PnP 事件通知绑定到微型端口驱动程序的所有协议驱动程序。 有关在协议驱动程序中处理这些端口激活事件的详细信息,请参阅 处理端口激活 PnP 事件

在微型端口驱动程序分配 NDIS 端口之前,驱动程序必须调用 NdisMSetMiniportAttributes 函数以在 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 结构中设置注册属性。 微型端口驱动程序可以通过在调用 NdisMSetMiniportAttributes 时设置 NDIS_MINIPORT_CONTROLS_DEFAULT_PORT 属性标志来控制默认端口的激活。 如果微型端口驱动程序负责激活默认端口,则在微型端口驱动程序使用端口激活 PnP 事件激活默认端口之前,NDIS 不会启动微型端口适配器和超端口驱动程序之间的绑定。

NDIS_PORT结构的链接列表指定的所有端口都必须处于已分配状态。 微型端口驱动程序不应尝试激活已处于活动状态的端口;如果驱动程序尝试激活活动端口,则 NDIS 会将这种情况视为端口激活失败。

如果 NDIS 无法激活列表上的任何端口,则调用 NdisMNetPnPEvent 失败,并且列表中的任何端口都不会将状态更改为已激活状态。 如果 NDIS 由于某些端口不存在而无法激活端口, 则 NdisMNetPnPEvent 将返回NDIS_STATUS_INVALID_PORT返回值。 如果 NDIS 由于某些端口未处于已分配状态而无法激活端口, 则 NdisMNetPnPEvent 将返回NDIS_STATUS_INVALID_PORT_STATE返回值。

成功激活某个端口后,该端口将处于激活状态。 微型端口驱动程序可以指示处于激活状态的端口的接收数据和状态。

NDIS 将默认端口的身份验证状态传递给 NDIS_MINIPORT_INIT_PARAMETERS 结构的 DefaultPortAuthStates 成员处的 MiniportInitializeEx 函数。 如果微型端口驱动程序控制默认端口,则当微型端口驱动程序激活默认端口时,它可以使用默认身份验证设置激活默认端口。 若要使用默认身份验证设置,请在 NDIS_PORT_CHARACTERISTICS 结构的 Flags 成员中设置 NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS标志 。 微型端口驱动程序可以为其分配和激活的端口使用NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS标志。 对于激活情况,NDIS 将默认身份验证状态分配给新激活的端口,并忽略传递给 NetEventPortActivation 事件的 NdisMNetPnPEvent 的身份验证状态。

有关控制默认端口和分配端口的详细信息,请参阅 分配 NDIS 端口