初始化标头数据拆分提供程序

若要支持标头数据拆分,微型端口驱动程序必须注册为 NDIS 6.1 或更高版本驱动程序。 微型端口驱动程序的源文件必须指定 DNDIS61_MINIPORT=1,而不是 DNDIS60_MINIPORT=1。 微型端口驱动程序还必须在 NDIS_MINIPORT_DRIVER_CHARACTERISTICS 结构中指定 NDIS 6.1 或更高版本。

为了注册其标头数据拆分属性,NDIS 6.1 微型端口驱动程序从其 MiniportInitializeEx 函数调用 NdisMSetMiniportAttributes 函数,并传递 NdisMSetMiniportAttributes 初始化NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES结构。

NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 结构包含以下信息:

  • NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 的 HDSplitAttributes 成员包含指向 NDIS_HD_SPLIT_ATTRIBUTES 结构的指针,该结构指定微型端口适配器提供的标头数据拆分功能。

  • NDIS_HD_SPLIT_ATTRIBUTES 的 HardwareCapabilities 成员包含微型端口适配器支持的标头数据拆分功能。 这些功能可以包括当前由 INF 文件设置或通过 “高级 属性”页禁用的功能。

  • NDIS_HD_SPLIT_ATTRIBUTES 的 CurrentCapabilities 成员包含微型端口适配器支持的当前标头数据拆分功能。 如果通过 *HeaderDataSplit 标准化 INF 关键字 (keyword) 启用标头数据拆分,微型端口驱动程序将使用与 HardwareCapabilities 成员相同的标志来指示当前的标头数据拆分配置。 有关 *HeaderDataSplit 的详细信息,请参阅 用于Header-Data拆分的标准化 INF 关键字

  • NDIS_HD_SPLIT_ATTRIBUTES 的 HDSplitFlags 成员包含标头数据拆分配置标志。 微型端口驱动程序应在调用 NdisMSetMiniportAttributes 之前将此成员设置为零。 NDIS 使用配置标志的按位 OR 设置此成员。 在 NdisMSetMiniportAttributes 成功返回后,微型端口驱动程序必须在 HDSplitFlags 中检查标志设置,并相应地配置硬件。

NDIS 使用 NDIS_HD_SPLIT_ENABLE_HEADER_DATA_SPLIT 标志为微型端口适配器启用标头数据拆分。 如果微型端口驱动程序未在 NDIS_HD_SPLIT_ATTRIBUTES 结构的 CurrentCapabilities 成员中设置NDIS_HD_SPLIT_CAPS_SUPPORTS_HEADER_DATA_SPLIT标志,则 NDIS 不会设置 NDIS_HD_SPLIT_ENABLE_HEADER_DATA_SPLIT 。 如果 NDIS 设置NDIS_HD_SPLIT_ENABLE_HEADER_DATA_SPLIT标志,微型端口驱动程序应在 NIC 中启用标头数据拆分。

微型端口驱动程序应在调用 NdisMSetMiniportAttributes 之前将 NDIS_HD_SPLIT_ATTRIBUTES 结构的 BackfillSize 成员设置为零。 如果微型端口驱动程序必须在拆分帧的数据缓冲区中预先分配回填存储,则 NDIS 将设置 BackfillSize 成员。 在 NdisMSetMiniportAttributes 成功返回后,微型端口驱动程序必须使用 NDIS 指定的 BackfillSize 值并预先分配数据缓冲区。 有关数据缓冲区回填大小的详细信息,请参阅 为数据缓冲区分配回填

在调用 NdisMSetMiniportAttributes 之前,微型端口驱动程序应将 NDIS_HD_SPLIT_ATTRIBUTES 结构的 MaxHeaderSize 成员设置为零。 NDIS 将此成员设置为拆分帧的标头缓冲区允许的最大大小。 NdisMSetMiniportAttributes 成功返回后,微型端口驱动程序必须使用 NDIS 指定的 MaxHeaderSize 值。 有关最大标头大小的详细信息,请参阅 分配标头缓冲区