提供版本信息的 NDIS 结构具有 一个标头 成员,该成员定义为 NDIS_OBJECT_HEADER 结构和 NDIS 驱动程序必须支持此类版本信息。
NDIS 可以支持支持比 当前版本的 NDIS 版本更高的或更低版本的 NDIS 的 驱动程序(即计算机运行的作系统版本支持的 NDIS 版本)。 此外, 驱动程序注册的 NDIS 版本 (即驱动程序在初始化期间报告的版本)可能低于驱动程序支持的最高版本。 例如,NDIS 5.1 驱动程序或 NDIS 6.1 驱动程序可以在运行 NDIS 6.0 的作系统版本上运行。 初始化期间,NDIS 5.1 驱动程序只是注册为 NDIS 5.1 驱动程序。 但是,NDIS 6.1 驱动程序必须检查当前版本的 NDIS,并且必须注册为支持可用最高级别的 NDIS 的驱动程序(在此示例中为 NDIS 6.0)。 有关如何获取当前 NDIS 版本的详细信息,请参阅 获取 NDIS 版本。
注意 在以后的结构修订中,不需要驱动程序支持所有功能。 例如,微型端口驱动程序可以创建版本 2 结构并提供适用于版本 1 结构的值。
若要访问具有版本信息的结构中的成员,NDIS 驱动程序必须完成以下过程:
在访问结构中的任何成员之前,请检查 Header.Revision 和 Header.Size 成员。
对于早期版本结构(即修订号低于与驱动程序支持的 NDIS 版本关联的数字的结构):
- 驱动程序必须验证 Header.Size 值是否适合 Header.Revision 值。 例如,NDIS_SIZEOF_Xxx_REVISION_1的值对于Xxx_REVISION_1是正确的,但对于Xxx_REVISION_2来说太小。
- Header.Size 值必须等于或大于NDIS_SIZEOF_Xxx_REVISION_Nn(其中 Nn 是驱动程序正在使用的结构的修订号),并且驱动程序必须根据该修订正确处理结构中的信息。
对于更高版本结构(即,具有比驱动程序支持的 NDIS 版本关联的数字更高的版本号的结构),驱动程序可以使用结构,就好像它是该结构的较旧修订一样。 更高版本结构始终与旧版本兼容。
驱动程序必须为已注册的 NDIS 版本使用结构的正确版本。 例如,NDIS 6.1 驱动程序必须通过在NDIS_OFFLOAD结构中报告其卸载功能,并将NDIS_OBJECT_HEADER结构中的成员设置为指示NDIS_OFFLOAD_REVISION_2。 但是,驱动程序不必支持NDIS_OFFLOAD_REVISION_2附带的所有功能。
成功处理 OID 集请求的驱动程序必须在从 OID 集请求返回时在 NDIS_OID_REQUEST 结构中设置 SupportedRevision 成员。 SupportedRevision 成员会通知请求的发起方有关驱动程序支持的修订版本。 例如,一个微型端口驱动程序可以创建一个Xxx_REVISION_2结构,提供适合Xxx_REVISION_1结构所需的值,并使用零填充结构的其余部分。 微型端口驱动程序将报告 SupportedRevision 成员中的 Xxx_REVISION_1。 在这种情况下,可以支持Xxx_REVISION_2的协议驱动程序将使用微型端口驱动程序支持的Xxx_REVISION_1信息。
若要确定基础驱动程序成功处理的信息,发出 OID 请求的过度驱动程序必须在 OID 请求返回后检查 NDIS_OID_REQUEST 结构中 SupportedRevision 成员中的值。