分配 NDIS 端口

若要为微型端口适配器分配 NDIS 端口,微型端口驱动程序会调用 NdisMAllocatePort 函数。 NdisMAllocatePort 是同步的,在 NDIS 成功分配端口所需的资源后返回。

在微型端口驱动程序调用 NdisMAllocatePort 之前,驱动程序必须调用 NdisMSetMiniportAttributes 函数来设置 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 结构中的属性。 在对 NdisMSetMiniportAttributes 的调用成功返回之后,以及 NDIS 为该微型端口适配器调用 MiniportHaltEx 函数之前,微型端口驱动程序可以为微型端口适配器调用 NdisMAllocatePort。

NDIS 始终分配默认端口 (端口零) 因此微型端口驱动程序不应分配默认端口。 NDIS 在微型端口驱动程序返回 MiniportHaltEx 格式后释放默认端口。

当微型端口驱动程序调用 NdisMAllocatePort 时,NDIS 会将端口号分配给端口。 驱动程序在调用 NdisMAllocatePort 之前,在NDIS_PORT_CHARACTERISTICS结构中指定端口特征。 当 NdisMAllocatePort 成功返回时,PortCharacteristics 参数指定的 NDIS_PORT_CHARACTERISTICS 的 PortNumber 成员将设置为 NDIS 分配给该端口的端口号。

MiniportHaltEx 返回之前,微型端口驱动程序必须调用 NdisMFreePort 函数以释放与微型端口适配器关联的所有端口。 如果微型端口适配器初始化失败,驱动程序必须调用 NdisMFreePort 以释放驱动程序在从 MiniportInitializeEx 函数返回之前分配的所有端口。 有关释放 NDIS 端口的详细信息,请参阅 释放 NDIS 端口

微型端口驱动程序可以分配的最大端口数是0xffffff。 但是,在实践中,驱动程序会根据端口类型和驱动程序应用程序的要求设置最大数目。 例如,对于网桥应用程序,端口数不太可能超过 16 个。 对于使用 802.1x 请求端口的接入点,端口数会更高,对于使用虚拟专用网络 (VPN) 端口的 WAN 驱动程序,端口数要高得多。

微型端口驱动程序分配端口后,端口处于已分配状态,并且端口不处于活动状态。 在激活端口之前,端口不能用于发送和接收数据、启动状态指示、发出 OID 请求或启动即插即用 (PnP) 事件。 在微型端口驱动程序在 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 结构中设置注册属性后,NDIS 会自动激活默认端口。 若要请求 NDIS 不激活默认端口,微型端口驱动程序可以在 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 的 AttributeFlags 成员中设置NDIS_MINIPORT_ATTRIBUTES_CONTROLS_DEFAULT_PORT。

NDIS 将默认端口的身份验证状态传递给 NDIS_MINIPORT_INIT_PARAMETERS 结构的 DefaultPortAuthStates 成员处的 MiniportInitializeEx 函数。 如果微型端口驱动程序控制默认端口,则当微型端口驱动程序激活默认端口时,它可以使用默认身份验证设置激活默认端口。 有关激活默认端口的详细信息,请参阅 激活 NDIS 端口

微型端口驱动程序可以对驱动程序分配和激活的端口使用NDIS_PORT_CHARACTERISTICS结构的 Flags 成员中的 NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS 标志。 对于分配情况,NDIS 将默认身份验证状态分配给新端口,并忽略传递给 NdisMAllocatePort 函数的身份验证状态。

有关 NDIS 端口状态的详细信息,请参阅 NDIS 端口状态。 有关激活端口的详细信息,请参阅 激活 NDIS 端口